我正在尝试将新固件刷新到AMJ40机械键盘。我可以'成功'闪烁十六进制,但键盘会通过恢复默认行为来响应。
我可以make
新的.hex文件,所有内容似乎都是有序的,但是当我使用键盘时它只是默认行为。
我只是假设某些东西在我的代码中不起作用,但是当我按下重置按钮时键盘停止工作,并且在make过程发出重置命令后它再次起作用 - 只是使用旧的布局。
以下是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程序员没有被关闭作为主题,所以他们鼓舞了我。
答案 0 :(得分:0)
键盘映射在EEPROM中,因此它会在重新启动后持续存在。 ...此外,QMK固件还有一个擦除EEPROM十六进制,可用于擦除它。
这就是答案。命令dfu-programmer atmega32u4 erase
不会擦除eeprom。要做到这一点,你需要用其他东西覆盖它。在这种情况下,其他内容是来自QMK quantum tools的.hex文件。
稍微调整一下,文档说它应该是:
dfu-programmer atmega32u4 flash-eeprom eeprom_reset.hex
但在我的dfu程序员版本中,它需要
dfu-programmer atmega32u4 flash --eeprom eeprom_reset.hex
我将此添加到我的make
进程中。我将上面提到的hex文件复制到我的repo中,然后更改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
子模块中。理想情况下,我会找到一种方式让它住在我的回购中。我完全有建议让这个答案更好!