项目场景:
项目需要用到CAN来进行数据传输:
采用官方例程,为XCANPS_MODE_LOOPBACK自环回模式,改为XCANPS_MODE_NORMAL普通模式,与外部进行收发测试。
问题描述:
原本的自环回模式数据发出接收不经过管脚,现改为普通模式,进行数据收发测试,使用原子哥的领航者开发板,CAN为PL端输出,勾选CAN0为EMIO
模块设计如图:
管脚约束:
与外部收发用的是CAN转USB,导入官方例程,把环回模式改为普通模式,循环1s向外发送数据,发现外部无法收到数据
原因分析:
查看文档,采用的是TJA1050芯片,根据模块,约束电压没问题,bit流文件没问题,百思不得其解,用vivado查看两个管脚,有输出,难道是CAN转串口坏了?根据CAN转USB的自检发现,也没有问题,万用表测量H,L端电阻在58,也正常,开始难受,思来想去,觉得还有一种可能,就是频率不对,根据例程,24MHz下,频率为24M/(29+1)*(3+2+15) = 40K
查看配置,时钟设为100M,害,原来是你
需要重新计算,把TEST_BRPR_BAUD_PRESCALAR改为49,得到100K的波特率
打开CAN转USB,点击自动识别波特率,依旧失败,竟然还有锅?
解决方案:
开始陷入困境,后来想尝试强制让CAN转USB强制设置为100K,进入软件,测试成功,收发数据正常,被设备厂商小工具摆了一道,估计是自动识别频率有问题。