CAN匯流排筆記

2022-06-12 05:24:08 字數 3895 閱讀 7008

在沒有can匯流排之前,所有外設和控制器都是單線連線,導致線布局和數量巨大,錯綜複雜。

匯流排的含義就是所有資訊都在這根線上傳輸,當然,can匯流排是兩根。

can是controller area network 的縮寫(以下稱為can),是iso國際標準化的序列通訊協議。由德國電氣商博世公司在1986 年率先提出。此後,can 通過iso11898 及iso11519 進行了標準化。現在在歐洲已是汽車網路的標準協議。

can協議經過iso標準化後有兩個標準:iso11898標準和iso11519-2標準。其中iso11898是針對通訊速率為125kbps~1mbps的高速通訊標準,而iso11519-2是針對通訊速率為125kbps以下的低速通訊標準。

can具有很高的可靠性,廣泛應用於:汽車電子、工業自動化、船舶、醫療裝置、工業裝置等方面。

can節點:掛載在can匯流排上的乙個單元,如abs

can message:can節點之間的通訊方式,由多條signal組成。

can signal:一條資訊。

資料長度**又稱dlc(date length code),用於規定資料場的位元組數,dlc的編碼規則如表所示;最大為8位元組,最小為0位元組;

首先每個 ecu是乙個網路節點,每個網路節點可收發一些 message,每個message 由can signals構成。每個 can signal利用乙個或多個連續的2進製位來表示承載的資訊。下面就來舉個列子簡要介紹如何理解 can signal的定義。

intel格式編碼:訊號的低位(lsb)將被放在低位元組(lsb)的低位。訊號的起始位就是低位元組的低位,從低位元組向高位元組去排布訊號。

motorola格式編碼 :訊號的低位(lsb)將被放在高位元組(msb)的低位。這樣,訊號的起始位就是高位元組的低位,從高位元組向低位元組去排布訊號。

candb ++使用說明

①,多主控制。匯流排空閒時,所有單元都可傳送訊息,而兩個以上的單元同時開始傳送訊息時,根據識別符號(id,非位址)決定優先順序。兩個以上的單元同時開始傳送訊息時,對各訊息id 的每個位進行逐個仲裁比較。仲裁獲勝(優先順序最高)的單元可繼續傳送訊息,仲裁失利的單元則立刻停止傳送而進行接收工作。

②,系統柔軟性。連線匯流排的單元,沒有類似「位址」的資訊,因此,在匯流排上新增單元時,已連線的其他單元的軟硬體和應用層都不需要做改變。

③,速度快,距離遠。最高1mbps(距離<40m),最遠可達10km(速率<5kbps)。

④ ,具有錯誤檢測、錯誤通知和錯誤恢復功能。所有單元都可以檢測錯誤(錯誤檢測功能),檢測出錯誤的單元會立即同時通知其他所有單元(錯誤通知功能),正在傳送訊息的單元一旦檢測出錯誤,會強制結束當前的傳送。強制結束傳送的單元會不斷反覆地重新傳送此訊息直到成功傳送為止(錯誤恢復功能)。

⑤,故障封閉功能。can 可以判斷出錯誤的型別是匯流排上暫時的資料錯誤(如外部雜訊等)還是持續的資料錯誤(如單元內部故障、驅動器故障、斷線等)。由此功能,當匯流排上發生持續資料錯誤時,可將引起此故障的單元從匯流排上隔離出去。

⑥,連線節點多。can 匯流排是可同時連線多個單元的匯流排。可連線的單元總數理論上是沒有限制的。但實際上可連線的單元數受匯流排上的時間延遲及電氣負載的限制。降低通訊速度,可連線的單元數增加;提高通訊速度,則可連線的單元數減少。

正是因為can協議的這些特點,使得can特別適合工業過程監控裝置的互連,因此,越來越受到工業界的重視,並已公認為最有前途的現場匯流排之一。

資料幀由7個段組成:

①,幀起始。

表示資料幀開始的段。

②,仲裁段。

表示該幀優先順序的段。

③,控制段。

表示資料的位元組數及保留位的段。

④,資料段。

資料的內容,一幀可傳送0~8個位元組的資料。

⑤,crc段。

檢查幀的傳輸錯誤的段。

⑥,ack段。

表示確認正常接收的段。

⑦,幀結束。

表示資料幀結束的段。

①初始化模式(inrq=1,sleep=0),即初始化過程

②正常模式(inrq=0,sleep=0),即工作過程

③睡眠模式(sleep=1),即低功耗待機形式

①靜默模式( lbkm=0,silm=1 ),只收不發

②環迴模式( lbkm=1,silm=0 ),只發不收及自發自收

③環迴靜默模式(lbkm=1,silm=1),不發不收

篩選器可配置為:遮蔽位模式和識別符號列表模式。

識別符號=id=優先順序,id越小,優先順序越高.

can的識別符號是自己設定的,接收方自己篩選需要接受哪些識別符號

掩碼,一種遮蔽和篩選技術

id為期待識別符號,掩碼為必須匹配的位。即接收一組識別符號。

id為期待識別符號,掩碼和id一樣,所有位必須匹配,即接收的是乙個識別符號。

舉例

例:設定篩選器組0工作在:1個32位篩選器-識別符號遮蔽模式,然後設定can_f0r1=0xffff0000,can_f0r2=0xff00ff00。其中存放到can_f0r1的值就是期望收到的id,即(stid+extid+ide+rtr)最好是:0xffff0000。而0xff00ff00就是設定我們需要必須關心的id,表示收到的映像,其位[31:24]和位[15:8]這16個位的必須和can_f0r1中對應的位一模一樣,而另外的16個位則不關心,可以一樣,也可以不一樣,都認為是正確的id,即收到的映像必須是0xffxx00xx,才算是正確的(x表示不關心)。

程式選擇1個空置的郵箱(tme=1)->設定識別符號(id),資料長度和傳送資料->設定can_tixr的txrq位為1,請求傳送->郵箱**(等待成為最高優先順序)->預定傳送(等待匯流排空閒)->傳送->郵箱空置。

can接收流程為:

fifo空->收到有效報文->**_1(存入fifo的乙個郵箱,這個由硬體控制,我們不需要理會)->收到有效報文->**_2->收到有效報文->**_3->收到有效報文->溢位。

位速率由傳送單元在非同步的情況下傳送的每秒鐘的位數稱為位速率。乙個位一般可以分為如下四段:

-同步段(ss)

-傳播時間段(pts)

-相位緩衝段1(pbs1)

-相位緩衝段2(pbs2)

這些段又由可稱為 time quantum(以下稱為tq)的最小時間單位構成。

1 位分為4 個段,每個段又由若干個tq 構成,這稱為位時序。

位時間=1/波特率,因此,知道位時間,我們就可以知道波特率。

1 位由多少個tq 構成、每個段又由多少個tq 構成等,可以任意設定位時序。通過設定位時序,多個單元可同時取樣,也可任意設定取樣點。

stm32f103,設ts1=8、ts2=7、brp=3,波特率=36000/[(9+8+1)*4]=500kbps。

stm32f407,設ts1=6、ts2=5、brp=5,波特率=42000/[(7+6+1)*6]=500kbps。

can匯流排學習(一) 初識can匯流排

can匯流排最初由德國bosch公司為汽車檢測 控制系統而設計的。1993年can成為國際標準iso11898 高速應用 和iso1119 低速應用 can的規範從can1.2規範 標準格式 發展為相容can1.2規範的can2.0規範 can2.0a為標準格式,can2.0b為擴充套件格式 目前應...

初學CAN匯流排

初學can 匯流排,之前用的是 rs485 485 中沒有匯流排仲裁的概念,如果匯流排上有十個節點,要事先算好每組資料的傳送用時,調好時間延遲,逐個排隊傳送。而 can匯流排可以把多個節點的資料都送到本站的 can晶元,並處於準備狀態,等待匯流排空閒時,向匯流排傳送資料,由匯流排仲裁哪乙個節點優先傳...

can匯流排配置

can 匯流排配置 在linux 系統中,can匯流排介面 裝置作為網路裝置 被系統進行統一 管理。在控制 台下,can匯流排 的配置和以 太網的配置使用相同的 命令。在控制台 上輸入命令 ifconfig a 可以得到以下結果 can0 link encap unspec hwaddr 00 00...