基于CANoe的ECU Bootloader刷写软件

目标:

        车辆ECU需要更新软件,通过OBD口实现,通过CAN总线实现,编程语言是CAPL。

        刷写流程基于ISO15765-3;应用层基于UDS(ISO14229)诊断协议;TP层基于ISO15765-2;数据链路层和物理层基于ISO11898

实现:

       1.图形用户界面使用CANoe自带的panel来实现,用户可以选取刷写文件,ECU的地址等信息,这些信息通过环境变量被程序访问,环境变量在CANDB++中编辑生成。


2.软件架构:

刷写工具解析s19 app,如果没有s19 app,那么可以使用HexView将HEX,BIN等app转成s19文件

依据ISO15765-3编写刷写流程代码,将app数据扔给应用层

应用层是基于UDS编写的,应用层在将数据扔给TP层

TP层将数据扔给数据链路层

数据链路层将数据扔给物理层,数据通过CAN总线被ECU接收



代码:

      工作保密原因,只贴出UDS层的代码,秘钥也删了

includes{
  
}

variables{
  char gECU[7]="Tester";

  int     useExtendedId=0;                                      //use standard Id
  long    useFC=1;                                             //use flow control
  long    bs=8;                                                //block size of FC
  long    stmin=20;                                            //set STmin to 10 ms

  dword   tester_address=0x7c1;                               //tester address
  dword   target_ecu_address=0x7c9;                           //BCM address
  char    wait_rsp_text_event[18]="response received";        //used to wait for response

  const int BUFFER_SIZE_2048=0x2048;
  const int BUFFER_SIZE_1024=0x1024;
  const int LENGTH_4=4;
  byte      rxBuffer[BUFFER_SIZE_2048];                          //receive buffer
  long      rxBufferLen=0;                                       //receive buffer length
  dword     timeout=5000;
  dword     min_request_distance=50;                            //minum distance between two request
  dword     dist_request = 10;
  char      gDebugBuffer[255];
}

/*
  read fault memory
*/
int read_fault_memory(byte _sub_func,byte _status_mask){
  byte request[3]={0x19,0x02,0x09};
  
  rxBufferLen=0;
  request[1]=_sub_func;request[2]=_status_mask;
  OSEKTL_DataReq(request,elcount(request)
  • 33
    点赞
  • 190
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值