gpt4 book ai didi

c - dfu-programmer 声称已完成,但芯片上没有变化

转载 作者:行者123 更新时间:2023-11-30 16:51:25 28 4
gpt4 key购买 nike

摘要

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

更多详细信息

其基本存储库是 AMJ40我的版本是 here .

我可以制作新的.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 程序员没有作为题外话关闭,所以他们给了我勇气。

最佳答案

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

The keymap is in EEPROM so it persists over reboots. ... Also the QMK firmware has a erase EEPROM hex you can use to wipe it.

这就是答案。命令dfu-programmer atmega32u4删除不会删除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

future 的事情

  1. 我已将该行放入 tmk_core_custom 子模块中。理想情况下,我会找到一种方法让它存在于我的存储库中。
  2. 鉴于这些芯片的写入次数有限,最好先检查一下是否需要闪存 eeprom。

我完全愿意提出建议来使这个答案变得更好!

关于c - dfu-programmer 声称已完成,但芯片上没有变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41788455/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com