前两天,帮一个客户调试CAN总线,他的板子发数,USBCAN接纳,可是总是调试不成。我接上示波器,量一下CANH与CANL之间的波形,发现他板子不连接USBCAN接口卡时,波形是正确的;可是一旦连接上USBCAN今后,波形就成了以下这个姿态:
便是刚发了第一个显性位之后,就有个阶梯的电压下降,然后坚持几个位后,康复到隐性电平,过了一会,才有正常的波形出来,可是这个帧只剩下一半了,必定不或许发送成功。
我开端以为是收发器不匹配,换了几个收发器都是相同的。忽然我想到这个很像过错帧。已然有过错帧,那就阐明或许波特率不对。细心看了程序,发现波特率是12M下算出来的,而晶振却用了16M。立马调整波特率,OK。通讯成功。那个阶梯的波形也没有了。
所以能够必定,那便是一个过错帧。但为什么有个阶梯呢?答案很简单,由于CAN通讯的两个节点的收发器的电源不同,比方,发送节点的电压略微高点,那么其CANH被拉高时电压也高,故显性位输出时,差分电压也高。所以当发送节点发送的显性位被接纳节点接纳后,接纳节点发现波特率不匹配,则立刻宣布过错帧(6个位的显性电平),可是接纳节点电压略微低,故差分电压也小一点,所以产生了一个“阶梯”。
下面为过错帧的界说:
过错帧是节点收到信息,被以为过错时,而向总线播送的一种帧。比方前面这个过错帧的效果便是:接纳节点告诉发送节点:你的发送有自动过错,你的发送过错计数器要加8;一起接纳节点的接纳过错计数器要加1。
这样,不同波特率的总线下,少量不同波特率的发送节点总是先退出总线(过错计数器达256时,进入总线封闭状况),确保了其他节点的正常通讯。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/233302.html