今日跟大家分享参加野火【瑞萨RA MCU创意氛围赛】选手的项目——基于CAN总线的UDS诊断bootloader升级MCU工具。
前篇回顾:【瑞萨RA MCU创意氛围赛作品赏析】项目2——基于can总线的UDS诊断bootloader升级MCU工具(上)
1、升级包可以做些加密功能。
2、结合pcan-view,扩展实现CAN报文分析工具。
3、其实有一个很重要的功能就是TrustZone,实现权限访问功能,对每个功能服务进行分离和加密。
在开发过程,遇到一些坑,分享给大家,防止掉坑里。
1、之前在rasc添加的组件不能删除。
下面在rasc添加ThreadX,不只是RTOS,其他组件也出现这种情况。
当去掉组件不使用,重新配置。但是组件还是显示在软件包,导致编译
解决方式:经过自己琢磨发现,找到工程下buildinfo.gpdsc文件,删除残余的组件。
会有提示,点击确认就行,残余的组件就没有,可以顺利编译。
但是治不了根,当你重新再配置,还会出现前面的情况,需要做同样的操作,找到工程下buildinfo.gpdsc文件,删除残余的组件。可能需要做其他的配置。还有可以一种情况,在components下取消组件,在stacks还存在,比如TreadX,还在stacks中,直接Remove掉。
2、SD卡,FAT32文件系统的开发。
当把较多变量和数组放在局部函数会导致,错误中断
代码例子
//有坑int transfer_data_cm36(FIL* f_update)
{
UINT update_fnum = 1; /* 文件成功读写数量 */
BYTE update_ReadBuffer[64]={0}; /* 读缓冲区 */
u16 index;
u8 send_transfer_flag = 0;
FRESULT update_res_sd = FR_OK;
uint16_t exit_crc = 0xFFFF;
if(update_fnum < 1)
{}
}
像这样,运行直接Default_Handler尝试改堆空间,也没什么作用。
把这部分变量放到全局,就能成功运行。
static UINT update_fnum = 1; /* 文件成功读写数量 */
static BYTE update_ReadBuffer[64]={0}; /* 读缓冲区 */
static u16 index;static u8 send_transfer_flag = 0;
static FRESULT update_res_sd = FR_OK;
static uint16_t exit_crc = 0xFFFF;
int transfer_data_cm36(FIL* f_update)
{
if(update_fnum < 1)
{}
}
3、CAN总线开发,忘记取消过滤CANID
开发板的CAN收发器CANH和CANL丝印是反的,花了一些时间才发现。
SDK建议使用比较新的版本包括Keil5用比较新的,不然很可能出现些奇怪的问题。
更多内容您可识别二维码或点击文末阅读原文访问查看:
参考资料
①参考文档
[野火EmbedFire]《瑞萨RA系列FSP库开发实战指南——基于野火启明开发板》—20230412
②ISO15765:
https://github.com/devcoons/iso15765-canbus
③Renesas软件包:
https://github.com/renesas/fsp/releases
④源代码参考下载:
https://www.firebbs.cn/forum.php?mod=viewthread&tid=35341&extra=page%3D1
更多内容,您可复制下方网址到浏览器中打开进入瑞萨中文论坛查看:
https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/
1
END
1
推荐阅读
开发活动 | 野火&电子发烧友【瑞萨RA MCU】创意氛围赛第一期已开放
【瑞萨RA MCU创意氛围赛作品赏析】项目1——Qt遥控小车
【瑞萨RA MCU创意氛围赛作品赏析】项目2——基于CAN总线的UDS诊断Bootloader升级MCU工具(上)