本帖最后由 lihuasoft 于 2024-12-15 18:16 编辑
(三)CAN通信测试
这层楼主要是做传统CAN的测试,CAN FD的测试会放在下一层楼。
但是在此有必要先说一说我的CAN通信工具。因我以前的项目只用到经典CAN,从来没有用过CAN FD,于是,得知自己入选名单后,斥“巨资”买了USB-CANFP工具,就是下图中的小小黑盒子(本人不建议你买这个);而那个红色的东西,是我一直在用的USB-CAN(同样不推荐买这个,我了解它的缺点)。
于是,现在我有2个CAN分析仪了,那就把这总共3个CAN设备连起来:
G32A1465板子上已经焊接了120欧的匹配电阻,再把小黑盒自带的120欧电阻接上,那个红色的CAN分析仪接在中间,要把电阻拨到关闭位置。于是总线两端都有了匹配电阻,一条情绪平和的CAN总线就有了。实际上这么短的线,不接120欧电阻应该也是没问题的。
先做一个CAN通信测试吧,评估板发出协议帧,两个CAN分析仪都收到了:
为了人为地让帧数据显得复杂,我把数据搞成1-10个连续的bit作为一个数据元素,这可能就是“画蛇添足”的本意吧。下面是上述效果的发送代码:
void Key1Handler(void)
{
/* Send standard CAN frame */
eightBytes_t eightBytes = {
.bit0 = 0b1,
.bit1_2 = 0b10,
.bit3_5 = 0b111,
.bit6_9 = 0b1011,
.bit10_14 = 0b11000,
.bit15_20 = 0b100111,
.bit21_27 = 0b1001100,
.bit28_35 = 0x5A,
.bit36_44 = 0b100000110,
.bit45_54 = 0b1111111111,
.bit55_63 = 0b000000000
};
CAN_DATA_INFO_T txDataInfo = {
.msgIdType = CAN_ID_STANDARD, /* Standard CAN ID */
.dataLen = sizeof(eightBytes_t), /* Payload size */
.fdEnable = false,
.isRemote = false
};
CAN_SendNonBlocking(CAN0_INSTANCE, TX_MB, &txDataInfo, TX_CAN_MESSAGE_ID_1, (uint8_t *)&eightBytes);
}
还简单地做了报文负载测试,两个分析仪马力全开,同时以最短的时间间隔持续向总线上发送报文,G32A1465评估板全部接收成功。我觉得G32A1465用在汽车总线通信和工业即时通信场景,一定能够胜任。
|