news 2026/8/6 18:07:36

rh850 can uds刷写 boot +OTA 1. 基于can 通讯 的bootloader

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
rh850 can uds刷写 boot +OTA 1. 基于can 通讯 的bootloader

rh850 can uds刷写 boot +OTA 1. 基于can 通讯 的bootloader,芯片用的是rh850u2a16 2. 配套capl上位机 3. uds服务刷写 4. flash driver 可选择在ram中运行 5. 支持single map/ double map ota/single map GCFU ota三种模式下的刷写,支持单/双map 两种模式下的Bank切换,方便拓展icum安全固件 6. boot 与app 互访对方数据,使用标准nvm存储栈 7. app有效标记检查,app程序跳转, app刷写请求检测 8. autosar 标准架构,提供mcal, bsw 通讯栈,存储栈等配置工程 9. 附加串口控制台程序,提供log 打印,调试触发等功能 10. 量产级代码,而非Demo 11. ghs编译

RH850刷写器开发踩坑三年,最想吐槽的就是各家OEM五花八门的OTA需求。这次基于U2A16搞的Bootloader总算把单双map、GCFU这些模式全打通了,直接上干货聊聊实现细节。

先看CAN通讯层,CAPL脚本里最关键的是这个事件处理:

on diagRequest ECU_Program.SessionControl { if(this.Service == 0x10) //会话控制 { byteArray buf = {0x50,0x03,0x00,0x32,0x01,0xF4}; diagSendResponse(ECU_Program, buf); } }

这里硬核处理了0x10会话控制服务,响应里藏着安全种子和定时参数。实际项目遇到过某德系车厂要求500ms内完成种子交换,直接把定时参数从0xF4改成0x64才过关。

Flash驱动跑在RAM里这事,得这么玩内存搬运:

#pragma section ".flsdrv" const uint8_t flash_driver_code[] = {0x12,0x34,0x56,0x78,...}; //驱动二进制 #pragma section void copy_to_ram() { volatile uint32_t *ram_addr = 0xFEDC0000; memcpy(ram_addr, flash_driver_code, sizeof(flash_driver_code)); ((void(*)(void))ram_addr)(); //函数指针跳转 }

注意RH850的内存保护机制,得在工程里配置好MPC模块的寄存器,否则一跑就进TRAP。上次调试时忘了开MPU写权限,愣是卡了三天才发现。

双map切换最刺激的部分在bank切换逻辑:

void switch_bank() { NvM_WriteBlock(NVM_BANK_CONFIG, &target_bank); while(NvM_GetErrorStatus() != NVM_REQ_OK); //等写入完成 __asm("syncm"); //内存同步指令 reset_mcu(); //必须冷重启 }

这里有个坑——某些厂商的NVM驱动没做好原子操作,切换时突然断电会导致bank配置错乱。我们的方案是写双份配置镜像+CRC校验,量产装车至今零投诉。

Boot和App数据互传的核心是共享内存区:

#pragma address _SHARED_DATA_ = 0x007F8000 //固定地址 struct { uint32_t app_signature; uint8_t vin[17]; uint32_t crc32; } shared_data;

Autosar配置里得把NvM Block的RAM Mirror地址指向这个区域,两边工程里都要声明同样的结构体。实测发现GHS编译器有结构体对齐问题,必须加#pragma pack(1)才能保证兼容。

最后看编译配置的骚操作:

OPTIMIZE -Os -ipa --cross_call MEMORY_PROTECTION --mpu=rh850u2a.ptn

GHS的--cross_call选项能优化跨模块调用,配合MPU配置实现运行时保护。曾经有个bug是app里误擦boot区,加上MPU后直接硬件拦截,省了80%的调试时间。

这套方案现在支持半小时内刷完2MB程序文件,OTA失败率控制在万分之三以内。量产代码最关键是异常处理要全——比如刷写中途拔线、电压突变这些场景,我们甚至模拟了CAN线被剪断的极端情况测试恢复流程。下次有空再聊聊怎么用CAPL实现自动化冒烟测试...

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/5 22:23:33

金属锯床采用台达PLC与威纶通触摸屏,程序成熟稳定并带有注释

金属锯床采用台达PLC和威纶通触摸屏,带有注释。 程序成熟稳定。最近在调试一台老款金属锯床时发现这套设备挺有意思——台达DVP系列PLC配威纶通MT8071iE触摸屏的组合,运行五年多居然连个死机记录都没有。这种工控组合现在看可能不算新潮,但胜…

作者头像 李华
网站建设 2026/8/6 3:45:17

Qwen-Image单图训练LoRA全解析

Qwen-Image单图训练LoRA全解析:基于MMDiT架构的高保真图像生成与精准控制 2025年,AIGC创作正从“通用生成”迈向“个性可控”的新阶段。阿里云发布的 Qwen-Image 模型,凭借其200亿参数的 MMDiT(Multimodal Diffusion Transformer&…

作者头像 李华
网站建设 2026/8/4 16:44:07

业务规则提取与验证方法指南

一、业务规则的定义与测试价值 业务规则是组织在特定领域内约束行为、定义逻辑的规范集合,通常以条件-结果语句(如“若用户积分≥1000,则自动升级为VIP”)形式存在。对测试人员而言,业务规则具有三重核心价值&#xf…

作者头像 李华
网站建设 2026/8/6 10:42:23

冒烟测试 vs 验收测试:从构建验证到业务交付的全链路质量保障

测试金字塔中的关键分层 在软件测试体系中,冒烟测试与验收测试作为不同阶段的验证手段,常被项目团队混淆或重叠使用。本文基于软件工程实践,结合敏捷测试模型,系统分析二者的本质区别与协作关系。通过明确分界,帮助测…

作者头像 李华
网站建设 2026/8/4 6:59:33

用例场景法在业务流程测试中的应用‌

在软件开发周期中,业务流程测试旨在验证系统从起点到终点的完整操作流程是否符合业务需求。用例场景法作为一种黑盒测试技术,通过构建真实用户场景来模拟端到端的业务操作,广泛应用于金融、电商、医疗等领域的系统测试中。它不仅提高了测试的…

作者头像 李华
网站建设 2026/8/6 8:50:39

Qwen3-8B显存不足?五招亲测解决

Qwen3-8B显存不足?五招亲测解决 你有没有过这样的经历:兴冲冲地拉下 Qwen3-8B 的镜像,满怀期待准备在自己的 RTX 3060 或 4090 上跑个本地 AI 助手,结果刚一启动——“CUDA out of memory”💥? 明明是号称“…

作者头像 李华