CAN通信基础知识
CAN是Controller Area Network 的縮寫(以下稱為CAN),是ISO國際標準化的串行通信協議。由德國電氣商博世公司在1986 年率先提出。此后,CAN 通過ISO11898 及ISO11519 進行了標準化?,F在在歐洲已是汽車網絡的標準協議。
CAN協議經過ISO標準化后有兩個標準:ISO11898標準和ISO11519-2標準。其中ISO11898是針對通信速率為125Kbps~1Mbps的高速通信標準,而ISO11519-2是針對通信速率為125Kbps以下的低速通信標準。
CAN具有很高的可靠性,廣泛應用于:汽車電子、工業自動化、船舶、醫療設備、工業設備等方面。
CAN協議的特點:①多主控制??偩€空閑時,所有單元都可發送消息,而兩個以上的單元同時開始發送消息時,根據標識符(ID,非地址)決定優先級。兩個以上的單元同時開始發送消息時,對各消息ID 的每個位進行逐個仲裁比較。仲裁獲勝(優先級最高)的單元可繼續發送消息,仲裁失利的單元則立刻停止發送而進行接收工作。
②系統柔軟性。連接總線的單元,沒有類似“地址”的信息,因此,在總線上添加單元時,已連接的其他單元的軟硬件和應用層都不需要做改變。
③速度快,距離遠。最高1Mbps(距離<40M),最遠可達10KM(速率<5Kbps)。
④具有錯誤檢測、錯誤通知和錯誤恢復功能。所有單元都可以檢測錯誤(錯誤檢測功能),檢測出錯誤的單元會立即同時通知其他所有單元(錯誤通知功能),正在發送消息的單元一旦檢測出錯誤,會強制結束當前的發送。強制結束發送的單元會不斷反復地重新發送此消息直到成功發送為止(錯誤恢復功能)。⑤故障封閉功能。CAN 可以判斷出錯誤的類型是總線上暫時的數據錯誤(如外部噪聲等)還是持續的數據錯誤(如單元內部故障、驅動器故障、斷線等)。由此功能,當總線上發生持續數據錯誤時,可將引起此故障的單元從總線上隔離出去。
⑥連接節點多。CAN 總線是可同時連接多個單元的總線。可連接的單元總數理論上是沒有限制的。但實際上可連接的單元數受總線上的時間延遲及電氣負載的限制。降低通信速度,可連接的單元數增加;提高通信速度,則可連接的單元數減少。
正是因為CAN協議的這些特點,使得CAN特別適合工業過程監控設備的互連,因此,越來越受到工業界的重視,并已公認為最有前途的現場總線之一。 我們使用ISO11898標準,物理層特征如圖所示:CAN 控制器根據CAN_L和CAN_H上的電位差來判斷總線電平。總線電平分為顯性電平和隱性電平,二者必居其一。發送方通過使總線電平發生變化,將消息發送給接收方。
顯性電平對應邏輯:0 :CAN_H和CAN_L之差為2V左右。
隱性電平對應邏輯:1 :CAN_H和CAN_L之差為0V。?
顯性電平具有優先權,只要有一個單元輸出顯性電平,總線上即為顯性電平。而隱形電平則具有包容的意味,只有所有的單元都輸出隱性電平,總線上才為隱性電平(顯性電平比隱性電平更強)。另外,在CAN總線的起止端都有一個120Ω的終端電阻,來做阻抗匹配,以減少回波反射。 CAN通信是以以下5種類型的幀進行的:其中,數據幀和遙控幀有標準格式和擴展格式兩種格式。標準格式有11 個位的標識符(ID),擴展格式有29 個位的ID 。
數據幀由7個段組成:①幀起始。表示數據幀開始的段。
②仲裁段。表示該幀優先級的段。
③控制段。表示數據的字節數及保留位的段。
④數據段。數據的內容,一幀可發送0~8個字節的數據。
⑤CRC段。檢查幀的傳輸錯誤的段。
⑥ACK段。表示確認正常接收的段。
⑦幀結束。表示數據幀結束的段。
數據幀構成
圖中D表示顯性電平,R表示隱形電平(下同)。
1,幀起始。標準幀和擴展幀都是由1個位的顯性電平表示幀起始。 2,仲裁段。表示數據優先級的段,標準幀和擴展幀格式在本段有所區別,如圖所示:
ID:高位在前,低位在后。
基本ID,禁止高7位都為隱性,即不能:ID=1111111XXXX。
RTR,遠程請求位。0,數據幀;1, 遠程幀;
SRR,替代遠程請求位。設置為1(隱性電平);
IDE,標識符選擇位。0,標準標識符;1,擴展標識符;
3,控制段。由6個位構成,表示數據段的字節數。標準幀和擴展幀的控制段稍有不同,如圖所示:
r0,r1:保留位。必須以顯現電平發送,但是接收可以是隱性電平。
DLC:數據長度碼。0~8,表示發送/接收的數據長度(字節)。
IDE,標識符選擇位。0,標準標識符;1,擴展標識符;
4,數據段。該段可包含0~8個字節的數據,從最高位(MSB)開始輸出。標準幀和擴展幀在這個段的格式完全一樣:?
5,CRC段。該段用于檢查幀傳輸錯誤。由15個位的CRC順序和1個位的CRC界定符(用于分隔的位)組成,標準幀和擴展幀在這個段的格式也是相同的:?
CRC的值計算范圍包括:幀起始、仲裁段、控制段、數據段。接收方以同樣的算法計算 CRC 值并進行比較,不一致時會通報錯誤。?
6,ACK段。此段用來確認是否正常接收。由ACK槽(ACK Slot)和ACK界定符2個位組成。標準幀和擴展幀在這個段的格式也是相同的:
發送單元ACK段:發送2個隱性位。
接收單元ACK段:接收到正確消息的單元,在ACK槽發送顯性位,通知發送單元,正常接收結束。稱之為發送ACK/返回ACK。
注意:發送 ACK 的是既不處于總線關閉態也不處于休眠態的所有接收單元中,接收到正常消息的單元(發送單元不發送ACK)。正常消息是指:不含填充錯誤、格式錯誤、CRC 錯誤的消息。
7,幀結束。由7個位的隱性位組成。標準幀和擴展幀在這個段格式完全一樣。
同時多個單元發送數據時,總線仲裁過程:
規律:1,總線空閑時,最先發送的單元獲得發送優先權,一但發送,其他單元無法搶占。2,如果有多個單元同時發送,則連續輸出顯性電平多的單元,具有較高優先級。
從ID開始比較,如果ID相同,還可能會比較RTR和SRR等位。
位速率。由發送單元在非同步的情況下發送的每秒鐘的位數稱為位速率。一個位一般可以分為如下四段:?
同步段(SS) 傳播時間段(PTS) 相位緩沖段1(PBS1) 相位緩沖段2(PBS2)這些段又由可稱為 Time Quantum(以下稱為Tq)的最小時間單位構成。
1 位分為4 個段,每個段又由若干個Tq 構成,這稱為位時序。
位時間=1/波特率,因此,知道位時間,我們就可以知道波特率。
1 位由多少個Tq 構成、每個段又由多少個Tq 構成等,可以任意設定位時序。通過設定位時序,多個單元可同時采樣,也可任意設定采樣點。
位時序各段的作用和 Tq 數如下表:
一個位的構成:?
圖中采樣時間加大或減少量的最大值就是SJW
總結
- 上一篇: 轮回 第二章 冷傲天
- 下一篇: 函数参数三种传递方式的区别