dfu-programmer声称已完成,但筹码没有变化

时间:2017-01-22 07:33:54

标签: c keyboard atmega

摘要

我正在尝试将新固件刷新到AMJ40机械键盘。我可以'成功'闪烁十六进制,但键盘会通过恢复默认行为来响应。

更多细节

此基础仓库为AMJ40,我的版本为here

我可以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程序员没有被关闭作为主题,所以他们鼓舞了我。

1 个答案:

答案 0 :(得分:0)

我已将此问题发布到Geekhack,他们的用户odd建议:

  

键盘映射在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

未来的事情

  1. 我已将该行放入tmk_core_custom子模块中。理想情况下,我会找到一种方式让它住在我的回购中。
  2. 鉴于这些芯片的写入次数有限,首先检查是否需要刷新eeprom可能会很好。
  3. 我完全有建议让这个答案更好!