基于RH850_F1K1581MCU OTA升级Bootloader异常的问题

本文分享了一个OTA升级项目的实战经验,详细记录了在RH850-R7F701581芯片上实现Bootloader和APP程序升级的过程,包括解决跳转失败、USART通讯异常等多个难题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:这个OTA升级项目卡了萌新一个多月,经过无数个熬夜加班和大佬们的耐心指点,现终于有了一点眉目,故创作此文,希望对同样卡在OTA上的小伙伴有一点帮助。
    先介绍一下我所使用的MCU和环境吧,芯片型号是RH850 - R7F701581,和前文所用的1587相差无几,环境是新版本IAR 2.10.1
    程序分为Bootloader和APP两部分,分别放置在0地址上和8000地址上,正常启动程序由BootLoader跳转到APP,并在APP中正常运行,当上位机通过UART给MCU发送升级指令时,APP程序进入升级部分,赋值SHMEM表示从APP跳转过来,跳转到0地址时检测SHMEM值开始升级,升级完成后重新跳转回APP并正常运行。
    这个流程并不复杂,但在实操中却碰到了层层阻碍,使项目进展非常不顺。最开始在我完成BootLoader和APP程序的upgrade模块时,用上位机发送握手信号MCU不能正常回复,现象感觉像重置复位向量失败,让跳转变成了8000->8000,通过示波器和逻辑分析仪发现板子在不停重启(由于程序分为两部分调试中无法使用仿真器调试,只能通过波形判断),然后我发现可能是FCL库不匹配,去瑞萨官网下载了最新的FCL库,保留了工程的fcl.c和fcl.h文件进行移植,完成后程序就开始变得匪夷所思了,出现各种奇怪现象。
    第一个出现的问题是APP跳转进入BootLoader升级不能成功跳过去,还是8000跳8000现象,这个问题也是从头到尾一直困扰着我的问题,软件重置复位向量地址失败,保留了上电跳转8000的值,引起出现8000跳转8000现象,后面我舍弃了软件原有的跳转程序,重新写了新的替代,问题才有所改观。

    21368600ce6b426fa353d50b733dc765.png
    第二个碰到的问题是跳转过去无法成功保存SHMEM值,不能进入升级分支;这个问题其实到目前为止我也没有搞清楚问题到底在什么地方,SHEMEM值正常进入升级会写入RAM中,测试过擦写flash功能全部正常,后面我把SHMEM值保存在FLASH中,发现居然成功写入但还是无法正常保存,后面发现原来是icf文件配置有问题,SHMEM概率写入,修改后icf文件添加SHMEM定义,工程之间跳转SHMEM才可以成功保存。
    第三个碰到的问题是成功跳转进入BootLoader升级程序后Usart不通(Usart测试无异常),不能正常回复上位机发送的握手信号,后面我舍弃了程序Usart的库函数的层层包装调用,直接用最直接的写寄存器方式才可以正常回复。
    第四个碰到的问题是跳转成功并SHMEM值成功保存了进入升级,但PowerShell上升级完后却提示Read Usart error!把memory读出来发现并没有成功写进去,有时候又是正常的,概率性出现这个问题,后面通过反复检测FCL库,发现还是FCL库的问题,先把cstartup.s文件添加进工程,然后我把整个fcl库针对1581片子进行修改,做了适用的FCL库才成功解决了此问题。   

突破层层阻碍问题反复出现,最终现在upgrade成功完成。FCL库才成功解决了此问题。

 1536cccdeb274dcaac2c9448a43e739b.png

 

 

 

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vx cr_8118

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值