基于RTT对STM32L476进行OTA(中)

173 阅读3分钟

之前L431一直卡在bootloader那里的问题原因是因为硬件上用了ISP自动下载电路,如下图,实际rtthread不需要这部分电路,使用Ymodem协议下载程序,而且串口还会对boot0造成干扰,导致每次软复位单片机都重启不了,必须断电才行,而供电又是用的USB,所以出现了一直无法打印bootloader上电打印的提示,因为插上USB后再打开USB串口,可能已经打印完了,或者打开串口瞬间给了boot0一个异常电平,导致单片机进入自带的IAP模式

把R13去掉,烧录生成的boot.bin可以正常打印了,如下图

 

一些配置(用RT studio,也可以用ENV工具):

 

项目文件fal_cfg.h改之前

改之后(片内flash   bootloader:128K   APP:64K   download:64K)

 

必须新建一个文件夹放fal_cfg.h等文件,直接添加··\samples\porting路径到IDE里面不管用,如下图,原路径文件名还是打叉,新建ports文件夹,再添加路径就可以

点击工程文件选属性,如下图

修改固件的链接地址 keil文件是link.sct  rtthread studio是link.lds  如下图

然后在主函数下添加:

/**
* Function    ota_app_vtor_reconfig
* Description Set Vector Table base location to the start addr of app(RT_APP_PART_ADDR).
*/
#define RT_APP_PART_ADDR 0x8020000
static int ota_app_vtor_reconfig(void)
{
#define NVIC_VTOR_MASK   0x3FFFFF80
/* Set the Vector Table base location by user application firmware definition */
SCB->VTOR = RT_APP_PART_ADDR & NVIC_VTOR_MASK;

    return 0;
}
INIT_BOARD_EXPORT(ota_app_vtor_reconfig);

最后是这样的

ota的时候文件太大,要压缩

还不行,boot.bin大概30多k,就把boot区改为64k

修改#define FAL_PART_TABLE                                                               \
{                                                                                    \
{FAL_PART_MAGIC_WORD,        "bl",     "onchip_flash",         0,   64*1024, 0}, \
{FAL_PART_MAGIC_WORD,       "app",     "onchip_flash",   64*1024,  64*1024, 0}, \
{FAL_PART_MAGIC_WORD,  "download", "onchip_flash", 128*1024, 128*1024, 0}, \
}

其中"onchip_flash" 位于drv_flash_l4.c中

const struct fal_flash_dev stm32_onchip_flash = { "onchip_flash", STM32_FLASH_START_ADRESS, STM32_FLASH_SIZE, FLASH_PAGE_SIZE, {NULL, fal_flash_read, fal_flash_write, fal_flash_erase} };

 

出现下图错误:download空间不够大

出现下图错误:78k(压缩后)小于download的128k,但是大于app的64k

因为APP程序有100多K,所以重新分配了一下flash,boot区:48K ,APP区:128K,download区(使用了压缩,压缩后可以到70K,如果不压缩,80K放不下):80K       最终YMODEM方式进行OTA效果:

发现了一个坑,明明修改了app的起始烧录地址,但是有时候还是会随机下载到flash的boot区(如下图):

采用的解决方法下载boot.bin后,仿真app程序可以

相关问题参考  这个问答结贴原因是中断向量表没有修改 但是我已经修改中断向量表了(上面记述有)还有会偶尔出现烧录区域错误的情况,目前失败后还是用仿真代替下载

再或者用工具指定下载地址的方法进行下载,如下图:

修改中断向量表导致启动失败问题  中间也出现过类似程序跑飞的现象,但是后来把烧录区域错误问题解决后就没出现了,这个题主还出现了,OTA升级后要重启的情况,这个就没碰见过了。大胆设想,那个题主会不会是本文第一段话的问题

 

创作打卡挑战赛

赢取流量/现金/CSDN周边激励大奖