目前我们是使用两款MCU,CH32V307RTC6 和 CH32V203C8T6。
都在研究如何实现远程升级,刚开始开发,还没有完全弄明白。
计划是如此:
CH32V307RTC6 - 通过网络下载
CH32V203C8T6 - 通过串口下载
思路:1)先把生成的bin文件,在User系统下分块下载放至储存区(user2),每块CRC检验
2)然后写入升级标识,通过
//soft - 0x00 run t0 BootLoader
NVIC_SystemReset();
3)在boot状态把 储存区的 user2 复制至 运行区(User1)
4)通过下面的代码跳至 User1 区启动
// 进 机器模式 跳转到 0x5000;
NVIC_EnableIRQ(Software_IRQn);
NVIC_SetPendingIRQ(Software_IRQn);
有3点疑问:
IPA的LD文件的设置如此的:
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 20K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
}
USER的LD文件的设置如此的:
MEMORY
{
FLASH (rx) : ORIGIN = 0x00005000, LENGTH = 44K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
}
但在DEMO文件内,描述写入地址分别是
/*@Note
*bootloader:0x08000000 - 0x08005000 20K
*UserCode: 0x08005000 - 0x08010000 44K
*
*/
----------------------------------
疑问1:USER的起始位置: LD文件的是写 0x00050000,但DEMO代码是0x08005000,两者为什么不一样的?
疑问2:除LD的文件配置写入位置偏移外,还有哪些地方配置才能区分 IAP 和 user 的两个启动入口?
就是它怎么知道?
通过 NVIC_SystemReset() 是进入 boot 区
通过 NVIC_EnableIRQ 和 NVIC_SetPendingIRQ 就是进入user 区。
DEMO说的注释【进 机器模式 跳转到 0x5000】,除了LD设备外,哪个还要修改?
疑问3:通过MounRiver生成的BIN文件,可以直接下载后,直接写入user区,然后启动吗? 中间需要做什么转换不?