CCP协议移植与INCA通信流程

强烈建议看看这个视频

下载CCP源码

  • Vector官网应该有,是个exe文件,网址我找不到了,不行就在CSDN下载

阅读内部自带的两个关键文档

在这里插入图片描述

  • AN-IMC-1-001_Integration_of the_Vector_CCP_Driver_with_a_free_CAN_Driver.pdf 介绍了完整的移植过程

  • CCP21.pdf 介绍了2.1版本的CCP协议

CCP源码移植

  1. 首先将CCP三个文件移植到你的工程里,ccp.c/.h,ccppar.h
  2. 其次根据你所使用的单片机初始化CAN部分代码,设置好波特率,发送ID和接收ID,CCP_CRO_ID为接收ID,CCP_DTO_ID为发送ID
  3. 然后实现ccpGetPointer,ccpSend,disable_interrupt,enable_interrupt这四个函数
    • ccpGetPointer我是从官方文件里can_cpp.c抄的
    • ccpSend是要与你底层CAN发送结合起来,发送ID就是CCP_DTO_ID
    • 两个中断就是开启和关闭总中断,根据你单片机进行实现
  4. 实现CAN接收函数,一般是通过中断接收CAN数据,将从CCP_CRO_ID接收的八个字节数据传入ccpCommand函数
  5. 初始化要有你底层CAN初始化和ccpInit函数
  6. while里要有ccpCommand和ccpSendCallBack函数,判断数据发送完成后调取ccpSendCallBack函数,一定记得调callback,否则就会发送一次就无法发送了
  7. 做完这些你可以通过CAN test发connect命令进行测试,看看移植是否有问题
我遇到的问题
  1. 忘记调callback
  2. CRO和DTO的CAN ID弄反了

INCA联动

  • A2L文件一定不要着急,认真阅读慢慢修改,很多问题都是这里的问题
  • INCA联动需要两个文件,一个是A2L文件,另一个是HEX文件,其中hex文件可以由MDK生成,A2L文件则需要自己进行获取和修改。在使用INCA进行IAP的时候,其中有一点需要注意,A2L文件会根据你在其内部定义的地址对HEX文件进行裁剪,例如你在4000-5000处有数据,但A2L里没有对4000-5000地址定义,那么INCA就会抛弃这段数据,从5000处开始往后延申
  • 其中A2L文件我参考的以下大佬的博客:A2L文件解析
  • 其次A2L文件有个官方文档,ASAP2文件,也需要参考这个文档进行查看
  • 在这里插入图片描述
  • 其中标定量是存储在FLASH中,运行在RAM里,需要在RAM和ROM里规定一块相同大小的区域,我用的是KEIL,如何将变量规定到指定的存储区域和运行区域,需要修改SCT分散加载文件
  • 将标定量观测量添加到文件A2L末尾后,A2L文件里波特率,DTO和CRO的ID,FLASH地址,RAM地址等等设置完成后,就可以在INCA里添加A2L和hex文件进行连接和标定了
  • 观测量格式
    在这里插入图片描述
  • 标定量格式

在这里插入图片描述

  • INCA初始化的时候会传输大量报文,有很多都未使能宏定义,使能后很多函数都没有定义,但大部分都能在官方文档can_ccp.c里找到对应函数,CV过来后,有问题再读和修改
  • matlab生成A2L,可以参考博客,Matlab生成标定量替换a2l地址,axf和elf应该是一个东西,axf使用此方法替换也没问题
我遇到的问题
  1. 报文传输后,大小端弄反
  2. A2L标定区域地址设置错误
  3. 标定量区域未初始化,校验错误
  4. 观测量Daq上报,没有放进定时器
  5. A2L只给INCA,只与INCA发送的报文有关
  6. 0x09和0x11命令的函数可能要重写,can_ccp.c里的实现,我测试有点问题
  7. Received an unexpected PID 0(expected 11) on CanlD 0x07EA,这个问题困扰了我很久,这个需要你重新检查代码,大概就是发送顺序乱了
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值