轉自正點原子ppt
CAN是Controller Area Network 的縮寫(以下稱爲CAN),是ISO國際標準化的串行通信協議。由德國電氣商博世公司在1986 年率先提出。此後,CAN 通過ISO11898 及ISO11519 進行了標準化。現在在歐洲已是汽車網絡的標準協議。
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種類型的幀進行的:
幀類型 |
幀用途 |
數據幀 |
用於發送單元向接收單元傳送數據的幀 |
遙控幀 |
用於接收單元向具有相同 ID 的發送單元請求數據的幀 |
錯誤幀 |
用於當檢測出錯誤時向其它單元通知錯誤的幀 |
過載幀 |
用於接收單元通知其尚未做好接收準備的幀 |
間隔幀 |
用於將數據幀及遙控幀與前面的幀分離開來的幀 |
其中,數據幀和遙控幀有標準格式和擴展格式兩種格式。
標準格式有11 個位的標識符(ID),擴展格式有29 個位的ID 。
其中,最常用,也是最複雜的是數據幀,我們接下來給大家重點介紹數據幀的格式,其他幀格式,請參考《can入門教程.pdf》
數據幀由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等位。
位速率。由發送單元在非同步的情況下發送的每秒鐘的位數稱爲位速率。一個位一般可以分爲如下四段:
l同步段(SS)
l傳播時間段(PTS)
l相位緩衝段1(PBS1)
l相位緩衝段2(PBS2)
這些段又由可稱爲 Time Quantum(以下稱爲Tq)的最小時間單位構成。
1 位分爲4 個段,每個段又由若干個Tq 構成,這稱爲位時序。
位時間=1/波特率,因此,知道位時間,我們就可以知道波特率。
1 位由多少個Tq 構成、每個段又由多少個Tq 構成等,可以任意設定位時序。通過設定位時序,多個單元可同時採樣,也可任意設定採樣點。
位時序各段的作用和 Tq 數如下表:
一個位的構成:
圖中採樣時間加大或減少量的最大值就是SJW
重點掌握四個知識點:
1,標識符(ID)
2,數據幀的構成
3,總線仲裁
4,位時序