CAN-bus的可靠性很高,但是在某些情況下還是發(fā)生錯(cuò)誤,為了使數(shù)據(jù)能夠在總線上可靠傳輸,CAN-bus規(guī)范對(duì)各類幀的格式、用途及發(fā)送時(shí)機(jī)都進(jìn)行了詳細(xì)的規(guī)定。并實(shí)現(xiàn)在CAN控制器中自動(dòng)完成幀格式處理及校驗(yàn)等工作,一旦錯(cuò)誤被檢測(cè),正在傳送的數(shù)據(jù)幀將會(huì)立即停止而待總線空閑時(shí)再次重發(fā)直至發(fā)送成功,該過(guò)程并不需要CPU的干涉除非錯(cuò)誤累計(jì)該發(fā)送器退隱(Bus off)。
CAN-bus的可靠性很高,但是在某些情況下還是發(fā)生錯(cuò)誤,為了使數(shù)據(jù)能夠在總線上可靠傳輸,CAN-bus規(guī)范對(duì)各類幀的格式、用途及發(fā)送時(shí)機(jī)都進(jìn)行了詳細(xì)的規(guī)定。下面我們來(lái)總結(jié)下在CAN通訊中會(huì)出現(xiàn)哪些錯(cuò)誤。
圖一
位錯(cuò)誤:發(fā)送節(jié)點(diǎn)在發(fā)送數(shù)據(jù)的同時(shí)也會(huì)對(duì)發(fā)出的比特流采樣回收,如果監(jiān)測(cè)到總線電平與正在發(fā)送的電平不符,將會(huì)發(fā)生位錯(cuò)誤(Bit Check Error);
位填充錯(cuò)誤:為解決異步串行通訊中共有的缺點(diǎn)——各節(jié)點(diǎn)通訊時(shí)鐘不同步,CAN-bus采用了一種同步的方式,規(guī)定每隔5個(gè)位的時(shí)間長(zhǎng)度進(jìn)行一次同步,當(dāng)傳輸信號(hào)連續(xù)5個(gè)位是相同的,就要插入一個(gè)點(diǎn)評(píng)相反的位(稱為“填充位”),如果電纜上傳輸?shù)男盘?hào)不滿足這一規(guī)則,則會(huì)出現(xiàn)填充位錯(cuò)誤(Bit Stuff Error);
CRC錯(cuò)誤:發(fā)送端發(fā)送的CRC值由發(fā)送器計(jì)算得出,接收器采用同樣的CRC算法,計(jì)算出接收端CRC值,若接收器計(jì)算的CRC值與接收到的CRC值不符,將會(huì)產(chǎn)生該類錯(cuò)誤(CRC Error);
格式錯(cuò)誤:當(dāng)傳輸?shù)臄?shù)據(jù)幀格式與任何一種合法的幀格式不符時(shí)會(huì)發(fā)生該類格式錯(cuò)誤(frame Check Error);