CAN通讯测试
TCAN332D芯片在同时收发的时候会出现数据丢失,如果是A方发送B方接收数据不会丢失,如果A方和B方同时发送接收就会出现丢数 这是什么原因
Amy Luo:
您好,
TCAN332D CAN总线应该是半双工通信,不能实现A→B的同时B→A
,
李嘉辉:
我在芯片手册里面没有看到相关的描述
,
Amy Luo:
数据手册中确实没有提TCAN332D 能不能全双工通信,但看TCAN332D 物理接口上只有一个差分对,我认为其共享传输介质应该是没法实现全双工的,我再确认一下这个问题
,
李嘉辉:
好的谢谢CAN的底层协议是半双工通讯的这个芯片也没有提到这一点
,
Amy Luo:
CAN协议在技术上是一种半双工通信方式,但是在某些时间点,会发生多个节点同时驱动总线的情况,因此这里牵扯到一个重要的时间段,即CAN帧的仲裁阶段。
在仲裁过程中,需要在CAN总线上发送数据的每个节点将发送其消息ID。同时,这些节点将监视总线,以查看是否有任何其他节点发送优先级高于其自身的ID。如果一个节点识别出它不是最高优先级的ID,它将放弃总线以允许其他节点在总线上发送优先级消息。请注意,这些消息ID同时发送,因此每个位重叠。这允许使用任意数量的节点(受电气特性限制),而无需知道存在多少其他节点或任何主要/次要层次结构。
对于两个节点同时尝试传输时发生的数据丢失问题,可能有两个原因。
一是CAN控制器未正确处理仲裁,并且在此阶段未正确监控总线
二是在仲裁阶段,CAN收发器不能准确地传送或驱动总线的状态。
对于您的情况,因为只有一个节点尝试发送消息时通信工作正常,所以我认为很可能是第一种原因,请检查以下几点:1、 两者是否都使用遵循ISO 11898-1标准数据层规范的CAN控制器?
2、 数据丢失是怎样识别的?控制器是否抛出任何特定错误?数据是否已损坏?还是根本就没有发送到?
3、 您说A方发送B方接收数据不会丢失,是否对B方发送A方接收数据是否会丢失进行过类似的单向测试?
4、 如果以上这些都没有问题,您可以上传在数据丢失期间用示波器捕获的CANH、CANL、TXD和RXD的波形图吗
,
李嘉辉:
通过所测的波形图 貌似看不到什么现象呢,麻烦您帮我看一下 谢谢
,
Amy Luo:
这些波形我也看不出来有什么问题,我认为数据丢失应该不在收发器级别
请检查以确保CAN控制器配置正确,并且在传输其消息时使用唯一的ID,这对于确保每个节点都能区分哪个节点赢得了某一帧的仲裁非常重要
还请检查代码逻辑,以确保每个消息都被处理,中断都被识别,包括被配置为发送数据的节点。具体检查的方法因系统而异,因此我们恐怕不能给出更具体的建议如果您在检查这些东西时遇到困难,也可以使用下面这个方法来确定可能的错误
您可以同时捕获节点A和节点B(TXD1、TXD2)以及CAN总线(CANH、CANL)的传输信号,这有助于确定哪个节点(TXDn上的低电平将与CAN总线上的主要状态相对应)正在驱动哪些主要状态(在CAN总线上查看)。如果两条TXD线路在仲裁期间(前几个位)完全相同,并且在此阶段之后(对于CAN帧的其余部分)都继续,则仲裁失败,两个节点同时进行传输。在正确的情况下,一条TXDn线路将在仲裁后停止尝试传输,并等待下一帧再次尝试发送数据
,
李嘉辉:
谢谢你的解答和提供的测试思路
按照您说的我捕获了总线上发送数据的波形 发现两者在同一时间都在总线上发送数据,存在丢失是应为我设置模式的时候设置错了,我设置成了禁止自动重发模式,导致发送出错之后就不在发送了,就会丢失数据,通过测试波形发现了问题所在,后来改成了时间触发通讯模式,两者出现同时在总线上发送数据就不会出现丢数,CAN协议自动仲裁发送。
在我的程序中测试了1秒钟能发送30k个字节,我用10k个字节做测试,测试一晚上没有丢数,
得出的结论就是,资料没有看明白就做测试浪费了不少时间,通过测试来反推出前期准备不扎实。
再次特别感谢@Amy Luo 提供的测试思路
,
Amy Luo:
很高兴您的问题得到解决,感谢您的反馈