我正在为定制板上的Cortex-M4 MCU(ATSAME51N20A)编写一个串行引导程序。我目前正在通过SWD使用Jlink进行闪烁/调试
当前架构:我有一个python脚本,它读取二进制文件,将其分解为512字节的块,通过UART发送到MCU,最后对整个过程执行CRC32,并检查以确保接收端的CRC匹配。这一切工作正常,发送数据,两端的CRC匹配
传入的二进制文件正在保存到地址#define APPLICATION_START_ADDRESS 0x8000
。引导加载程序收到最后一个块后,将调用以下代码:
void jumpToApplication(void)
{
uint32_t applicationMainStackPointer = *(volatile uint32_t *) (APPLICATION_START_ADDRESS);
__set_MSP(applicationMainStackPointer);
void (*applicationResetHandler)(void);
uint32_t applicationResetHandlerAddress = *(volatile uint32_t *) (APPLICATION_START_ADDRESS + 4);
applicationResetHandler = (void *) applicationResetHandlerAddress;
applicationResetHandler();
}
问题:应用程序在引导加载程序之后没有运行。我应该看到一些Hello, World!
的弹出窗口,但什么都没有发生
我认为在连接了JLink的情况下跳转到应用程序可能会导致问题,所以我尝试在没有连接JLink的情况下运行所有程序,但仍然无法运行
我的问题:
这里可能出了什么问题?要继续调试此问题,我可以研究什么
我已经测试了通过JLink闪烁发送的二进制文件,但是我实际闪烁的文件是一个.elf
文件。据我所知,.bin
文件应该也能正常工作,但也许这就是我出错的地方
在Python中,我对二进制文件进行如下格式化:
data = [x for x in open(path, 'rb').read()]
blocks = [data[i:i + PAGE_SIZE] for i in range(0, len(data), PAGE_SIZE)]
这会破坏二进制文件吗
任何调试提示/建议/见解都将不胜感激
目前没有回答
相关问题 更多 >
编程相关推荐