CAN(ControllerAreaNetwork)總線,即控制器局域網總線,在工業控制、醫療電子、家用電器及傳感器領域都得到了廣泛的應用。目前國內外文獻中針對CAN總線協議分析的文章主要是針對CAN協議的幀結構以或位時序特性進行分析,如文獻鮮有從通信的角度對CAN總線協議進行分析,鮮有從工程應用的角度出發,對CAN總線的通信機制進行深入分析的文章。
1、CAN應用特性及結構構成
CAN總線協議具有兩個國際標準,分別是ISO11898和ISO11519。其中,IS011898是通信速率為125kbps~1Mbps的高速CAN通信標準,屬于閉環總線,總線最大長度為40m/1Mbps。ISO11519定義了通信速率為10~125kbps的低速CAN通信標準,屬于開環總線,最大長度為1km/40kbps。由于電氣特性限制,即總線分布電容和分布電阻對總線波形的影響,CAN總線上最大節點數目為110個。對于應用工程師,只需正確配置收發端的波特率和位參數即可實現收發節點的數據同步。通過CAN控制器硬件對報文的標示符濾波即可實現點對點、一點對多點及全局廣播等幾種方式傳送接收數據。同時,由于CAN報文采用短幀結構,并且每幀均包含CRC校驗部分,保證了數據出錯率極低。CAN總線在工程應用中結構構成如圖1所示。
系統實現中的CAN應用層、操作系統(在無操作系統的應用中以后臺程序實現)及驅動程序共同實現了ISO參考模型中的應用層功能。其中,CAN應用層定義ID分組、發送數據裝包、接收數據處理以及應用層總線安全監測;操作系統/后臺程序用于在CAN中斷到達后調度CAN驅動程序對數據進行處理;驅動程序包括初始化(控制器工作狀態設置、波特率設置、驗收濾波器配置)、收發驅動及異常處理程序。
對于傳輸介質層,需要根據環境干擾噪聲、總線長度等來確定。在強干擾噪聲的情況下必須采用屏蔽線;由于分布電容造成的總線波形失真及分布電阻造成的總線電平的衰減,總線長度需要考慮采用的傳輸介質的分布電阻和分布電容特性;同時,若采用高速總線還需通過實驗確定總線的匹配電阻值。
對于CAN控制器的實現,可以選用集成于系統主控芯片的CAN控制器實現,如恩智浦公司出品的LPC2000系列的微控制器,或者也可以選用分立元件的CAN控制器,如SJA1000。對于CAN收發器的實現,可以選用CTM1050、TJA1050等。若環境干擾噪聲較大,則需在控制器和收發器之間添加隔離芯片或采用集成了隔離功能的CAN收發器。值得一提的是,恩智浦公司新推出的LPC11C24微控制器芯片中不僅集成了CAN控制器,同時集成了CAN收發器功能,對于CAN總線系統的快速開發提供了良好的支持。另外,根據實際應用的總線長度及總線上的節點數目,還需考慮收發器芯片的發送和接收的延遲時間。
對于CAN驅動層和應用層,驅動程序包括CAN初始化(包括硬件使能、波特率設置、控制器工作模式設置及驗收濾波器ID表配置)、收/發驅動并向上層提供接口函數,其中需要說明的是驗收濾波器的ID表配置需要根據應用層對系統ID的分組來進行;CAN應用層根據總線上各節點之間的數據收發關系進行數據包的ID分組、發送數據裝包、接收數據處理及應用層總線安全監測等。另外,常用的CAN總線上層協議主要有CANOpen、DeviceNet以及iCAN等。
2、CAN總線同步機制分析
在進行通信過程中,需要解決的最重要的問題之一就是如何實現收發端數據的同步,即接收端可以正確接收和解析發送端發送的數據。CAN總線協議是一種異步串行通信協議,屬于基帶通信,其同步的實現源于高級數據鏈路控制協議(HDLC)。具體來說,CAN總線協議的同步是通過如下所述的3個方面來實現的。
2.1參數設定
通信雙方通過軟件設置相同的波特率、相同的相位調整段長度、相同的同步跳轉寬度,通過以上3個元素設置,定義了CAN總線傳輸過程中的位時間長度以及采樣點位置,位結構如圖2所示,圖中的CAN時鐘即是協議中定義的TQ時間,該時鐘是通過外部時鐘或者CPU外設時鐘分頻后得到的CAN控制器的基本時鐘信號,SS段對應于起始段,總線上的跳變沿應發生在此段時間內,TESG1對應于傳輸段和相位調整段1,TESG2對應于相位調整段2,對于高速總線,控制器在TESG1和TESG2之間對總線進行采樣判別。
2.2固定的幀結構
CAN協議中明確定義的固定的幀結構,便于CAN控制器和收發器對總線狀態進行監測,在CAN2.0協議規范中,分為標準幀和擴展幀兩種幀結構,兩者區別只在于仲裁域,標準幀采用11位標識符,而擴展幀有29位標識符,具體的標準幀、擴展幀幀結構如表1、表2所示。
2.3硬同步和再同步
2.3.1硬同步
所謂硬同步就是指在總線空閑期間(即總線電平表現為連續的隱性位),控制器一旦檢測到從隱性電平到顯性電平的跳變,就說明此時總線上有站點開始發送數據,則強制CAN控制器的位狀態計數器同步到圖2所示的SS段,同時位時鐘從此開始重新計數(CAN位時間由上層軟件設定)。硬同步用于幀的起始判定。
2.3.2再同步
在CAN總線協議中,再同步是基于位填充機制實現的。與HDLC協議類似,在CAN的幀結構中,從幀起始到CRC序列位為止,一旦檢測到5個連續相同極性的位,CAN控制器自動插入一個極性相反的位。再同步就是在數據傳輸過程中,CAN控制器通過檢測總線上的跳變沿與節點內部位時間的差異來調整相位調整段1和相位調整段2,調整大小是由同步跳轉寬度編程設定的,調整大小單位為TQ。具體調整規則是,在傳輸過程中,由CAN控制器檢測到的總線上的跳變沿如果位于節點內部的SS位時間段內,則不需要調整;若跳變沿位于TESG1段,說明總線上的位時間相對于節點的位時間有延遲,則CAN控制器延長節點的TESG1位時間段,若延遲時間值(T0值)大于同步跳轉寬度,延長時間為同步跳轉寬度值,否則節點的CAN控制器延長其與總線位時間的差值;若跳變沿位于TESG2段,說明總線上的位時間相對于節點的位時間有超前,則CAN控制器減少節點的TESG2位時間段,具體調整規則與TESG1段的調整規則相似。
3、CAN總線地址機制分析
不同于工業以太網、RS485等總線,CAN總線是通過數據包ID而非節點地址來收發數據的,即CAN總線上的節點沒有固定的地址,取而代之的是每個節點都需要通過軟件配置一個ID表(在該節點的驗收濾波器單元中),如果總線上的數據包的ID號在該節點的ID表中存在,則數據包成功通過該節點的驗收濾波器單元的驗收,并將被送到上層軟件處理單元并進行相應的數據處理,否則,該數據包被丟棄。舉例來說,若總線上的節點A想發送數據包到節點B,則該數據包的ID號必須位于節點B的ID表中,同理,若節點A想廣播數據包到總線上,則該數據包的ID號必須位于總線上所有其它節點的ID表中。如前所述,ID表是通過軟件進行配置的,但驗收濾波功能卻是通過CAN控制器中的驗收濾波器這個硬件單元進行的,所以從速度上來說,驗收造成的延遲很小。另外,采用這種地址機制的優點還在于是采用此總線的系統具有很高的靈活性,即新加入或刪除的節點不會影響系統原有節點間的通信。
下面將以恩智浦公司的LPC2478芯片集成的CAN控制器為例,具體說明CAN總線系統的地址配置方法。如圖3所示,首先根據總線上所需傳輸的數據包進行分類,即對數據包ID和相應的節點進行規劃,例如在我們的系統中主要有如下幾類數據包:查詢數據包、控制命令數據包(包括動作和參數數據包)、報警數據包及反饋參數數據包,對應的節點特性是查詢數據包和控制命令數據包主要是主站發送給各從站單元,而報警數據包和反饋參數數據包主要由從站各節點單元發送給主站單元節點。然后,根據ID分類情況配置各節點的驗收濾波器單元,具體的配置方法是:首先根據節點特點配置相應的驗收濾波器工作模式:關閉模式(不接收總線報文)、旁路模式(接收總線上所有的報文)和正常工作模式(硬件濾波)。若配置為正常工作模式時,接著就需配置相應的驗收濾波器表(ID表),即將該節點需要接收的數據包ID號的填充到該節點控制器相應的ID表區域中,而這樣就完成了CAN總線節點的地址分配工作。一般而言,ID表分為如下4個區域:明確的標準幀標識符區、標準幀組格式標識符區、明確的擴展幀格式標識符區以及擴展幀組格式標識符區。其中,明確格式是單個獨立的ID標識符,而組格式區時連續編號的ID標識符。
4、CAN總線仲裁機制分析
總線仲裁,是指當總線上有多個節點在同時發送數據時總線協議的處理方法。CAN總線采用的是無破壞性的仲裁機制,即若總線上的多個節點同時發送數據,具有高優先級數據包的節點仲裁勝出,可以繼續發送數據,而其它仲裁失敗的節點將退出發送狀態而轉為接收節點,與其他總線仲裁機制(例如局域網的CSMA/CD)相比,其不僅不會破壞已發送的數據,并且不會造成發送數據的延遲,是CAN總線與其他總線相比的優點之一,其主要是通過CAN總線所具備的如下兩個特點實現:1)CAN總線的線與特性,即當總線上多個節點同時發送顯性和隱形電平時,總線電平表現為顯性電平。2)CAN控制器即使在發送數據的同時也在監控總線電平狀態,即當在仲裁時,當控制器發送隱性電平但檢測到總線為顯性電平時,節點仲裁失敗,轉為接收節點。
5、CAN總線魯棒性分析
CAN總線的魯棒性是通過其對節點和總線數據包安全性的實時檢測與監控來實現的,另外,CAN總線通過采用的差分信號對外界干擾信號有較強的抑制作用。具體論述如下。
5.1實時監控總線波形
CAN控制器不僅在上電后會一直監測總線上其它節點發送的的數據包,并且在自己發送數據包得過程中也在實時監測自己發送的數據,一旦檢測到位錯誤、填充錯誤、CRC錯誤、格式錯誤或者應答錯誤,該節點就會根據其所處的錯誤狀態(錯誤激活狀態或者錯誤認可狀態)發送相應的錯誤標志,實際上筆者認為只有錯誤激活站點發送激活錯誤標識(即6個連續的顯性位后接8個隱性位的錯誤標識界定符)會對總線及總線上的節點產生影響,而處于錯誤認可狀態的節點發送的錯誤認可標識實際對總線沒有任何影響(發送的6個隱性電平與總線空閑狀態是一致的)。
5.2實時監控節點狀態判定節點權限
節點會根據總線上數據包的情況實時改變自身的狀態(錯誤激活、錯誤認可或者總線關閉狀態),處于錯誤激活的節點正常參與總線通信,錯誤認可的單元參與總線通信,但是在其啟動下一個發送之前需要發送8個額外的隱性位。對于總線上發送的數據包,如表1所示,15位的CRC序列實現了對起始位、仲裁域、控制域以及數據域(如果有的話)的監控,接收站點在接收到數據后會根據與發送節點相同的算法生成該數據包的CRC序列,并與接收到的CRC序列做比較,如果不同則說明有錯,接收節點不會對該數據包做出應答,發送節點就會檢測到應答錯誤并重新發送該數據包??傊?,CAN總線通過數據鏈路層以及物理層就已經實現了較高的總線的數據安全性和總線的穩定性。
6、結論
文中以ISO11898協議規范為基礎,從通信的角度詳細分析了CAN總線的節點同步機制、節點地址機制、總線仲裁機制(即總線沖突解決機制)及總線魯棒性的實現原理和基礎,同時簡要介紹了CAN總線的應用特性以及將其應用于實際系統中時總線的系統分層結構,對深入理解CAN總線協議和將CAN總線應用到具體工程項目中,以及研究或開發特定要求的總線系統具有指導意義。
責任編輯人:CC
評論
查看更多