前兩天,幫一個(gè)客戶調(diào)試CAN總線,他的板子發(fā)數(shù),USBCAN接收,但是總是調(diào)試不成。我接上示波器,量一下CANH與CANL之間的波形,發(fā)現(xiàn)他板子不連接USBCAN接口卡時(shí),波形是正確的;可是一旦連接上USBCAN以后,波形就成了以下這個(gè)樣子:
本文引用地址:http://2s4d.com/article/201612/330355.htm就是剛發(fā)了第一個(gè)顯性位之后,就有個(gè)階梯的電壓下降,然后保持幾個(gè)位后,恢復(fù)到隱性電平,過(guò)了一會(huì),才有正常的波形出來(lái),可是這個(gè)幀只剩下一半了,肯定不可能發(fā)送成功。
我開(kāi)始以為是收發(fā)器不匹配,換了幾個(gè)收發(fā)器都是一樣的。突然我想到這個(gè)很像錯(cuò)誤幀。既然有錯(cuò)誤幀,那就說(shuō)明可能波特率不對(duì)。仔細(xì)看了程序,發(fā)現(xiàn)波特率是12M下算出來(lái)的,而晶振卻用了16M。立馬調(diào)整波特率,OK。通訊成功。那個(gè)階梯的波形也沒(méi)有了。
所以可以肯定,那就是一個(gè)錯(cuò)誤幀。但為什么有個(gè)階梯呢?答案很簡(jiǎn)單,因?yàn)镃AN通訊的兩個(gè)節(jié)點(diǎn)的收發(fā)器的電源不同,比如,發(fā)送節(jié)點(diǎn)的電壓稍微高點(diǎn),那么其CANH被拉高時(shí)電壓也高,故顯性位輸出時(shí),差分電壓也高。所以當(dāng)發(fā)送節(jié)點(diǎn)發(fā)送的顯性位被接收節(jié)點(diǎn)接收后,接收節(jié)點(diǎn)發(fā)現(xiàn)波特率不匹配,則馬上發(fā)出錯(cuò)誤幀(6個(gè)位的顯性電平),但是接收節(jié)點(diǎn)電壓稍微低,故差分電壓也小一點(diǎn),所以產(chǎn)生了一個(gè)“階梯”。
下面為錯(cuò)誤幀的定義:
錯(cuò)誤幀是節(jié)點(diǎn)收到信息,被認(rèn)為錯(cuò)誤時(shí),而向總線廣播的一種幀。比如前面這個(gè)錯(cuò)誤幀的作用就是:接收節(jié)點(diǎn)通知發(fā)送節(jié)點(diǎn):你的發(fā)送有主動(dòng)錯(cuò)誤,你的發(fā)送錯(cuò)誤計(jì)數(shù)器要加8;同時(shí)接收節(jié)點(diǎn)的接收錯(cuò)誤計(jì)數(shù)器要加1。
這樣,不同波特率的總線下,少數(shù)不同波特率的發(fā)送節(jié)點(diǎn)總是先退出總線(錯(cuò)誤計(jì)數(shù)器達(dá)256時(shí),進(jìn)入總線關(guān)閉狀態(tài)),保證了其他節(jié)點(diǎn)的正常通訊。
評(píng)論