首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dfu-程序员声称完成了,但芯片上没有变化。

dfu-程序员声称完成了,但芯片上没有变化。
EN

Stack Overflow用户
提问于 2017-01-22 07:33:54
回答 1查看 516关注 0票数 0

摘要

我正试图在AMJ40的机械键盘上闪现新的固件。我可以闪现的十六进制‘成功’,但键盘的反应,恢复到它的默认行为。

更详细

它的基本回购是AMJ40,我的版本是这里

我可以make新的.hex文件,看起来一切正常,但是当我使用键盘时,它只会有它的默认行为。

我只是假设代码中有些东西不起作用,但当我按下重置按钮时,键盘就停止工作了,在make进程发送了一个重置命令之后,它又工作了--只是使用旧的布局。

这是make dfu的输出

代码语言:javascript
复制
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

我试图控制各种键组合,如建议在这里

我也尝试过手动清空芯片。这里是是清除内存后的内存内容吗?

如果手动重新创建make dfu命令,则会得到相同的行为,即:

代码语言:javascript
复制
dfu-programmer atmega32u4 erase
dfu-programmer atmega32u4 erase
dfu-programmer atmega32u4 flash layout.hex
dfu-programmer atmega32u4 start

我目前试图闪现的密钥映射如下所示:

代码语言:javascript
复制
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程序员还没有关闭作为一个主题,所以他们鼓舞了我。

EN

回答 1

Stack Overflow用户

发布于 2017-01-25 18:24:10

我向盖克和他们的用户发布了这个问题,奇怪建议:

密钥映射在EEPROM中,因此它在重新启动时仍然存在。..。此外,QMK固件有一个擦除EEPROM十六进制,您可以使用擦除它。

这就是答案。命令dfu-programmer atmega32u4 erase不擦除eeprom。要做到这一点,您需要用其他东西覆盖它。在本例中,其他内容是来自.hex的QMK量子工具文件。

这里有一个小小的改动,因为文档中说应该是:

代码语言:javascript
复制
dfu-programmer atmega32u4 flash-eeprom eeprom_reset.hex

但在我的dfu程序员版本中,它需要

代码语言:javascript
复制
dfu-programmer atmega32u4 flash --eeprom eeprom_reset.hex

我将其添加到我的make过程中。我将上面提到的十六进制文件复制到我的回购中,然后将tmk_core_custom/rules.mk更改为在dfu部分中有以下内容

代码语言:javascript
复制
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。

我完全在寻求建议,让这个答案更好!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41788455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档