介紹:CAN總線
CAN總線是廣播類型的總線。這意味著所有節(jié)點(diǎn)都可以偵聽到所有傳輸?shù)膱?bào)文。無(wú)法將報(bào)文單獨(dú)發(fā)送給指定節(jié)點(diǎn);所有節(jié)點(diǎn)都將始終捕獲所有報(bào)文。但是,CAN硬件能夠提供本地過(guò)濾功能,讓每個(gè)節(jié)點(diǎn)對(duì)報(bào)文有選擇性地做出響應(yīng)。
總線使用不歸零位填充。模塊以線與邏輯連接到總線:如果只有一個(gè)節(jié)點(diǎn)向總線傳輸邏輯0,那么不管有多少個(gè)節(jié)點(diǎn)向總線傳輸邏輯1,整個(gè)總線都處于邏輯0狀態(tài)。
CAN標(biāo)準(zhǔn)定義四種不同的報(bào)文類型。報(bào)文使用逐位仲裁智能方案來(lái)控制對(duì)總線的訪問(wèn),每條報(bào)文都帶有優(yōu)先級(jí)標(biāo)記。
CAN標(biāo)準(zhǔn)還為錯(cuò)誤處理和消除定義了詳細(xì)的方案,這在第9節(jié)“CAN錯(cuò)誤處理”(第23頁(yè))中有更詳細(xì)的說(shuō)明。
在本教程第8頁(yè)討論位時(shí)序和時(shí)鐘同步。位時(shí)序計(jì)算器見此頁(yè)面,您可以用它來(lái)計(jì)算CAN總線參數(shù)和寄存器設(shè)置。
CAN可以使用不同的物理層來(lái)實(shí)現(xiàn)(第5頁(yè)),這里闡述其中一些。而且,可以使用許多不同種類的連接器。我們還為對(duì)報(bào)文細(xì)節(jié)感興趣的用戶提供了許多示波器圖片(第6頁(yè))。
CAN報(bào)文(第1頁(yè)/共3頁(yè))
CAN總線是廣播類型的總線。這意味著所有節(jié)點(diǎn)都可以偵聽到所有傳輸?shù)膱?bào)文。無(wú)法將報(bào)文單獨(dú)發(fā)送給指定節(jié)點(diǎn);所有節(jié)點(diǎn)都將始終捕獲所有報(bào)文。但是CAN硬件能夠提供本地過(guò)濾功能,讓每個(gè)節(jié)點(diǎn)對(duì)報(bào)文有選擇性地做出響應(yīng)。
CAN報(bào)文
CAN使用短報(bào)文 – 最大實(shí)用負(fù)載是94位。報(bào)文中沒有任何明確的地址;相反,可以認(rèn)為報(bào)文是通過(guò)內(nèi)容尋址,也就是說(shuō),報(bào)文的內(nèi)容隱式地確定其地址。
報(bào)文類型
CAN總線上有四種不同的報(bào)文類型(或“幀”):
數(shù)據(jù)幀
遠(yuǎn)程幀
錯(cuò)誤幀
過(guò)載幀
1. 數(shù)據(jù)幀
概要:“大家好,這是一些標(biāo)簽為X的數(shù)據(jù),希望滿足您的需要!”
數(shù)據(jù)幀是最常見的報(bào)文類型。由下列主要部分組成(出于簡(jiǎn)潔性目的,忽略了一些細(xì)節(jié)):
仲裁字段。當(dāng)兩個(gè)或多個(gè)節(jié)點(diǎn)競(jìng)爭(zhēng)總線時(shí),確定報(bào)文的優(yōu)先級(jí)。仲裁字段包含:
對(duì)于CAN 2.0A,一個(gè)11位的標(biāo)識(shí)符和一個(gè)支配數(shù)據(jù)幀的RTR位。
對(duì)于CAN 2.0B,一個(gè)29位的標(biāo)識(shí)符(其中還包含兩個(gè)隱性位:SRR和IDE)和RTR位。
數(shù)據(jù)字段。包含0到8字節(jié)數(shù)據(jù)。
CRC字段。包含一個(gè)基于報(bào)文大部分?jǐn)?shù)據(jù)計(jì)算得到的15位校驗(yàn)和。校驗(yàn)和用于錯(cuò)誤檢測(cè)。
應(yīng)答時(shí)隙。任何能夠正確接收?qǐng)?bào)文的CAN控制器都會(huì)在每條報(bào)文的末尾發(fā)送一個(gè)應(yīng)答位。傳送節(jié)點(diǎn)檢查應(yīng)答位是否存在,如果沒有檢測(cè)到應(yīng)答位,會(huì)重新發(fā)送報(bào)文。
注1:請(qǐng)注意,總線上存在應(yīng)答位不表示任何目標(biāo)地址已經(jīng)收到報(bào)文。唯一表示的是,總線上的一個(gè)或多個(gè)節(jié)點(diǎn)已經(jīng)正確收到報(bào)文。
注2:仲裁字段中的標(biāo)識(shí)符不一定標(biāo)識(shí)報(bào)文的內(nèi)容,盡管其名字會(huì)讓人如此認(rèn)為。
2. 遠(yuǎn)程幀
概要:“大家好,有沒有人能夠生成標(biāo)簽為X的數(shù)據(jù)?”
遠(yuǎn)程幀與數(shù)據(jù)幀十分相似,但是有兩個(gè)重要的區(qū)別:
它被顯式標(biāo)記為遠(yuǎn)程幀(仲裁字段中的RTR位為隱性),并且
它沒有數(shù)據(jù)字段。
遠(yuǎn)程幀的預(yù)期目的是征求傳輸相應(yīng)的數(shù)據(jù)幀。例如,如果節(jié)點(diǎn)A傳輸一個(gè)仲裁字段設(shè)置為234的遠(yuǎn)程幀,那么節(jié)點(diǎn)B(如果已經(jīng)正確初始化)可能通過(guò)一個(gè)仲裁字段也設(shè)置為234的數(shù)據(jù)幀進(jìn)行響應(yīng)。
遠(yuǎn)程幀可以用來(lái)實(shí)現(xiàn)總線通信管理的請(qǐng)求-響應(yīng)類型。但是,遠(yuǎn)程幀在實(shí)踐中很少使用。還有一點(diǎn)值得注意的是,CAN標(biāo)準(zhǔn)沒有規(guī)定這里列出的特性。大部分CAN控制器都可以進(jìn)行編程自動(dòng)響應(yīng)遠(yuǎn)程幀或通知本地CPU。
關(guān)于遠(yuǎn)程幀的一個(gè)注意事項(xiàng):數(shù)據(jù)長(zhǎng)度代碼必須設(shè)置成預(yù)期響應(yīng)報(bào)文的長(zhǎng)度。否則仲裁將不起作用。
有時(shí)據(jù)稱響應(yīng)遠(yuǎn)程幀的節(jié)點(diǎn)會(huì)在識(shí)別標(biāo)識(shí)符后立即開始傳輸,從而“填充”空的遠(yuǎn)程幀。但是事實(shí)并非如此
概要:“大家好(大聲),讓我們重新試一下”
簡(jiǎn)單地說(shuō),錯(cuò)誤幀是一種違背CAN報(bào)文幀規(guī)則的特殊報(bào)文。一個(gè)節(jié)點(diǎn)咋在檢測(cè)到故障時(shí)傳送錯(cuò)誤幀,這將導(dǎo)致所有其它節(jié)點(diǎn)也檢測(cè)到故障,它們也將發(fā)送錯(cuò)誤幀。然后傳送節(jié)點(diǎn)將自動(dòng)嘗試重傳報(bào)文。有一種精準(zhǔn)的錯(cuò)誤計(jì)數(shù)器方案,可以確保節(jié)點(diǎn)無(wú)法通過(guò)重復(fù)傳輸錯(cuò)誤幀來(lái)破壞總線通信。
錯(cuò)誤幀包含一個(gè)錯(cuò)誤標(biāo)志。這個(gè)錯(cuò)誤標(biāo)志是6位長(zhǎng)的相同值(因此違背位填充規(guī)則)和一個(gè)錯(cuò)誤定界符(8個(gè)隱性位)。錯(cuò)誤定界符提供一些空間,以便總線上其它節(jié)點(diǎn)在檢測(cè)到第一個(gè)錯(cuò)誤標(biāo)志時(shí)可以發(fā)送它們的錯(cuò)誤標(biāo)志。
錯(cuò)誤幀圖示如下:
4. 過(guò)載幀
概要:“我是非常繁忙的小型82526,您可以稍等片刻嗎?”
這里,我們僅僅出于知識(shí)完整性目的而提及過(guò)載幀。在格式方面,過(guò)載幀與錯(cuò)誤幀非常相似,并且由會(huì)變得重荷的節(jié)點(diǎn)傳送。過(guò)載幀并不常用,因?yàn)楫?dāng)今的CAN控制器會(huì)非常智能化地避免使用過(guò)載幀。事實(shí)上,會(huì)生成過(guò)載幀的唯一一種控制器是現(xiàn)在已經(jīng)過(guò)時(shí)的82526。
標(biāo)準(zhǔn)CAN和擴(kuò)展CAN
最初,CAN標(biāo)準(zhǔn)把仲裁字段中標(biāo)識(shí)符的長(zhǎng)度定義為11位。后來(lái),客戶的需求推動(dòng)了該標(biāo)準(zhǔn)得延伸。新格式通常稱為擴(kuò)展CAN,標(biāo)識(shí)符不允許少于29位。為了區(qū)分這兩種幀類型,在控制字段中使用了一個(gè)保留位。
標(biāo)準(zhǔn)的正式名稱
是
2.0A,僅支持11位標(biāo)識(shí)符
2.0B,支持完整的29位標(biāo)識(shí)符(也可以混合使用11位標(biāo)識(shí)符)的擴(kuò)展版本。2.0B節(jié)點(diǎn)可以是
“2.0B主動(dòng)型”,也就是說(shuō),它可以發(fā)送和接收擴(kuò)展幀,或者
“2.0B被動(dòng)型”,也就是說(shuō),它將靜默丟棄接收到的擴(kuò)展幀(但是請(qǐng)參考下述內(nèi)容)
1.x表示初始規(guī)范及其修訂版。
如今的新型CAN控制器通常是2.0B類型。1.x或2.0A類型的控制器如果接收到29個(gè)仲裁位的報(bào)文會(huì)很麻煩。2.0B被動(dòng)型控制器容許這些報(bào)文,如果它們正確的話會(huì)進(jìn)行應(yīng)答,然后拋棄這些報(bào)文。2.0B主動(dòng)型控制器既可傳送也可接收這些報(bào)文。
實(shí)現(xiàn)2.0B和2.0A(和1.x)的控制器相互兼容,并且可以在同一總線上使用它們,則只要實(shí)現(xiàn)2.0B的控制器不發(fā)送擴(kuò)展幀即可!
有時(shí)候人們說(shuō)標(biāo)準(zhǔn)CAN“優(yōu)于”擴(kuò)展CAN,因?yàn)閿U(kuò)展CAN報(bào)文會(huì)產(chǎn)生更多的間接費(fèi)用。這種說(shuō)法未必正確。如果您使用仲裁字段來(lái)傳送數(shù)據(jù),那么擴(kuò)展CAN實(shí)際上的發(fā)生的間接費(fèi)用可能比標(biāo)準(zhǔn)CAN少。CAN報(bào)文(第3頁(yè)/共3頁(yè))
基本CAN和完整CAN
術(shù)語(yǔ)“基本CAN”和“完整CAN”源自CAN的初創(chuàng)年代。歷史上曾經(jīng)有Intel 82526 CAN控制器,它為程序員提供DPRAM型接口。然后出現(xiàn)了Philips 82C200 CAN控制器,它使用面向FIFO(隊(duì)列)的編程模型和有限制的過(guò)濾功能。為了區(qū)分這兩種編程模型,人們出于某些原因把Intel的模型稱為“完整CAN”,把Philips的模型稱為“基本CAN”。如今,大多數(shù)CAN控制器同時(shí)支持這兩種編程模型,所以沒有理由繼續(xù)使用術(shù)語(yǔ)“基本CAN”和“完整CAN”。事實(shí)上,這些術(shù)語(yǔ)可能會(huì)令人迷惑,應(yīng)當(dāng)盡量避免。
當(dāng)然,“完整CAN”控制器可以和“基本CAN”進(jìn)行通信,反之也可。不存在任何兼容性問(wèn)題。
總線仲裁和報(bào)文優(yōu)先級(jí)
報(bào)文仲裁(兩個(gè)或多個(gè)CAN控制器協(xié)商確定誰(shuí)使用總線的過(guò)程)對(duì)于數(shù)據(jù)傳送中真正可用的帶寬非常重要。
任何CAN控制器都可能在檢測(cè)到空閑總線時(shí)開始傳送數(shù)據(jù)。這可能會(huì)導(dǎo)致兩個(gè)或多個(gè)控制器(幾乎)同時(shí)開始傳送報(bào)文。通過(guò)下述方法解決這種沖突。傳送節(jié)點(diǎn)在發(fā)送報(bào)文時(shí)監(jiān)視總線。如果節(jié)點(diǎn)在自身發(fā)送隱性位時(shí)檢測(cè)到顯性位,它將立即退出仲裁過(guò)程并轉(zhuǎn)變成接收方。仲裁針對(duì)整個(gè)仲裁字段進(jìn)行,當(dāng)該字段已經(jīng)被發(fā)送時(shí),總線上恰好只剩一個(gè)傳送節(jié)點(diǎn)。這個(gè)節(jié)點(diǎn)就像什么都沒發(fā)生那樣繼續(xù)傳送。其它潛在的傳送節(jié)點(diǎn)將在總線下次空閑時(shí)嘗試重傳它們的報(bào)文。仲裁過(guò)程不會(huì)消耗時(shí)間。
這種逐位仲裁成功的重要條件是兩個(gè)節(jié)點(diǎn)不會(huì)傳送相同的仲裁字段。這個(gè)規(guī)則有一個(gè)例外:如果報(bào)文不包含任何數(shù)據(jù),那么任何節(jié)點(diǎn)都可傳送該報(bào)文。
因?yàn)榭偩€采用線與邏輯,并且顯性位是邏輯0,所以包含數(shù)值最低仲裁字段的報(bào)文將贏得仲裁。
問(wèn):如果一個(gè)節(jié)點(diǎn)是總線上的唯一節(jié)點(diǎn)并且試圖進(jìn)行傳送,會(huì)發(fā)生什么情況?
答:當(dāng)然,節(jié)點(diǎn)將贏得仲裁并順利地進(jìn)行報(bào)文傳送。但是,當(dāng)進(jìn)行應(yīng)答的時(shí)候,沒有任何節(jié)點(diǎn)將在應(yīng)答時(shí)隙(ACK時(shí)隙)發(fā)送顯性位,所以傳送節(jié)點(diǎn)將檢測(cè)到ACK錯(cuò)誤,發(fā)送錯(cuò)誤標(biāo)志,將傳送錯(cuò)誤計(jì)數(shù)器加8并開始重傳。這將發(fā)生16次。然后傳送節(jié)點(diǎn)將進(jìn)入錯(cuò)誤被動(dòng)狀態(tài)。通過(guò)錯(cuò)誤限制算法的特殊規(guī)則,如果節(jié)點(diǎn)為被動(dòng)錯(cuò)誤并且錯(cuò)誤是ACK錯(cuò)誤,則傳送錯(cuò)誤計(jì)數(shù)器不再增加。所以節(jié)點(diǎn)將一直繼續(xù)傳送,至少要到有人應(yīng)答報(bào)文。
報(bào)文尋址和標(biāo)識(shí)
再次提醒,CAN報(bào)文中無(wú)顯式地址。每個(gè)CAN控制器都會(huì)檢查總線上的所有通信,并使用硬件過(guò)濾器和軟件的組合來(lái)確定是否對(duì)該報(bào)文“感興趣”。
事實(shí)上,CAN中沒有報(bào)文地址的概念。報(bào)文的內(nèi)容由存在于報(bào)文中某處的標(biāo)識(shí)符進(jìn)行標(biāo)識(shí)。CAN報(bào)文被稱為“內(nèi)容尋址”的報(bào)文。
常規(guī)的報(bào)文地址類似于“這是發(fā)給節(jié)點(diǎn)X的報(bào)文”。而內(nèi)容尋址的報(bào)文類似于“這是包含標(biāo)簽為X的數(shù)據(jù)的報(bào)文”。這兩個(gè)概念之間的區(qū)別很小但是非常重要。
根據(jù)標(biāo)準(zhǔn),仲裁字段的內(nèi)容用來(lái)確定總線上報(bào)文的優(yōu)先級(jí)。所有CAN控制器還將在硬件過(guò)濾過(guò)程中使用整個(gè)(一些控制器將只使用一部分)仲裁字段作為主鍵。
標(biāo)準(zhǔn)沒有規(guī)定仲裁字段必須用作報(bào)文標(biāo)識(shí)符。但是不管怎樣,這是一種常見情況。
標(biāo)識(shí)符值注意事項(xiàng)
我們說(shuō)過(guò),標(biāo)識(shí)符可以是11位(CAN 2.0A)或29位(CAN 2.0B)。這不完全正確。出于與某種老式CAN控制器(猜猜是哪種)兼容的原因,標(biāo)識(shí)符不得把7個(gè)最高有效位都設(shè)置為1。所以,對(duì)于11位標(biāo)識(shí)符,只剩下0到2031,29位標(biāo)識(shí)符可以使用532676608個(gè)不同的值。
注意,所有其它CAN控制器都接受“非法”標(biāo)識(shí)符,所以現(xiàn)代CAN系統(tǒng)標(biāo)識(shí)符2032到2047可以自由使用。
CAN物理層
CAN總線
CAN總線使用不歸零(NRZ)的位填充。有兩種不同的信令狀態(tài):顯性(邏輯0)和隱性(邏輯1)。這些信令狀態(tài)對(duì)應(yīng)于所在物理層(存在幾種不同的物理層)的某種電平。模塊以線與邏輯連接到總線:哪怕只有一個(gè)節(jié)點(diǎn)發(fā)送邏輯0使得總線處于顯性狀態(tài),那么不管有多少隱形狀態(tài)的節(jié)點(diǎn)傳送,則整個(gè)總線都處于顯性狀態(tài)。
不同的物理層
物理層定義總線上的電平和信令方案、纜線阻抗和類似的方面。
有幾種不同的物理層:
最常見的類型由CAN標(biāo)準(zhǔn)ISO11898-2部分定義的,它是雙線平衡信令方案。有時(shí)也稱為“高速CAN”。
同一個(gè)ISO標(biāo)準(zhǔn)的另一部分(ISO 11898-3)為低總線速度定義了另一種雙線平衡信令方案。它具有容錯(cuò)能力,所以即使一條總線線纜斷開或?qū)Φ囟搪坊蜻B接到備用電池,信號(hào)都可以繼續(xù)發(fā)出。有時(shí)也稱為“低速CAN”。
SAE J2411定義單線纜(當(dāng)然加上接地)物理層。主要用在汽車中 – 例如GM-LAN。
還有幾種專有的物理層。
在沒有CAN驅(qū)動(dòng)程序的早期,RS485修訂版。
有關(guān)報(bào)文的詳細(xì)信息,請(qǐng)轉(zhuǎn)到第6頁(yè)查看多個(gè)示波器圖片。
規(guī)則規(guī)定不同的物理層不能交互操作。某些組合可能在良好的條件下工作,或看上去可以工作。例如,在同一條總線上同時(shí)使用“高速”和“低速”收發(fā)器,有時(shí)可以工作。
大量CAN收發(fā)器芯片產(chǎn)自Philips;其它廠商包括Bosch、Infineon、Siliconix和Unitrode。
一種常見的收發(fā)器類型是82C250,它實(shí)現(xiàn)ISO 11898定義的物理層。82C251是一種改進(jìn)的版本。
“低速CAN”的一種常見收發(fā)器是產(chǎn)自Philips的TJA1054。
最大總線速度
按照標(biāo)準(zhǔn),CAN總線的最大速度是1 Mbps。然而,一些CAN控制器能夠處理比1Mbps更快的速度,可以在特殊應(yīng)用場(chǎng)合中使用。
低速CAN(ISO 11898-3,參見上文)最快可以達(dá)到125 kbps。
單線CAN在標(biāo)準(zhǔn)模式下可高達(dá)約50kbps,并且如果使用特殊的高速模式,諸如用于ECU編程,可以高達(dá)約100kbps。
最小總線速度
注意,一些總線收發(fā)器不允許低于特定的比特率。例如,使用82C250或82C251時(shí),低于10kbps不會(huì)有問(wèn)題。但是,如果使用TJA1050,則不能低于大約50kbps。請(qǐng)查閱數(shù)據(jù)表。
最大線纜長(zhǎng)度
如果速度為1Mbps,可以使用的最大線纜長(zhǎng)度大約為40米(130英尺)。這是因?yàn)橹俨梅桨敢笮盘?hào)的峰值可以到達(dá)最遠(yuǎn)的節(jié)點(diǎn)并且在位采樣之前再次返回。換言之,線纜長(zhǎng)度受光速限制。曾有人提出提高光速,但是因?yàn)檫@會(huì)產(chǎn)生時(shí)空交錯(cuò)而被駁回。
其它的最大線纜長(zhǎng)度是(這些是近似值) –
100米(330英尺),比特率為500kbps
200米(650英尺),比特率為250kbps
500米(1600英尺),比特率為125kbps
6千米(20000英尺),比特率為10kbps
如果使用光耦合器來(lái)提供電隔離,那么最大總線長(zhǎng)度會(huì)相應(yīng)地減小。提示:使用快速光耦合器并通過(guò)設(shè)備查看延遲,而不是采用指定的最大比特率。
總線端接
ISO 11898 CAN總線必須進(jìn)行端接。 通過(guò)在總線各端點(diǎn)使用120歐姆的電阻達(dá)到這個(gè)要求。端接可以達(dá)到兩個(gè)目的:
消除總線終端處的信號(hào)反射。
確保總線獲得正確的直流電電平。
不管速度快慢,ISO 11898 CAN總線始終都必須進(jìn)行端接。我將重復(fù)這一點(diǎn):不管速度快慢,ISO 11898 CAN總線始終都必須進(jìn)行端接。對(duì)于實(shí)驗(yàn)性工作,一個(gè)端接器可能就已足夠。如果沒有連接任何端接器,但是您的CAN總線仍然能夠正常工作,那么您只是比較幸運(yùn)而已。
注意,其它物理層(例如“低速CAN”、單線纜CAN和其它物理層)不一定需要進(jìn)行端接。但是您的常用高速ISO 11898 CAN總線總是需要至少一個(gè)端接器。
請(qǐng)參考這篇文章獲取關(guān)于CAN總線端接的更多信息。
線纜
ISO11898規(guī)定線纜阻抗標(biāo)稱值為120歐姆,但允許[108-132]歐姆區(qū)間的阻抗。
現(xiàn)今市場(chǎng)上滿足這種要求的線纜并不多。允許的阻抗區(qū)間將來(lái)很有可能會(huì)擴(kuò)大。
ISO 11898針對(duì)屏蔽或非屏蔽的雙絞線而定義。單線纜標(biāo)準(zhǔn)SAE J2411的相關(guān)工作正在進(jìn)行之中。
CAN連接器
對(duì)于CAN總線連接器,根本沒有任何標(biāo)準(zhǔn)!通常,每種高層協(xié)議都會(huì)定義一種或一些首選的連接器類型。常見的類型包括
9針DSUB(由iCiA建議)。
DeviceNet和SDS使用的5針Mini-C和/或Micro-C連接器。
由CANHUG提出的用于移動(dòng)液壓裝置的6針Deutch連接器。
參見第7頁(yè)中一些不同的連接器布局。
CAN示波器圖片
這是一幅來(lái)自最普通的ISO11898CAN總線的圖片,以1Mbps速率運(yùn)行。收發(fā)器是82C251。也就是說(shuō),物理層是由ISO 11898指定的。
測(cè)量在CAN_H(CAN高位)和GND(接地)之間進(jìn)行。注意,靜態(tài)和隱性總線電壓在2.5 V左右。傳送顯性位時(shí),電壓升高到3.5V左右。
以下是同一個(gè)總線,但是測(cè)量在CAN_L(CAN低位)和GND(接地)之間進(jìn)行:
這是另一個(gè)以125 kbps比特率發(fā)送的報(bào)文。報(bào)文的(11位)標(biāo)識(shí)符是300(十六進(jìn)制值為12c)。如果仔細(xì)察看,您應(yīng)該能夠識(shí)別報(bào)文中前面的位
這是一幅更復(fù)雜的圖片。它顯示與上面例子相同的報(bào)文。仍然是11位標(biāo)識(shí)符300,比特率仍然是125kbps,但是CAN總線上沒有端接。CAN線纜是短扁平帶狀線纜。
那么,發(fā)生了什么情況?這里,比特率是125kbps,所以一個(gè)位的時(shí)間是8微秒。
首先傳送節(jié)點(diǎn)發(fā)送一個(gè)起始位。這是一個(gè)邏輯’0′,也就是一個(gè)顯性電平。
然后傳送標(biāo)識(shí)符。十進(jìn)制300的十六進(jìn)制值是12c,或者二進(jìn)制表示是001 0010 1100。前兩個(gè)0會(huì)順利傳送。這解釋了圖片中看到的24微秒的顯性電平。
然后應(yīng)該傳送一個(gè)’1′。但是因?yàn)榭偩€沒有端接,所以斜率上升不是預(yù)期的結(jié)果。傳送節(jié)點(diǎn)現(xiàn)在將認(rèn)為它在總線上看到的是’0′。
因?yàn)檫@種情況發(fā)生在仲裁階段,所以傳送節(jié)點(diǎn)將停止傳送,其認(rèn)為有其它節(jié)點(diǎn)正在傳送。總線現(xiàn)在將變?yōu)殡[性狀態(tài),因?yàn)閷?shí)際上沒有節(jié)點(diǎn)在傳送。
在6個(gè)隱性位之后,傳送節(jié)點(diǎn)和接收節(jié)點(diǎn)都將檢測(cè)到填充錯(cuò)誤,并開始進(jìn)行錯(cuò)誤處理。這時(shí),已經(jīng)經(jīng)過(guò)了80微秒(一個(gè)起始位、兩個(gè)2個(gè)‘0’、一個(gè)誤解位和六個(gè)隱性位,總共10個(gè)位,等于80微秒)。
檢測(cè)到數(shù)據(jù)錯(cuò)誤的所有節(jié)點(diǎn)現(xiàn)在將開始傳送一個(gè)錯(cuò)誤幀。這種情況下,因?yàn)樵诓东@到上方圖片之前產(chǎn)生了許多錯(cuò)誤,錯(cuò)誤幀為被動(dòng)型,所以傳送節(jié)點(diǎn)是錯(cuò)誤被動(dòng)型。被動(dòng)型錯(cuò)誤幀和主動(dòng)型錯(cuò)誤幀相似,但是使用隱性電平進(jìn)行傳送,所以在總線上不可見。
被動(dòng)型錯(cuò)誤幀持續(xù)6位的時(shí)間。
然后,所有節(jié)點(diǎn)等待8個(gè)隱性位的時(shí)長(zhǎng)(稱為錯(cuò)誤定界符)。
然后,所有節(jié)點(diǎn)等待3個(gè)隱性位的時(shí)長(zhǎng)(稱為間歇)。
對(duì)以上時(shí)間求和,結(jié)果是1+6+6+8+3 = 24個(gè)隱性位 = 192微秒(如圖)
經(jīng)驗(yàn)提示:始終端接CAN總線!反射不一定有害,但是損壞的邊緣形狀將破壞通信。
這里是同一個(gè)CAN總線在另一個(gè)時(shí)間刻度中的情況:
CAN總線大約2分米(8英寸)長(zhǎng)。信號(hào)的下沖和振鈴均可見,但是在這種情況中無(wú)關(guān)緊要。這次,平緩的上升斜率是問(wèn)題所在。
這里是相同的設(shè)置,但是這次傳送節(jié)點(diǎn)和接收節(jié)點(diǎn)都是錯(cuò)誤主動(dòng)型:
發(fā)生了什么情況?
如上圖所示,傳送了三個(gè)‘0’(花費(fèi)24微秒),接下去的位被誤解,所以傳送器認(rèn)為它已經(jīng)失去仲裁。
傳送節(jié)點(diǎn)等待6位,然后檢測(cè)到一個(gè)填充錯(cuò)誤。誤解的位和這6個(gè)位花費(fèi)56微秒。
傳送節(jié)點(diǎn)和接收節(jié)點(diǎn)現(xiàn)在開始傳送錯(cuò)誤幀。它是6個(gè)顯性位(48微秒)。
傳送錯(cuò)誤幀的節(jié)點(diǎn)現(xiàn)在等待8個(gè)隱性位。但是,因?yàn)樯仙甭什粚?duì),第一個(gè)位被誤解。節(jié)點(diǎn)將認(rèn)為這是另一個(gè)節(jié)點(diǎn)在傳送錯(cuò)誤幀,所以將忽略它。
當(dāng)總線回到隱性電平時(shí),所有節(jié)點(diǎn)等待8位。
然后是3個(gè)隱性位的間歇。
3+9 = 12個(gè)位 = 96微秒(如圖中所示)。
然后,傳送節(jié)點(diǎn)重新嘗試并得到相同的結(jié)果。一段時(shí)間以后,傳送節(jié)點(diǎn)進(jìn)入錯(cuò)誤被動(dòng)型狀態(tài),并將如前所述那樣運(yùn)行。
這里是另一幅圖片。在此設(shè)置中,CAN總線上只有一個(gè)節(jié)點(diǎn)(正確端接)。該節(jié)點(diǎn)試圖傳送一條報(bào)文,但是沒有其它節(jié)點(diǎn)在偵聽。
那么,會(huì)發(fā)生什么情況?
首先,傳送節(jié)點(diǎn)發(fā)送整個(gè)報(bào)文。
傳送節(jié)點(diǎn)期望在ACK時(shí)隙中填充一個(gè)顯性電平。但是,因?yàn)闆]有其它節(jié)點(diǎn)在偵聽,沒有任何ACK到達(dá),所以傳送節(jié)點(diǎn)檢測(cè)到一個(gè)應(yīng)答錯(cuò)誤。
然后傳送器傳送一個(gè)被動(dòng)型錯(cuò)誤標(biāo)志(上圖中,嘗試發(fā)送了幾秒鐘,所以不再是錯(cuò)誤主動(dòng)型,而是被動(dòng)型)。
被動(dòng)型錯(cuò)誤標(biāo)志后面跟隨一個(gè)錯(cuò)誤定界符和間歇。
因?yàn)檫@個(gè)節(jié)點(diǎn)嘗試發(fā)送一個(gè)報(bào)文但是操作失敗,它必須再等待8位才能開始新的傳送。這種情況在CAN規(guī)范中稱為“掛起傳送”。
傳送節(jié)點(diǎn)還必須將其傳送錯(cuò)誤計(jì)數(shù)加8。但是,這是CAN規(guī)范中的特殊情況,只有當(dāng)傳送節(jié)點(diǎn)是錯(cuò)誤主動(dòng)型時(shí)才會(huì)發(fā)生。當(dāng)傳送節(jié)點(diǎn)進(jìn)入錯(cuò)誤被動(dòng)型時(shí),它不會(huì)增加其傳送節(jié)點(diǎn)錯(cuò)誤計(jì)數(shù)(這種情況中),而是會(huì)不斷重試傳送。
所以,上圖表示,一條報(bào)文被傳送,然后短暫停頓(時(shí)間為錯(cuò)誤標(biāo)志、錯(cuò)誤定界符、間歇和掛起傳送的總和)。然后報(bào)文被不斷重傳……
CAN連接器
9針DSUB
CiA推薦使用這種連接器布局,是事實(shí)上的工業(yè)標(biāo)準(zhǔn)。
?
1 | – | 保留位 |
2 | CAN_L(CAN低位) | CAN_L總線線路(顯性低位) |
3 | CAN_GND(CAN接地) | CAN接地 |
4 | – | 保留位 |
5 | CAN_SHLD(CAN屏蔽) | 可選 CAN屏蔽 |
6 | GND(接地) | 可選 CAN接地 |
7 | CAN_H(CAN高位) | CAN_H總線線路(顯性高位) |
8 | – | 保留位(錯(cuò)誤行) |
9 | CAN_V+(CAN電源) | 可選 電源 |
KVASER用戶:請(qǐng)注意,文檔“LAPcan硬件指南”中闡述了如何在KVASER DRVcan驅(qū)動(dòng)器線纜上使用這些引腳,可以在此該文檔。
如果如果供電,電壓范圍應(yīng)該為+7至+13 V,額定電流為100 mA。模塊提供一個(gè)公接頭,內(nèi)部必須連接引腳3和6。
引腳編號(hào)適用于接頭側(cè)視圖的公接頭或焊接側(cè)視圖的母接頭。為了方便記住引腳編號(hào),可留意CAN_LOW的引腳號(hào)小,而CAN_HIGH的引腳號(hào)大。
5針迷你C型接頭
DeviceNet和SDS都使用這種接頭,并且這兩種協(xié)議碰巧兼容。
?
引腳 | 功能 | DeviceNet顏色 |
1 | 信號(hào)輸出 | 無(wú)顏色 |
2 | V+ | 紅色 |
3 | V- | 黑色 |
4 | CAN_H | 白色 |
5 | CAN_L | 藍(lán)色 |
模塊含公接頭。輸入電壓為24V+/-1%。
注意:在DeviceNet規(guī)范版本1.x中,圖9.13中母接頭的編號(hào)順序錯(cuò)誤。規(guī)范2.0及后續(xù)版本的編號(hào)順序正確。
6針德馳DT04-6P
CANHUG建議用在移動(dòng)液壓應(yīng)用場(chǎng)合中。
模塊端為公接頭,總線端為母接頭。對(duì)于輸入電壓,目前沒有建議的值。
?
引腳 | 功能 | 建議的線纜顏色 |
1 | 電源負(fù)極 | 黑色 |
2 | CAN_H | 白色 |
3 | 可選 – 信號(hào)接地 | 黃色 |
4 | 可選 – 啟動(dòng) | 灰色 |
5 | 電源正極 | 紅色 |
6 | CAN_L | 藍(lán)色 |
CAN位時(shí)序
位布局
出于時(shí)序目的,CAN總線上的每個(gè)位都劃分成至少4個(gè)時(shí)間份額。時(shí)間份額邏輯上劃分成四個(gè)組或段-
同步段
傳播段
相位段1
相位段2
以下是CAN數(shù)據(jù)位的圖片:
輔助工具
位時(shí)序計(jì)算器
指定輸入頻率和總線速度計(jì)算所有可能的CAN總線參數(shù)集
同步段始終是一個(gè)時(shí)間份額長(zhǎng),用于時(shí)鐘同步。總線上的數(shù)據(jù)改變時(shí),預(yù)計(jì)會(huì)出現(xiàn)一個(gè)位邊沿。
傳播段用來(lái)補(bǔ)償總線線路中的延遲。
如有必要,相位段可以縮短(相位段1)或延長(zhǎng)(相位段2),以保持時(shí)鐘同步。
在相位段1和相位段2之間的邊沿上對(duì)總線電平進(jìn)行采樣。
大部分CAN控制器還提供選項(xiàng)可以在一個(gè)位期間進(jìn)行三次采樣。這種情況中,在采樣點(diǎn)之前的兩個(gè)時(shí)間份額的邊沿上進(jìn)行采樣,擇多譯碼(至少82527是這樣)。
時(shí)鐘同步
為了調(diào)整片上總線時(shí)鐘,CAN控制器可以將位的長(zhǎng)度縮短或延長(zhǎng)整數(shù)倍個(gè)時(shí)間份額。這些位時(shí)間調(diào)整的最大值稱為同步跳變寬度(SJW)。
硬同步在起始位從隱性到顯性轉(zhuǎn)換時(shí)產(chǎn)生。位時(shí)間從該邊沿重新開始。
重新同步是在報(bào)文的同步段中不發(fā)生位邊沿時(shí)產(chǎn)生。一個(gè)相位段被縮短或延長(zhǎng),其縮短值或延長(zhǎng)值取決于信號(hào)中的相位誤差。可以使用的最大值由同步跳變寬度參數(shù)決定。
位時(shí)序寄存器計(jì)算
大部分CAN控制器允許程序員使用下列參數(shù)設(shè)置位時(shí)序:
時(shí)鐘預(yù)分頻器值
采樣點(diǎn)前的時(shí)間份額數(shù)
采樣點(diǎn)后的時(shí)間份額數(shù)
同步跳變寬度(SJW)中的時(shí)間份額數(shù)
通常為此提供兩個(gè)寄存器:btr0和btr1。但是,不同控制器之間略有差異,因此請(qǐng)仔細(xì)閱讀數(shù)據(jù)表。
恩智浦(恩飛公司)82c200和SJA1000的寄存器布局如下:
?
? | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
btr0 | SJW1 | SJW0 | BRP5 | BRP4 | BRP3 | BRP2 | BRP1 | BRP0 |
btr1 | SAM | TSEG22 | TSEG21 | TSEG20 | TSEG13 | TSEG12 | TSEG11 | TSEG10 |
BRP0..BRP5設(shè)置時(shí)鐘預(yù)分頻器值
SJW0..SJW1設(shè)置SJW的長(zhǎng)度
TSEG10..TSEG13設(shè)置采樣點(diǎn)前的時(shí)間份額數(shù)(不包含起始位)
TSEG20..TSEG22設(shè)置采樣點(diǎn)后的時(shí)間份額數(shù)
如果要獲取三個(gè)樣本,則SAM設(shè)置為1,如果一個(gè)樣本就已足夠,則設(shè)置為0。
注意:這些參數(shù)的實(shí)際值比寫入寄存器的值大1。
示例:如果提供給SJA1000的振蕩器信號(hào)是16MHz,我們想要250kbps的比特率,采樣點(diǎn)接近整個(gè)位的62%,以及SJW為2個(gè)時(shí)間份額,那么我們可以設(shè)置 –
BRP = 4,指定時(shí)間份額長(zhǎng)度為2 * 4 / 16000000 s = 500納秒,以及
TSEG1 = 5,指定采樣點(diǎn)之前有5個(gè)時(shí)間份額,以及
TSEG2 = 3,指定采樣點(diǎn)之后有3個(gè)時(shí)間份額。
這樣,每個(gè)位都將包含5 + 3 = 8個(gè)時(shí)間份額,最終的比特率為1 / (8 * 500 ns) = 250 kbps。寄存器值應(yīng)該為
?
btr0 = |
(SJW – 1) * 64 + (BRP -1) = (2-1)*64 + (4-1) = 67 = 0×43 |
btr1 = |
SAM * 128 + (TSEG2 – 1)* 16 + (TSEG1 – 1) = 0*128 + (3-1)*16 + (4-1) =?(“4″ 因?yàn)椴话鹗嘉? 35 = 0×23 |
采樣點(diǎn)為位的5/8=62.5%。
CAN錯(cuò)誤處理
CAN怎樣處理錯(cuò)誤
錯(cuò)誤處理內(nèi)建在CAN協(xié)議中,對(duì)CAN系統(tǒng)的運(yùn)行十分重要。錯(cuò)誤處理的目標(biāo)是檢測(cè)CAN總線上出現(xiàn)的報(bào)文中的錯(cuò)誤,從而傳送器可以重傳出錯(cuò)的報(bào)文。總線上的每個(gè)CAN控制器都會(huì)嘗試檢測(cè)報(bào)文中的錯(cuò)誤。如果發(fā)現(xiàn)錯(cuò)誤,發(fā)現(xiàn)節(jié)點(diǎn)將傳送一個(gè)錯(cuò)誤標(biāo)志,從而中斷總線通信。其它節(jié)點(diǎn)將檢測(cè)錯(cuò)誤標(biāo)志導(dǎo)致的錯(cuò)誤(如果它們尚未檢測(cè)到初始錯(cuò)誤)并采取合適的措施(例如丟棄當(dāng)前報(bào)文)。
每個(gè)節(jié)點(diǎn)維護(hù)兩個(gè)錯(cuò)誤計(jì)數(shù)器:傳送錯(cuò)誤計(jì)數(shù)器和接收錯(cuò)誤計(jì)數(shù)器。有幾個(gè)規(guī)則規(guī)定這些計(jì)數(shù)器怎樣增加和/或減少計(jì)數(shù)。總的來(lái)講,檢測(cè)到故障的傳送器增加其傳送錯(cuò)誤計(jì)數(shù)器比偵聽節(jié)點(diǎn)增加其接收錯(cuò)誤計(jì)數(shù)器要快。這是因?yàn)椋苡锌赡苁莻魉推靼l(fā)生了故障!當(dāng)任何錯(cuò)誤計(jì)數(shù)器增加到超過(guò)某個(gè)值時(shí),節(jié)點(diǎn)將首先進(jìn)入“錯(cuò)誤被動(dòng)”,也就是說(shuō),它在檢測(cè)到錯(cuò)誤時(shí)不會(huì)積極地阻止總線通信,然后“離開總線”,這意味著節(jié)點(diǎn)根本不參與總線通信。
使用錯(cuò)誤計(jì)數(shù)器,CAN節(jié)點(diǎn)不但可以檢測(cè)故障,而且可以執(zhí)行錯(cuò)誤限制。
錯(cuò)誤檢測(cè)機(jī)制
CAN協(xié)議定義了五種以上不同的方法來(lái)檢測(cè)錯(cuò)誤。其中兩種工作在位層次,另外三種工作在報(bào)文層次。
位監(jiān)視
位填充
幀檢查
應(yīng)答檢查
循環(huán)冗余檢查
1. 位監(jiān)視
CAN總線上的每個(gè)傳送器都會(huì)監(jiān)視(也就是回讀)傳送的信號(hào)電平。如果真正讀到的位電平與傳送的位電平不同,會(huì)發(fā)出信號(hào)指示位錯(cuò)誤(仲裁過(guò)程中不會(huì)發(fā)出位錯(cuò)誤)。
2. 位填充
節(jié)點(diǎn)連續(xù)發(fā)送五個(gè)具有相同電平的位后,將在發(fā)送出去的位流中加上第六個(gè)相反電平的位。接收方將刪除這個(gè)額外的位。這樣做是為了避免總線上出現(xiàn)過(guò)度的直流電成分,但它同時(shí)也給予了接收方檢測(cè)錯(cuò)誤的額外機(jī)會(huì):如果總線上出現(xiàn)五個(gè)以上相同電平的連續(xù)位,會(huì)發(fā)出信號(hào)指示填充錯(cuò)誤。
3. 幀檢查
CAN報(bào)文的一些部分具有固定的格式,也就是說(shuō),標(biāo)準(zhǔn)明確定義了何種電平和何時(shí)出現(xiàn)這種電平(CRC定界符、ACK定界符、幀結(jié)束以及間歇,但是間歇還有一些另外的特殊錯(cuò)誤檢查規(guī)則)。如果一個(gè)CAN控制器在這些固定字段中的一個(gè)中檢測(cè)到無(wú)效值,將發(fā)出組成錯(cuò)誤。
4. 應(yīng)答檢查
總線上正確接收?qǐng)?bào)文的所有節(jié)點(diǎn)(不管這些節(jié)點(diǎn)是否對(duì)報(bào)文內(nèi)容“感興趣”)預(yù)期將在報(bào)文中所謂的應(yīng)答時(shí)隙中發(fā)送一個(gè)顯性電平。這是,發(fā)送方將發(fā)送一個(gè)隱性電平。如果發(fā)送方無(wú)法在應(yīng)答時(shí)隙中檢測(cè)到顯性電平,會(huì)發(fā)出應(yīng)答錯(cuò)誤的信號(hào)。
5. 循環(huán)冗余檢查
每個(gè)報(bào)文都包含一個(gè)15位的循環(huán)冗余校驗(yàn)和(CRC)。節(jié)點(diǎn)如果在報(bào)文中檢測(cè)到與自己計(jì)算所得不同的CRC,將發(fā)出CRC錯(cuò)誤的信號(hào)。
錯(cuò)誤限制機(jī)制
總線上的每個(gè)CAN控制器都將在每個(gè)報(bào)文中嘗試檢測(cè)以上列出的錯(cuò)誤。如果發(fā)現(xiàn)錯(cuò)誤,發(fā)現(xiàn)節(jié)點(diǎn)將發(fā)送一個(gè)錯(cuò)誤標(biāo)志,從而停止總線通信。其它節(jié)點(diǎn)將檢測(cè)到由錯(cuò)誤標(biāo)志引發(fā)的錯(cuò)誤(如果它們尚未檢測(cè)到原始錯(cuò)誤)并采取恰當(dāng)?shù)拇胧ㄒ簿褪莵G棄當(dāng)前報(bào)文)。
每個(gè)節(jié)點(diǎn)維護(hù)兩個(gè)錯(cuò)誤計(jì)數(shù)器:傳送錯(cuò)誤計(jì)數(shù)器和接收錯(cuò)誤計(jì)數(shù)器。有幾個(gè)規(guī)則規(guī)定這些計(jì)數(shù)器怎樣增加和/或減少計(jì)數(shù)。總的來(lái)講,檢測(cè)到故障的傳送器增加其傳送錯(cuò)誤計(jì)數(shù)器比偵聽節(jié)點(diǎn)增加其接收錯(cuò)誤計(jì)數(shù)器要快。這是因?yàn)楹苡锌赡苁莻魉推靼l(fā)生了故障!
節(jié)點(diǎn)開始時(shí)處于主動(dòng)錯(cuò)誤模式。當(dāng)兩個(gè)錯(cuò)誤計(jì)數(shù)器中的任何一個(gè)的計(jì)數(shù)超過(guò)127時(shí),當(dāng)兩個(gè)錯(cuò)誤計(jì)數(shù)器中的任何一個(gè)計(jì)數(shù)超過(guò)127時(shí),節(jié)點(diǎn)將進(jìn)入稱為被動(dòng)錯(cuò)誤的狀態(tài)。當(dāng)傳送錯(cuò)誤計(jì)數(shù)器達(dá)到255以上時(shí),節(jié)點(diǎn)將進(jìn)入總線離線狀態(tài)。
主動(dòng)錯(cuò)誤節(jié)點(diǎn)將在檢測(cè)到錯(cuò)誤時(shí)發(fā)送主動(dòng)錯(cuò)誤標(biāo)志。
被動(dòng)錯(cuò)誤節(jié)點(diǎn)將在檢測(cè)到錯(cuò)誤時(shí)發(fā)送被動(dòng)錯(cuò)誤標(biāo)志。
總線離線節(jié)點(diǎn)不會(huì)在總線上傳送任何內(nèi)容。
增加和減少錯(cuò)誤計(jì)數(shù)器的規(guī)則略顯復(fù)雜,但是原理比較簡(jiǎn)單:傳送錯(cuò)誤的步進(jìn)為8個(gè)錯(cuò)誤點(diǎn)數(shù),而接收錯(cuò)誤的步進(jìn)為1個(gè)錯(cuò)誤點(diǎn)數(shù)。正確傳送和/或接收的報(bào)文會(huì)減小計(jì)數(shù)器值。
示例(稍加簡(jiǎn)化):假設(shè)總線上的節(jié)點(diǎn)A運(yùn)氣不好。不管什么時(shí)候A發(fā)送報(bào)文都發(fā)生失敗(由于種種原因)。每次失敗時(shí),它的傳送錯(cuò)誤計(jì)數(shù)器增加8并發(fā)送主動(dòng)錯(cuò)誤標(biāo)志。然后它將嘗試重傳報(bào)文,但是一直失敗。
當(dāng)傳送錯(cuò)誤計(jì)數(shù)器超過(guò)127時(shí)(也就是在16次嘗試之后),節(jié)點(diǎn)A進(jìn)入被動(dòng)錯(cuò)誤模式。區(qū)別在于,它現(xiàn)在將在總線上傳送被動(dòng)錯(cuò)誤標(biāo)志。被動(dòng)錯(cuò)誤標(biāo)志包含6個(gè)隱性位,不會(huì)影響其它的總線通信,所以其它節(jié)點(diǎn)不會(huì)偵聽到有關(guān)總線錯(cuò)誤的反饋。但是,A繼續(xù)增加其傳送錯(cuò)誤計(jì)數(shù)器。當(dāng)計(jì)數(shù)值超過(guò)255時(shí),節(jié)點(diǎn)A最終放棄傳送并進(jìn)入總線離線模式。
其它節(jié)點(diǎn)怎樣響應(yīng)節(jié)點(diǎn)A?對(duì)于A傳送的每個(gè)主動(dòng)錯(cuò)誤標(biāo)志,其它節(jié)點(diǎn)將為其接收錯(cuò)誤計(jì)數(shù)器增加1。當(dāng)A進(jìn)入總線離線狀態(tài)時(shí),其它節(jié)點(diǎn)的接收錯(cuò)誤計(jì)數(shù)器的計(jì)數(shù)大大低于錯(cuò)誤被動(dòng)的限制值(127)。每次正確收到一條報(bào)文,這個(gè)計(jì)數(shù)值將減1。但是,節(jié)點(diǎn)A將停留在總線離線狀態(tài)。
大部分CAN控制器將為兩種狀態(tài)提供狀態(tài)位(和相應(yīng)的中斷):
“錯(cuò)誤警告” – 一個(gè)或兩個(gè)錯(cuò)誤計(jì)數(shù)器的計(jì)數(shù)超過(guò)96
“總線離線”,如上所述。
一些控制器(但不是所有)還為被動(dòng)錯(cuò)誤狀態(tài)提供一個(gè)位。一些控制器還可以直接訪問(wèn)錯(cuò)誤計(jì)數(shù)器。
CAN控制器在發(fā)生錯(cuò)誤時(shí)自動(dòng)重傳報(bào)文的特性有時(shí)候會(huì)很煩人。市場(chǎng)上至少有一種控制器(飛利浦公司生產(chǎn)的SJA1000)允許對(duì)錯(cuò)誤處理完全人工控制。
總線故障模式
ISO 11898標(biāo)準(zhǔn)列出了CAN總線線纜的幾種故障模式:
CAN_H中斷
CAN_L中斷
CAN_H短路到電池電壓
CAN_L短路到接地
CAN_H短路到接地
CAN_L短路到電池電壓
CAN_L短路到CAN_H線路
CAN_H和CAN_L在同一個(gè)位置中斷
丟失到終端網(wǎng)絡(luò)的連接
對(duì)于故障1-6和9,建議減小S/N比率保持總線繼續(xù)工作。對(duì)于故障8,建議保持產(chǎn)生的子系統(tǒng)繼續(xù)工作。對(duì)于故障7,可以選擇減小S/N比率繼續(xù)工作。
實(shí)踐中,使用82C250類型收發(fā)器的CAN系統(tǒng)無(wú)法在發(fā)生故障1-7時(shí)繼續(xù)工作,在發(fā)生故障8-9時(shí)可能無(wú)法繼續(xù)工作。
但是,存在諸如TJA1053等容錯(cuò)能力強(qiáng)的驅(qū)動(dòng)程序可以處理所有故障。通常,獲得這種容錯(cuò)能力的代價(jià)是最大速度受到限制。對(duì)于TJA1053,最大速度是125kbps。
高層協(xié)議
CAN標(biāo)準(zhǔn)定義的是硬件(物理層 – 有幾種)和通信的基本層面(數(shù)據(jù)鏈路層)。CAN協(xié)議本身只規(guī)定如何使用共享的通信介質(zhì)將小型數(shù)據(jù)包從A點(diǎn)傳輸?shù)紹點(diǎn)。為了管理系統(tǒng)中的通信,需要一種高層協(xié)議(HLP)。
高層協(xié)議包括常見的標(biāo)準(zhǔn),例如J1939、CANopen和CCP/XCP等。
評(píng)論