- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为基于此 code 的自定义 Atmega2560 开发板破解 stk500v2 引导加载程序, 所以它使用 UART2
而不是 UART0
它增加了启动超时而不是直接进入应用程序代码。请参阅下文了解我在板上所做的详细更改和设置。
我的问题是,当我进行引脚复位或 WDT 复位时,MCU 不会运行引导加载程序,而只会在进行掉电复位(插入/拔出)或上电复位(闪烁后首次启动时)时运行固件)。我试着寻找关于内管主题的文档,我已经阅读了 Atmega2560 的数据表(虽然它很长而且我可能错过了相关部分),但我没有找到解决该问题的相关内容。
我想,我在我的代码和/或设置中做错了什么,但我不知道是什么。
所以基本上,我更新了代码以添加预处理器条件 (_USE_UART2_
),在 line 315 block 中启用以下功能:
[...]
#elif defined(_M2560_UART2_)
#define UART_BAUD_RATE_LOW UBRR2L
#define UART_STATUS_REG UCSR2A
#define UART_CONTROL_REG UCSR2B
#define UART_ENABLE_TRANSMITTER TXEN2
#define UART_ENABLE_RECEIVER RXEN2
#define UART_TRANSMIT_COMPLETE TXC2
#define UART_RECEIVE_COMPLETE RXC2
#define UART_DATA_REG UDR2
#define UART_DOUBLE_SPEED U2X2
[...]
并且还在 line 155 附近对引脚进行了另一次更改:
[...]
#elif defined(_M2560_UART2_)
#define PROGLED_PORT PORTJ
#define PROGLED_DDR DDRJ
#define PROGLED_PIN PINJ0
[...]
我还在努力根据它是欠压复位还是 WDT/引脚复位来更改启动超时值(我的目标是让引导加载程序在 WDT/引脚复位时等待更长时间)。所以我在 line 545 做了以下更改:
unsigned long long boot_timeout = 1200000;
在line 560 :
WDTCSR = 0;
__asm__ __volatile__ ("sei");
// check if WDT generated the reset, if so, go straight to app
#ifndef SOFTWARE_RESET
if (mcuStatusReg & _BV(WDRF))
{
app_start();
}
#else
// if WDT generated the reset, increase the boot timeout time
if (mcuStatusReg & _BV(WDRF))
boot_timeout = 3500000; // 7 seconds
#endif
最后,我设置 fuse 如下:
BOOTRST
设置为 0
(启用)BOOTSZ
设置为 00
(4096 字引导加载程序部分)WDTON
设置为 1
(禁用)BODLEVEL
设置为 101
(VBOTmin=2.5V
,但我认为 100
更有意义,尽管 Vcc
是受监管的并且除了电源故障外永远不会改变)感谢您阅读所有内容,如果您能回答就更感谢您!
最佳答案
虽然看起来很愚蠢,但直到那时我还不清楚的是,分别刷新引导加载程序和固件是行不通的。需要做的是使用srec_cat
工具加入bootloader和固件,并上传加入的固件。
srec_cat firmware.hex -Intel bootloader.hex -Intel -o combined-bootloader.hex -I
The Bootloader FAQ 的第 3-4 页以某种方式描述了它
关于arduino - STK500v2 引导加载程序仅在上电复位时加载,而不是在引脚/WDT 复位时加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19518045/
我是一名优秀的程序员,十分优秀!