【回眸】InfineonTC397Aurix实现CAN和CANFD指定波特率通讯(含测试)
前言
本文复盘下CANFD通讯的开发及测试,实际开发的过程和测试密不可分,因为很少有一次成功的开发,所以实际开发的过程中需要不断地试错,以及根据实际结果进行调整。本次开发就遇到了使用周立功给CANFD发送消息出现CAN总线错误,CAN控制器消极错误,其他错误等报错。回首之前的错误,发现两大原因导致上述的错误,一个原因是配置不合适,另一个原因是因为代码没有配置好。
【回眸】InfineonTC397Aurix实现CAN和CANFD指定波特率通讯(含测试)
CANFD通讯速率解析
最初接到这个任务,觉得应该是不难的,刚实习的时候有测试过CANFD,在主函数中调用test_can(CANFD_MODE);(如果测试CAN通讯的话是test_can(CAN_MODE);)已经知道默认的代码里规定是:仲裁域波特率:1Mbps 80%,数据域波特率:5Mbps 75%,如今需要把数据域波特率:5Mbps 75% 改成数据域波特率:2Mbps 80%,相应地,代码也需要做相应的修改。
CANFD 数据域波特率修改需要修改什么
因为任务是修改CANFD的数据域波特率,所以只需要将下列canfd_bandrate[MAX_CAN_BUS]里所有的5000000更改成2000000。
static const uint32 canfd_bandrate[MAX_CAN_BUS] = {
2000000,
2000000,
2000000,
2000000,
2000000,
2000000
};
另外,需要将下列代码中的5000000也修改成2000000
canNodeConfig.fastBaudRate.tranceiverDelayOffset = (uint8)(baudrate/200000);
/* we set an estimated value */
CANFD 1M 2M 通讯测试
两个地方都修改好后就可以按代码中设置的参数对CANFD进行测试,需要注意的是,下列配置的参数均是根据代码来进行配置的,具体需要根据手边的代码进行配置
使用周立功测试流程如下:
1、依次连接CAN2-CAN7
2、打开ZCANPRO软件配置相应参数
3、打开设备 USBCANFD_200U
4、打开通道0
5、协议选择CANFD
6、CANFD标准选择 CANFD ISO
7、CANFD加速:是
8、仲裁域波特率:1Mbps 80%
9、数据域波特率:2Mbps 80%
10、工作模式:正常模式
11、终端电阻:使能
12、发送重试:发送到总线关闭
13、发送数据——普通发送
14、通道:USBCANFD_200U 设备0 通道0(如果连接的第二个口就是设备0通道1)
15、帧类型:标准帧 CANFD加速
16、帧格式:数据帧
17、发送方式:正常发送
18、数据长度:64
19、数据0x(数据要自己填入64个数字,十进制对应着从上到下64-1,每个格子填一个数字,对应十六进制的40-01)
20、帧ID 测CAN2时帧ID为201 ,测203时帧ID为202以此类推直到CAN7帧ID为206
21、发送次数:1
22、每次间隔:0
23、每次发送方帧数:1
24、ID递增:不勾选 数据递增:不勾选
然后就可以对CANFD收发信息进行测试了。图片不是很准确,具体以文字描述为准!
CAN通讯速率解析
与CANFD的再开发流程类似,已经知道默认的代码里规定是:仲裁域波特率:1Mbps 80%,CAN通信没有数据域波特率,需要把仲裁域波特率:1Mbps 80% 改成仲裁域波特率:500Kbps ,相应地,代码也需要做相应的修改。
CAN通讯波特率修改需要修改什么
static const uint32 can_bandrate[MAX_CAN_BUS] = {
#ifdef CAN_OTA
500000,
#else
500000,
#endif
500000,
500000,
500000,
500000,
500000
};
因为CAN通讯没有数据域波特率所以只需要修改 can_bandrate[MAX_CAN_BUS]就可以了。
修改后就可以对CAN通讯进行测试。
CAN500K 通讯测试
can_bandrate[MAX_CAN_BUS]修改好后就可以按代码中设置的参数对CAN进行测试,需要注意的是,下列配置的参数均是根据代码来进行配置的,具体需要根据大家的代码进行配置。
使用周立功测试流程如下:
1、连接CAN2CAN757,每个格子填一个数字,对应十六进制的40 3f 3e 3d 3c 3b 3a 39)
2、打开ZCANPRO配置相应参数
3、打开设备
4、打开通道0
5、协议选择CAN
6、CANFD标准 无
7、CANFD加速 无
8、仲裁域波特率:500K
9、数据域波特率:无
10、工作模式:正常模式
11、终端电阻:使能
12、发送重试:发送到总线关闭
13、发送数据——普通发送
14、通道:USBCANFD_200U 设备0 通道0
15、帧类型:标准帧 CAN
16、帧格式:数据帧
17、发送方式:正常发送
18、数据长度:8
19、数据0x(数据要自己填入8个数字,十进制对应着从上到下64
20、帧ID 测CAN2时帧ID为201 ,测203时帧ID为202以此类推直到CAN7帧ID为206
21、发送次数:1
22、每次间隔:0
23、每次发送方帧数:1
24、ID递增:不勾选 数据递增:不勾选
后记
CAN的开发暂时还不会结束,后续还有一些任务是和CAN有关的,到时候攒够一篇文章再放出来,写本文的目的一方面是提醒未来的自己别忘了当初为了完成任务做了什么动作,另一个方面也是希望能给刚入汽车电子的萌新一些参考,欢迎大家在评论区交流点赞,加油!汽电人 看到这里的读者朋友们可以点击专栏查看同系列的其他文章,希望能帮到屏幕前的每一位技术人,该博文最初发表在CSDN上。