基于CAN总线的UDS诊断bootloader升级MCU工具

控制/MCU

1823人已加入

描述

功能扩展

1、升级包可以做些加密功能。

2、结合pcan-view,扩展实现CAN报文分析工具。

3、其实有一个很重要的功能就是TrustZone,实现权限访问功能,对每个功能服务进行分离和加密。

CAN收发器

开发经验

在开发过程,遇到一些坑,分享给大家,防止掉坑里。

1、之前在rasc添加的组件不能删除。

下面在rasc添加ThreadX,不只是RTOS,其他组件也出现这种情况。

CAN收发器

当去掉组件不使用,重新配置。但是组件还是显示在软件包,导致编译

CAN收发器

解决方式:经过自己琢磨发现,找到工程下buildinfo.gpdsc文件,删除残余的组件。

CAN收发器

会有提示,点击确认就行,残余的组件就没有,可以顺利编译。

CAN收发器

但是治不了根,当你重新再配置,还会出现前面的情况,需要做同样的操作,找到工程下buildinfo.gpdsc文件,删除残余的组件。可能需要做其他的配置。还有可以一种情况,在components下取消组件,在stacks还存在,比如TreadX,还在stacks中,直接Remove掉。

CAN收发器

2、SD卡,FAT32文件系统的开发。

当把较多变量和数组放在局部函数会导致,错误中断

CAN收发器

代码例子

 

 

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尝试改堆空间,也没什么作用。

CAN收发器

把这部分变量放到全局,就能成功运行。

 

 

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收发器

开发板的CAN收发器CANH和CANL丝印是反的,花了一些时间才发现。

SDK建议使用比较新的版本包括Keil5用比较新的,不然很可能出现些奇怪的问题。

编辑:黄飞

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分