摘要
我正在尝试将新固件刷新到AMJ40机械键盘。我可以“成功”闪烁十六进制,但键盘会通过恢复其默认行为来响应。
更多详情
这个的基本仓库是AMJ40,我的版本是here。
我可以make
新的.hex文件,而且似乎一切井井有条,但是当我使用键盘时,它只是具有默认行为。
我只是以为代码中没有任何内容,但是当我按下Reset按钮时,键盘停止工作,并且在make进程发送了reset命令之后,它又可以工作了—与旧版式一样。
这是make dfu
的输出
ben@um:~/projects/git/AMJ40/src$ make dfu
dfu-programmer atmega32u4 erase
dfu-programmer atmega32u4 erase
dfu-programmer atmega32u4 flash AMJ40_lufa.hex
Validating...
17124 bytes used (59.72%)
dfu-programmer atmega32u4 reset
我试图将各种组合键保持为suggested here。
我也手动尝试过emptying the chip。在这里are the contents of the memory after clearing it。
如果我手动重新执行
make dfu
命令,我将得到相同的行为,即:dfu-programmer atmega32u4 erase
dfu-programmer atmega32u4 erase
dfu-programmer atmega32u4 flash layout.hex
dfu-programmer atmega32u4 start
我目前正在尝试刷新的键盘映射如下所示:
KEYMAP(
D, O, H, E, R, T, Y, U, I, P, A, A,\
D, O, H, E, R, T, Y, J, K, L, A,\
D, O, H, E, R, T, Y, M, A, A, A,\
A, A, A, A, A, A, A, A),
KEYMAP(
F, R, U, S, T, R, A, T, E, P, A, A,\
D, O, H, E, R, T, Y, J, K, L, A,\
D, O, H, E, R, T, Y, M, A, A, A,\
A, A, A, A, A, B, B, B),
这个荒谬的键盘映射是要非常清楚它是否在工作。我希望第一行的第二个键在闪烁后会显示O,但它总是会打印Q(就像常规的QWERTY键盘一样)。
怀疑
我看过了,但是在构建过程中某处可能引用了一个文件,该文件覆盖了我的意图。
芯片上可能还存在一些神秘的角落,可将其恢复为以前的设置,但我不知道这种情况会如何发生。
免责声明
这个问题不一定是编程问题,但是还有其他一些dfu-programmer尚未关闭,所以他们让我感到胆大。
最佳答案
我将此问题发布给Geekhack及其用户odd建议:
键映射位于EEPROM中,因此它在重新启动后仍然存在。 ...此外,QMK固件具有擦除EEPROM十六进制,可用于擦除它。
那就是答案。命令dfu-programmer atmega32u4 erase
不会擦除eeprom。为此,您需要用其他东西覆盖它。在这种情况下,其他内容是QMK quantum tools中的.hex文件。
文档中有一个细微的调整,它应该是:
dfu-programmer atmega32u4 flash-eeprom eeprom_reset.hex
但是在我的dfu-programmer版本中
dfu-programmer atmega32u4 flash --eeprom eeprom_reset.hex
我将此添加到我的
make
进程中。我将上面提到的十六进制文件复制到我的仓库中,然后将tmk_core_custom/rules.mk
更改为dfu部分中的以下内容dfu: $(TARGET).hex
...
dfu-programmer $(MCU) erase
dfu-programmer $(MCU) flash-eeprom tools/eeprom_reset.hex # <-add this line
dfu-programmer $(MCU) erase
dfu-programmer $(MCU) flash $(TARGET).hex
dfu-programmer $(MCU) reset
这意味着我现在可以一步一步完成
make dfu
了。未来的事情
我已将该行放入
tmk_core_custom
子模块中。理想情况下,我会找到一种方法使其可以在我的仓库中使用。鉴于这些芯片的写入次数有限,因此最好先检查是否需要刷新eeprom。
我完全愿意提出建议,以使这个答案更好!
关于c - dfu-programmer声明已完成,但片上未更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41788455/