aboutsummaryrefslogtreecommitdiff
path: root/docs/faq_debug.md
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2021-01-20 18:46:01 +0000
committerGitHub <noreply@github.com>2021-01-20 18:46:01 +0000
commit4e8166750b21cfd3feaba0d6024087fb5c76bca9 (patch)
treec124714e565321818485b96509fd70026fe49f84 /docs/faq_debug.md
parent1328ab7c7defdca40872273147f387618b1a48c3 (diff)
downloadqmk_firmware-4e8166750b21cfd3feaba0d6024087fb5c76bca9.tar.gz
qmk_firmware-4e8166750b21cfd3feaba0d6024087fb5c76bca9.zip
Small tweaks to docs to make them more user friendly (#11518)
* first pass * firmware firmware? * Split out debug + testing docs * tidy up duplicate css * Add extra info to debug example Co-authored-by: Drashna Jaelre <drashna@live.com> Co-authored-by: Drashna Jaelre <drashna@live.com>
Diffstat (limited to 'docs/faq_debug.md')
-rw-r--r--docs/faq_debug.md189
1 files changed, 80 insertions, 109 deletions
diff --git a/docs/faq_debug.md b/docs/faq_debug.md
index 7d5473678..b2d09605b 100644
--- a/docs/faq_debug.md
+++ b/docs/faq_debug.md
@@ -2,147 +2,118 @@
2 2
3This page details various common questions people have about troubleshooting their keyboards. 3This page details various common questions people have about troubleshooting their keyboards.
4 4
5# Debug Console 5## Debugging :id=debugging
6 6
7## `hid_listen` Can't Recognize Device 7Your keyboard will output debug information if you have `CONSOLE_ENABLE = yes` in your `rules.mk`. By default the output is very limited, but you can turn on debug mode to increase the amount of debug output. Use the `DEBUG` keycode in your keymap, use the [Command](feature_command.md) feature to enable debug mode, or add the following code to your keymap.
8When debug console of your device is not ready you will see like this:
9
10```
11Waiting for device:.........
12```
13
14once the device is plugged in then *hid_listen* finds it you will get this message:
15 8
16``` 9```c
17Waiting for new device:......................... 10void keyboard_post_init_user(void) {
18Listening: 11 // Customise these values to desired behaviour
12 debug_enable=true;
13 debug_matrix=true;
14 //debug_keyboard=true;
15 //debug_mouse=true;
16}
19``` 17```
20 18
21If you can't get this 'Listening:' message try building with `CONSOLE_ENABLE=yes` in [Makefile] 19## Debugging Tools
22 20
23You may need privilege to access the device on OS like Linux. 21There are two different tools you can use to debug your keyboard.
24- try `sudo hid_listen`
25 22
26## Can't Get Message on Console 23### Debugging With QMK Toolbox
27Check:
28- *hid_listen* finds your device. See above.
29- Enable debug with pressing **Magic**+d. See [Magic Commands](https://github.com/tmk/tmk_keyboard#magic-commands).
30- set `debug_enable=true`. See [Testing and Debugging](newbs_testing_debugging.md#debugging)
31- try using 'print' function instead of debug print. See **common/print.h**.
32- disconnect other devices with console function. See [Issue #97](https://github.com/tmk/tmk_keyboard/issues/97).
33 24
34*** 25For compatible platforms, [QMK Toolbox](https://github.com/qmk/qmk_toolbox) can be used to display debug messages from your keyboard.
35 26
36# Miscellaneous 27### Debugging With hid_listen
37## Safety Considerations
38 28
39You probably don't want to "brick" your keyboard, making it impossible 29Prefer a terminal based solution? [hid_listen](https://www.pjrc.com/teensy/hid_listen.html), provided by PJRC, can also be used to display debug messages. Prebuilt binaries for Windows,Linux,and MacOS are available.
40to rewrite firmware onto it. Here are some of the parameters to show
41what things are (and likely aren't) too risky.
42 30
43- If your keyboard map does not include RESET, then, to get into DFU 31## Sending Your Own Debug Messages
44 mode, you will need to press the reset button on the PCB, which
45 requires unscrewing the bottom.
46- Messing with tmk_core / common files might make the keyboard
47 inoperable
48- Too large a .hex file is trouble; `make dfu` will erase the block,
49 test the size (oops, wrong order!), which errors out, failing to
50 flash the keyboard, leaving it in DFU mode.
51 - To this end, note that the maximum .hex file size on Planck is
52 7000h (28672 decimal)
53 32
54``` 33Sometimes it's useful to print debug messages from within your [custom code](custom_quantum_functions.md). Doing so is pretty simple. Start by including `print.h` at the top of your file:
55Linking: .build/planck_rev4_cbbrowne.elf [OK]
56Creating load file for Flash: .build/planck_rev4_cbbrowne.hex [OK]
57 34
58Size after: 35```c
59 text data bss dec hex filename 36#include "print.h"
60 0 22396 0 22396 577c planck_rev4_cbbrowne.hex
61``` 37```
62 38
63 - The above file is of size 22396/577ch, which is less than 39After that you can use a few different print functions:
64 28672/7000h
65 - As long as you have a suitable alternative .hex file around, you
66 can retry, loading that one
67 - Some of the options you might specify in your keyboard's Makefile
68 consume extra memory; watch out for BOOTMAGIC_ENABLE,
69 MOUSEKEY_ENABLE, EXTRAKEY_ENABLE, CONSOLE_ENABLE, API_SYSEX_ENABLE
70- DFU tools do /not/ allow you to write into the bootloader (unless
71 you throw in extra fruit salad of options), so there is little risk
72 there.
73- EEPROM has around a 100000 write cycle. You shouldn't rewrite the
74 firmware repeatedly and continually; that'll burn the EEPROM
75 eventually.
76 40
77## NKRO Doesn't work 41* `print("string")`: Print a simple string.
78First you have to compile firmware with this build option `NKRO_ENABLE` in **Makefile**. 42* `uprintf("%s string", var)`: Print a formatted string
43* `dprint("string")` Print a simple string, but only when debug mode is enabled
44* `dprintf("%s string", var)`: Print a formatted string, but only when debug mode is enabled
79 45
80Try `Magic` **N** command(`LShift+RShift+N` by default) when **NKRO** still doesn't work. You can use this command to toggle between **NKRO** and **6KRO** mode temporarily. In some situations **NKRO** doesn't work you need to switch to **6KRO** mode, in particular when you are in BIOS. 46## Debug Examples
81 47
82If your firmware built with `BOOTMAGIC_ENABLE` you need to turn its switch on by `BootMagic` **N** command(`Space+N` by default). This setting is stored in EEPROM and kept over power cycles. 48Below is a collection of real world debugging examples. For additional information, refer to [Debugging/Troubleshooting QMK](faq_debug.md).
83 49
84https://github.com/tmk/tmk_keyboard#boot-magic-configuration---virtual-dip-switch 50### Which matrix position is this keypress?
85 51
52When porting, or when attempting to diagnose pcb issues, it can be useful to know if a keypress is scanned correctly. To enable logging for this scenario, add the following code to your keymaps `keymap.c`
86 53
87## TrackPoint Needs Reset Circuit (PS/2 Mouse Support) 54```c
88Without reset circuit you will have inconsistent result due to improper initialize of the hardware. See circuit schematic of TPM754. 55bool process_record_user(uint16_t keycode, keyrecord_t *record) {
56 // If console is enabled, it will print the matrix position and status of each key pressed
57#ifdef CONSOLE_ENABLE
58 uprintf("KL: kc: 0x%04X, col: %u, row: %u, pressed: %b, time: %u, interrupt: %b, count: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, record->event.time, record->tap.interrupted, record->tap.count);
59#endif
60 return true;
61}
62```
89 63
90- http://geekhack.org/index.php?topic=50176.msg1127447#msg1127447 64Example output
91- http://www.mikrocontroller.net/attachment/52583/tpm754.pdf 65```text
66Waiting for device:.......
67Listening:
68KL: kc: 169, col: 0, row: 0, pressed: 1
69KL: kc: 169, col: 0, row: 0, pressed: 0
70KL: kc: 174, col: 1, row: 0, pressed: 1
71KL: kc: 174, col: 1, row: 0, pressed: 0
72KL: kc: 172, col: 2, row: 0, pressed: 1
73KL: kc: 172, col: 2, row: 0, pressed: 0
74```
92 75
76### How long did it take to scan for a keypress?
93 77
94## Can't Read Column of Matrix Beyond 16 78When testing performance issues, it can be useful to know the frequency at which the switch matrix is being scanned. To enable logging for this scenario, add the following code to your keymaps `config.h`
95Use `1UL<<16` instead of `1<<16` in `read_cols()` in [matrix.h] when your columns goes beyond 16.
96 79
97In C `1` means one of [int] type which is [16 bit] in case of AVR so you can't shift left more than 15. You will get unexpected zero when you say `1<<16`. You have to use [unsigned long] type with `1UL`. 80```c
81#define DEBUG_MATRIX_SCAN_RATE
82```
98 83
99http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279 84Example output
85```text
86 > matrix scan frequency: 315
87 > matrix scan frequency: 313
88 > matrix scan frequency: 316
89 > matrix scan frequency: 316
90 > matrix scan frequency: 316
91 > matrix scan frequency: 316
92```
100 93
101## Special Extra Key Doesn't Work (System, Audio Control Keys) 94## `hid_listen` Can't Recognize Device
102You need to define `EXTRAKEY_ENABLE` in `rules.mk` to use them in QMK. 95When debug console of your device is not ready you will see like this:
103 96
104``` 97```
105EXTRAKEY_ENABLE = yes # Audio control and System control 98Waiting for device:.........
106``` 99```
107 100
108## Wakeup from Sleep Doesn't Work 101once the device is plugged in then *hid_listen* finds it you will get this message:
109
110In Windows check `Allow this device to wake the computer` setting in Power **Management property** tab of **Device Manager**. Also check BIOS setting.
111
112Pressing any key during sleep should wake host.
113
114## Using Arduino?
115
116**Note that Arduino pin naming is different from actual chip.** For example, Arduino pin `D0` is not `PD0`. Check circuit with its schematics yourself.
117
118- http://arduino.cc/en/uploads/Main/arduino-leonardo-schematic_3b.pdf
119- http://arduino.cc/en/uploads/Main/arduino-micro-schematic.pdf
120
121Arduino Leonardo and micro have **ATMega32U4** and can be used for TMK, though Arduino bootloader may be a problem.
122
123## Enabling JTAG
124
125By default, the JTAG debugging interface is disabled as soon as the keyboard starts up. JTAG-capable MCUs come from the factory with the `JTAGEN` fuse set, and it takes over certain pins of the MCU that the board may be using for the switch matrix, LEDs, etc.
126
127If you would like to keep JTAG enabled, just add the following to your `config.h`:
128 102
129```c 103```
130#define NO_JTAG_DISABLE 104Waiting for new device:.........................
105Listening:
131``` 106```
132 107
133## USB 3 Compatibility 108If you can't get this 'Listening:' message try building with `CONSOLE_ENABLE=yes` in [Makefile]
134I heard some people have a problem with USB 3 port, try USB 2 port.
135
136
137## Mac Compatibility
138### OS X 10.11 and Hub
139https://geekhack.org/index.php?topic=14290.msg1884034#msg1884034
140
141
142## Problem on BIOS (UEFI)/Resume (Sleep & Wake)/Power Cycles
143Some people reported their keyboard stops working on BIOS and/or after resume(power cycles).
144 109
145As of now root of its cause is not clear but some build options seem to be related. In Makefile try to disable those options like `CONSOLE_ENABLE`, `NKRO_ENABLE`, `SLEEP_LED_ENABLE` and/or others. 110You may need privilege to access the device on OS like Linux.
111- try `sudo hid_listen`
146 112
147https://github.com/tmk/tmk_keyboard/issues/266 113## Can't Get Message on Console
148https://geekhack.org/index.php?topic=41989.msg1967778#msg1967778 114Check:
115- *hid_listen* finds your device. See above.
116- Enable debug with pressing **Magic**+d. See [Magic Commands](https://github.com/tmk/tmk_keyboard#magic-commands).
117- set `debug_enable=true`. See [Debugging](#debugging)
118- try using 'print' function instead of debug print. See **common/print.h**.
119- disconnect other devices with console function. See [Issue #97](https://github.com/tmk/tmk_keyboard/issues/97).