(stm32f103學習總結)—can匯流排 _
阿新 • • 發佈:2022-04-01
參考:CAN匯流排的位時序與引數設定 CAN匯流排位同步
1 CAN匯流排介紹
CAN 是Controller Area Network 的縮寫,中文意思是控制器區域網 絡,是ISO國際標準化的序列通訊協議。它是德國電氣商博世公司於1986 年面向汽車而開發的CAN 通訊協議。此後,CAN 通過ISO11898 及 ISO11519 進行了標準化。CAN是國際上應用最廣泛的現場匯流排之一,在 歐洲已是汽車網路的標準協議。CAN 的高效能和可靠性已被認同,並被 廣泛地應用於工業自動化、船舶、醫療裝置、工業裝置等方面。 CAN通訊只具有兩根訊號線,分別是CAN_H和CAN_L,CAN 控制器根據 這兩根線上的電位差來判斷匯流排電平。匯流排電平分為顯性電平和隱性電 平,二者必居其一。傳送方通過使匯流排電平發生變化,將訊息傳送給接 收方。
2 CAN物理層
與I2C、SPI等具有時鐘訊號的同步通訊方式不同,CAN通訊並不是以時鐘訊號來進行同步的,它是一種非同步通訊,只具有CAN_High和CAN_Low兩條訊號線,共同構成一組差分訊號線,以差分訊號的形式進行通訊。CAN物理層的形式主要分為閉環匯流排及開環匯流排網路兩種,一個適合於高速通訊,一個適合於遠距離通訊。2.1 閉環can匯流排網路
CAN閉環通訊網路是一種遵循ISO11898標準的高速、短距離網路,它的匯流排最大長度為40m,通訊速度最高為1Mbps,匯流排的兩端各要求有一個“120歐”的電阻2.2 開環can匯流排網路
CAN開環匯流排網路是遵循ISO11519-2標準的低速、遠距離網路,它的最大傳輸距離為1km,最高通訊速率為125kbps,兩根匯流排是獨立的、不形成閉環,要求每根總線上各串聯有一個“2.2千歐”的電阻2.3通訊節點
CAN總線上可以掛載多個通訊節點,節點之間的訊號經過匯流排傳輸,實現節點間通訊。由於CAN通訊協議不對節點進行地址編碼,而是對資料內容進行編碼,所以網路中的節點個數理論上不受限制,只要匯流排的負載足夠即可,可以通過中繼 器增強負載。 CAN通訊節點由一個CAN控制器及CAN收發器組成,控制器與收發器之間通過CAN_Tx及CAN_Rx訊號線相連,收發器與CAN匯流排之間使用CAN_High及CAN_Low訊號線相連。其中CAN_Tx及CAN_Rx使用普通的類似TTL邏輯訊號,而CAN_High及CAN_Low是一對差分訊號線,使用比較特別的差分訊號。當CAN節點需要傳送資料時,控制器把要傳送的二進位制編碼通過CAN_Tx線傳送到收發器,然後由收發器把這個普通的邏輯電平訊號轉化成差分訊號,通過差2.4 差分訊號
差分訊號又稱差模訊號,與傳統使用單根訊號線電壓表示邏輯的方式有區別,使用差分訊號傳輸時,需要兩根訊號線,這兩個訊號線的振幅相等,相位相反,通過兩根訊號線的電壓差值來表示邏輯0和邏輯1。 相對於單訊號線傳輸的方式,使用差分訊號傳輸具有如下優點: • 抗干擾能力強,當外界存在噪聲干擾時,幾乎會同時耦合到兩條訊號線上,而接收端只關心兩個訊號的差值,所以外界的共模噪聲可以被完全抵消。 • 能有效抑制它對外部的電磁干擾,同樣的道理,由於兩根訊號的極性相反,他們對外輻射的電磁場可以相互抵消,耦合的越緊密,洩放到外界的電磁能量越少。 • 時序定位精確,由於差分訊號的開關變化是位於兩個訊號的交點,而不像普通單端訊號依靠高低兩個閾值電壓判斷,因而受工藝,溫度的影響小,能降低時序上的誤差,同時也更適合於低幅度訊號的電路。 • 由於差分訊號線具有這些優點,所以在USB協議、485協議、乙太網協議及CAN協議的物理層中,都使用了差分訊號傳輸。2.5 CAN協議中的差分訊號
CAN協議中對它使用的CAN_High及CAN_Low表示的差分訊號做了規定。以高速CAN協議為例,當表示邏輯1時(隱性電平),CAN_High和CAN_Low線上的電壓均為2.5v,即它們的電壓差VH-VL=0V;而表示邏輯0時(顯性電平),CAN_High的電平為3.5V,CAN_Low線的電平為1.5V,即它們的電壓差為VH-VL=2V。 在CAN匯流排中,必須使它處於隱性電平(邏輯1)或顯性電平(邏輯0)中的其中一個狀態。假如有兩個CAN通訊節點,在同一時間,一個輸出隱性電平,另一個輸出顯性電平,類似I2C匯流排的“線與”特性將使它處於顯性電平狀態,顯性電平的名字就是這樣來的,即可以認為顯性具有優先的意味。 由於CAN匯流排協議的物理層只有1對差分線,在一個時刻只能表示一個訊號,所以對通訊節點來說,CAN通訊是半雙工的,收發資料需要分時進行。在CAN的通訊網路中,因為共用匯流排,在整個網路中同一時刻只能有一個通訊節點發送訊號(就像廣播的形式一樣),其餘的節點在該時刻都只能接收。3 CAN協議層
CAN的協議層則規定了通訊邏輯。3.1 CAN的波特率及位同步
由於CAN屬於非同步通訊,沒有時鐘訊號線,連線在同一個匯流排網路中的各個節點會像串列埠非同步通訊那樣,節點間使用約定好的波特率進行通訊,特別地,CAN還會使用“位同步”的方式來抗干擾、吸收誤差,實現對匯流排電平訊號進行正確的取樣,確保通訊正常。3.2位時序分解
為了實現位同步,CAN協議把每一個數據位的時序分解成SS段、PTS段、PBS1段、PBS2段,這四段的長度加起來即為一個CAN資料位的長度。分解後最小的時間單位是Tq,而一個完整的位由8~25個Tq組成。 圖中表示的CAN通訊訊號每一個數據位的長度為19Tq,其中SS段佔1Tq,PTS段佔6Tq,PBS1段佔5Tq,PBS2段佔7Tq。訊號的取樣點位於PBS1段與PBS2段之間,通過控制各段的長度,可以對取樣點的位置進行偏移,以便準確地取樣 • SS段(SYNC SEG) SS譯為同步段,若通訊節點檢測到總線上訊號的跳變沿被包含在SS段的範圍之內,則表示節點與匯流排的時序是同步的,當節點與匯流排同步時,取樣點採集到的匯流排電平即可被確定為該位的電平。SS段的大小固定為1Tq。 • PTS段(PROP SEG) PTS譯為傳播時間段,這個時間段是用於補償網路的物理延時時間。是總線上輸入比較器延時和輸出驅動器延時總和的兩倍。PTS段的大小可以為1~8Tq。 • PBS1段(PHASE SEG1), PBS1譯為相位緩衝段,主要用來補償邊沿階段的誤差,它的時間長度在重新同步的時候可以加長。PBS1段的初始大小可以為1~8Tq。 • PBS2段(PHASE SEG2) PBS2這是另一個相位緩衝段,也是用來補償邊沿階段誤差的,它的時間長度在重新同步時可以縮短。PBS2段的初始大小可以為2~8Tq。 總線上的各個通訊節點只要約定好1個Tq的時間長度以及每一個數據位佔據多少個Tq,就可以確定CAN通訊的波特率。 例如,假設上圖中的1Tq=1us,而每個資料位由19個Tq組成,則傳輸一位資料需要時間T1bit =19us,從而每秒可以傳輸的資料位個數為: 1x106 /19 = 52631.6 (bps) 這個每秒可傳輸的資料位的個數即為通訊中的波特率。4 CAN的報文種類及結構
當使用CAN協議進行通訊時,需要對資料、操作命令(如讀/寫)以及同步訊號進行打包,打包後的這些內容稱為報文。4.1報文的種類
在原始資料段的前面加上傳輸起始標籤、片選(識別)標籤和控制標籤,在資料的尾段加上CRC校驗標籤、應答標籤和傳輸結束標籤,把這些內容按特定的格式打包好,就可以用一個通道表達各種訊號,各種各樣的標籤就如同SPI中各種通道上的訊號,起到了協同傳輸的作用。當整個資料包被傳輸到其它裝置時,只要這些裝置按格式去解讀,就能還原出原始資料,這樣的報文就被稱為CAN的“資料幀”。 為了更有效地控制通訊,CAN一共規定了5種類型的幀。4.2資料幀的結構
資料幀的結構圖: 資料幀以一個顯性位(邏輯0)開始,以7個連續的隱性位(邏輯1)結束,在它們之間,分別有仲裁段、控制段、資料段、CRC段和ACK段。 • 幀起始 SOF段(Start Of Frame),譯為幀起始,幀起始訊號只有一個數據位,是一個顯性電平,它用於通知各個節點將有資料傳輸,其它節點通過幀起始訊號的電平跳變沿來進行硬同步。 • 仲裁段 當同時有兩個報文被髮送時,匯流排會根據仲裁段的內容決定哪個資料包能被傳輸,這也是它名稱的由來。 仲裁段的內容主要為本資料幀的ID資訊(識別符號),資料幀具有標準格式和擴充套件格式兩種,區別就在於ID資訊的長度,標準格式的ID為11位,擴充套件格式 的ID為29位,它在標準ID的基礎上多出18位。 在CAN協議中,ID起著重要的作用,它決定著資料幀傳送的優先順序,也決定著其它節點是否會接收這個資料幀。CAN協議不對掛載在它之上的節點分配優先順序和地址,對匯流排的佔有權是由資訊的重要性決定的,即對於重要的資訊,可給它打包上一個優先順序高的ID,使它能夠及時地傳送出去。也正因為它這樣的優先順序分配原則,使得CAN的擴充套件性大大加強,在總線上增加或減少節點並不影響其它裝置。 報文的優先順序,是通過對ID的仲裁來確定的。根據前面對物理層的分析我們知道如果總線上同時出現顯性電平和隱性電平,匯流排的狀態會被置為顯性電平,CAN正是利用這個特性進行仲裁。 若兩個節點同時競爭CAN匯流排的佔有權,當它們傳送報文時,若首先出現隱性電平,則會失去對匯流排的佔有權,進入接收狀態。在開始階段,兩個裝置傳送的電平一樣,所以它們一直繼續傳送資料。到了圖中箭頭所指的時序處,節點單元1傳送的為隱性電平,而此時節點單元2傳送的為顯性電平,由於匯流排的“線與”特性使它表達出顯示電平,因此單元2競爭匯流排成功,這個報文得以被繼續傳送出去。 仲裁段ID的優先順序也影響著接收裝置對報文的反應。因為在CAN總線上資料是以廣播的形式傳送的,所有連線在CAN匯流排的節點都會收到所有其它節點發出的有效資料,因而CAN控制器大多具有根據ID過濾報文的功能,它可以控制自己只接收某些ID的報文。 • RTR位(Remote Transmission Request Bit),譯作遠端傳輸請求位,它是用於區分資料幀和遙控幀的,當它為顯性電平時表示資料幀,隱性電平時表示遙控幀。 • IDE位(Identifier Extension Bit),譯作識別符號擴充套件位,它是用於區分標準格式與擴充套件格式,當它為顯性電平時表示標準格式,隱性電平時表示擴充套件格式。 • SRR位(Substitute Remote Request Bit),只存在於擴充套件格式,它用於替代標準格式中的RTR位。由於擴充套件幀中的SRR位為隱性位,RTR在資料幀為顯性位,所以在兩個ID相同的標準格式報文與擴充套件格式報文中,標準格式的優先順序較高。 • 控制段 在控制段中的r1和r0為保留位,預設設定為顯性位。它最主要的是DLC段(DataLength Code),譯為資料長度碼,它由4個數據位組成,用於表示本報文中的資料段含有多少個位元組,DLC段表示的數字為0~8。 • 資料段 資料段為資料幀的核心內容,它是節點要傳送的原始資訊,由0~8個位元組組成,MSB先行。 • CRC段 為了保證報文的正確傳輸,CAN的報文包含了一段15位的CRC校驗碼,一旦接收節點算出的CRC碼跟接收到的CRC碼不同,則它會向傳送節點反饋出錯資訊,利用錯誤幀請求它重新發送。CRC部分的計算一般由CAN控制器硬體完成,出錯時的處理則由軟體控制最大重發數。 在CRC校驗碼之後,有一個CRC界定符,它為隱性位,主要作用是把CRC校驗碼與後面的ACK段間隔起來 • ACK段 ACK段包括一個ACK槽位,和ACK界定符位。類似I2C匯流排,在ACK槽位中,傳送節點發送的是隱性位,而接收節點則在這一位中傳送顯性位以示應答。在ACK槽和幀結束之間由ACK界定符間隔開。 • 幀結束 EOF段(End Of Frame),譯為幀結束,幀結束段由傳送節點發送的7個隱性位表示結束。STM32的CAN外設簡介
STM32的晶片中具有bxCAN控制器 (Basic Extended CAN),它支援CAN協議2.0A和2.0B標準。 該CAN控制器支援最高的通訊速率為1Mb/s;可以自動地接收和傳送CAN報文,支援使用標準ID和擴充套件ID的報文;外設中具有3個傳送郵箱,傳送報文的優先順序可以使用軟體控制,還可以記錄傳送的時間;具有2個3級深度的接收FIFO,可使用過濾功能只接收或不接收某些ID號的報文;可配置成自動重發;不支援使用DMA進行資料收發。- • CAN控制核心
- • CAN傳送郵箱
- • CAN接收FIFO
- • 驗收篩選器
- • 整體控制邏輯
CAN控制核心
框圖中標號1處的CAN控制核心包含了各種控制暫存器及狀態暫存器,我們主要講解其中的主控制暫存器CAN_MCR及位時序暫存器CAN_BTR。主控制暫存器CAN_MCR負責管理CAN的工作模式,它使用以下暫存器位實現控制。
• DBF除錯凍結功能 DBF(Debug freeze)除錯凍結,使用它可設定CAN處於工作狀態或禁止收發的狀態,禁止收發時仍可訪問接收FIFO中的資料。這兩種狀態是當STM32晶片處於程式除錯模式時才使用的,平時使用並不影響。 • TTCM時間觸發模式 TTCM(Time triggered communication mode)時間觸發模式,它用於配置CAN的時間觸發通訊模式,在此模式下,CAN使用它內部定時器產生時間戳,並把它儲存在CAN_RDTxR、CAN_TDTxR暫存器中。內部定時器在每個CAN位時間累加,在接收和傳送的幀起始位被取樣,並生成時間戳。利用它可以實現ISO 11898-4 CAN標準的分時同步通訊功能。 主控制暫存器CAN_MCR • ABOM自動離線管理 ABOM(Automatic bus-off management) 自動離線管理,它用於設定是否使用自動離線管理功能。當節點檢測到它傳送錯誤或接收錯誤超過一定值時,會自動進入離線狀態,在離線狀態中,CAN不能接收或傳送報文。處於離線狀態的時候,可以軟體控制恢復或者直接使用這個自動離線管理功能,它會在適當的時候自動恢復。 • AWUM自動喚醒 AWUM(Automatic bus-off management),自動喚醒功能,CAN外設可以使用軟體進入低功耗的睡眠模式,如果使能了這個自動喚醒功能,當CAN檢測到匯流排活動的時候,會自動喚醒。 主控制暫存器CAN_MCR • NART自動重傳 NART(No automatic retransmission)報文自動重傳功能,設定這個功能後,當報文傳送失敗時會自動重傳至成功為止。若不使用這個功能,無論傳送結果如何,訊息只發送一次。 • RFLM鎖定模式 RFLM(Receive FIFO locked mode)FIFO鎖定模式,該功能用於鎖定接收FIFO。鎖定後,當接收FIFO溢位時,會丟棄下一個接收的報文。若不鎖定,則下一個接收到的報文會覆蓋原報文。 • TXFP報文傳送優先順序的判定方法 TXFP(Transmit FIFO priority)報文傳送優先順序的判定方法,當CAN外設的傳送郵箱中有多個待發送報文時,本功能可以控制它是根據報文的ID優先順序還是報文存進郵箱的順序來發送。