IIC
基本特點
同步,半雙工
標準100KHz,最高400KHz(IIC主要應用于低速設備)
硬件組成
需外接上拉電阻
通信過程
空閑狀態
SDA和SCL都處于高電平
開始信號S和終止信號P
在數據傳輸過程中,當SCL=0時,SDA才可以跳變;當SCL=1時,SDA必須保持穩定,一旦有電平跳變就代表是起始信號或終止信號。
- 起始信號S:SCL=1時,SDA由1->0
- 終止信號P:SCL=1時,SDA由0->1
數據有效性
在數據傳輸過程中,當SCL=0時,SDA才可以跳變;當SCL=1時,SDA必須保持穩定,一旦有電平跳變就代表是起始信號或終止信號。
在SCL=1時,SDA數據線穩定,數據有效。
應答信號
每當主機向從機發送完一個字節的數據,主機總是需要等待從機給出一個應答信號,以確認從機是否成功接收到了數據
主機將SCL拉高,讀取SDA電平:
- SDA=0,表示有效應答位(ACK),表示從機已成功接收該字節
- SDA=1,表示非應答位(NACK),表示從機接收該字節失敗
每次傳輸時,接收方都要返回一個ACK給發送方,才能繼續數據通信
IIC寫數據
1.主機發送設備地址(前7位為設備地址,第8位代表W);
2.各從機比對自己的地址,匹配則發送ACK;
3.主機收到ACK,繼續發送要訪問的寄存器地址;
4.從機成功接收,發送ACK;
5.主機發送DATA。
寫AT24C02時序:
IIC讀數據
1.主機發送設備地址(前7位為設備地址,第8位代表W);
2.各從機比對自己的地址,匹配則發送ACK;
3.主機收到ACK,繼續發送要訪問的寄存器地址;
4.從機成功接收,發送ACK;
5.主機重新發送一個S信號,發送設備地址(第8位為R)
6.從機成功接收,發送ACK;
7.從機緊接著返回對應地址寄存器數據,直到主機不在返回ACK。
讀AT24C02時序:
SPI
基本特點
同步、全雙工
最高50MKHz
硬件組成
需外接上拉電阻
通信過程
包括主機和從機(可實現一主多從)
主機和從機構成一個環形結構,通過移位寄存器實現串行傳輸,這就意味著:
- 寫數據:必定會接收到從機的數據,丟棄即可
- 讀數據:必定需要向從機發送無用數據,才能讀到需要的數據
一主多從
-
多NSS
-
菊花鏈
數據流向:
所以不難發現,菊花鏈模式充分使用了SPI其移位寄存器的功能,整個鏈充當通信移位寄存器,每個從機在下一個時鐘周期將輸入數據復制到輸出。
ISOSPI
CAN
基本特點
異步、半雙工、差分
ISO11898是針對通信速率為125Kbps~1Mbps的高速通信標準(閉環,需要添加終端電阻120Ω,用于阻抗匹配,減少回波反射)
IS011519-2是針對通信速率為125Kbps以下的低速通信標準(開環)
硬件組成
CAN控制器、CAN收發器、終端電阻
電平標準
隱性電平:邏輯1(CAN_RX/TX=3.3v) 電壓差=0V(CAN_H=2v,CAN_L=2v)
顯性電平:邏輯0(CAN_RX/TX=0v) 電壓差=2V(CAN_H=3.5v,CAN_L=1.5v)
通信過程
-
空閑狀態
當總線上的上出現連續的11位隱性電平,那么總線就處于空閑狀態。 -
數據傳輸
每次發送數據前,節點都會監聽總線的狀態,如果總線狀態為空閑時,它就會立即向總線上發送自己的數據,這個數據里不僅有數據,還有本身的ID信息或者其他的控制指令,應稱為數據包(數據幀),也叫做報文。 -
仲裁機制(利用線與和回讀機制)
以上只是節點1主動發送數據,但是萬一節點1和節點2同時向節點3發送數據的時候,如何判定先后呢?采用非破壞性位仲裁機制,即對各個消息的標識符(即ID號)進行逐位仲裁(比較),如果某個節點發送的消息仲裁獲勝,那么這個節點將獲取總線的發送權,仲裁失敗的節點則立即停止發送并轉變為監聽(接收)狀態。
因為顯性電平會覆蓋隱性電平,兩個節點同時發送報文時,0會將1覆蓋(線與),而每個節點在發送完之后都會進行回讀操作:如果自己發的1,都回來的卻是0,那仲裁失敗,進入空閑狀態;自己發的和回讀的一樣則獲得總線控制權。( ID:000000 00010 比 000000 00011 的優先級要高)
- 位時序
can的數據幀中沒有用于同步的標志,它的同步是靠位時序實現的。
CAN將一位又分為4段, 同步段(SS)、傳播時間段(PTS)、相位緩沖段 1(PBS1)、相位緩沖段 2(PBS2)。分解后最小的時間單位是 Tq,而一個完整的位由 8~25 個 Tq 組成。通過這些段可以計算出CAN的波特率。
同時每一個段又能用來進行數據同步,分為硬同步和重新同步:
- 硬同步:在幀起始信號時(SOF)同步總線上所有器件的位時序,無法確保后續一連串的位時序都是同步的(可以理解為節點在檢測到幀起始信號時才開始“設置段”)
- 重新同步:在檢測到總線上的時序與節點使用的時序有相位差時(即總線上的跳變沿不在節點時序的 SS 段范圍),通過延長 PBS1 段或縮短 PBS2 段,來獲得同步。
硬同步和重新同步都是使用SS段來檢測,而同步的目的就是讓SS段把跳變沿包含進來
區別在于:
硬同步是在數據傳輸開始時(SOF處)設置SS段包含跳變沿,類似于初始化;
重新同步是在數據傳輸過程中設置PBS段以實現SS段包含跳變沿
數據格式
傳輸的報文包括數據幀,遙控幀,錯誤幀,過載幀,幀間隔。
數據幀:
數據幀和遙控幀有標準格式和擴展格式兩種格式,標準格式有 11 個位的ID,擴展格式有 29 個位的 ID。
- SOF:聯系前文可知,當數據幀發出第一位時(0為顯性電位),總線就由空閑狀態轉為傳輸狀態,同一時間只能允許一個節點傳輸數據。
- Identify:接下來的仲裁段有11位,即本數據幀的 ID 信息,決定著數據幀發送的優先級,也決定著其它設備是否會接收這個數據幀,禁止高 7 位都為隱性(禁止設定:ID=1111111XXXX), ID 信息的作用:① 如果同時有多個節點發送數據時,作為優先級依據(仲裁機制);② 目標節點通過 ID 信息來接受數據(驗收濾波技術)。這些將在下文提出。
- RTR:(Remote Transmission Request BIT) 位用于標識是否是遠程幀(0,數據幀;1,遠程幀),在數據幀里這一位為顯性(邏輯 0)。
- IDE:(Identifier Extension Bit),是用于區分標準格式與擴展格式,在標準格式中 IDE 位為顯性,在擴展格式里 IDE 位為隱性。
- r0:保留位,必須以顯性電平發送。
- DLC:由 4 位組成,MSB 先行(高位先行),它的二進制編碼用于表示本報文中的數據段含有多少個字節,DLC 段表示的數字為0到8,若接收方接收到 9~15 的時候并不認為是錯誤。
- Data:數據幀的核心內容,它由 0~8 個字節(0 ~ 64位)組成,MSB 先行。
- CRC:該段用于檢查幀傳輸錯誤,發送方以一定的方法計算包括:幀起始、仲裁段、控制段、數據段;接收方以同樣的算法計算 CRC 值并進行比較,如果不同則會向發送端反饋出錯信息,重新發送;計算和出錯處理一般由 CAN 控制器硬件完成或由軟件控制最大重發數。該段由 15 個位的 CRC 順序和 1 個位的 CRC 界定符(用于分隔的位)組成,它為隱性位,主要作用是把CRC 校驗碼與后面的 ACK 段間隔起來。
- ACK:由 ACK 槽(ACK Slot)和 ACK 界定符 2 個位組成,在 ACK 槽位中,發送端發送的為隱性位,而接收端則在這一位中發送顯性位以示應答。在 ACK 槽和幀結束之間由 ACK 界定符間隔開,為隱性位。(發送 ACK/返回 ACK這個過程使用到回讀機制,即發送方先在 ACK 槽發送隱性位后,回讀到的總線上的電平為顯性0,發送方才知道它發送成功了,不用重發)
- EOF:由發送端發送 7 個隱性位表示結束。
無ACK:
有ACK:
在數據幀的拓展格式中,與標準格式不同處在于:
- 仲裁段為 29 位;
- 多出的SRR 位(Substitute Remote Request BIT),用于替代標準格式中的 RTR 位。SRR 位為隱性位,由于 RTR 在數據幀為顯性位,所以在兩個 ID 相同的標準格式報文與擴展格式報文中,標準格式的優先級較高;
- 控制段中的 r1 和 r0 一樣都為保留位,默認設置為顯性位;
- 擴展格式的 ID 有 29 個位。基本 ID 從 ID28 到 ID18,擴展 ID 由 ID17 到 ID0 表示。基本 ID 和標準格式的 ID 相同。禁止高 7 位都為隱性。(禁止設定:基本 ID=1111111XXXX)
位填充
為防止突發錯誤而設定,CAN協議中規定,當相同極性的電平持續五位時,則添加一個極性相反的位。填充位的添加和刪除是由發送節點和接收節點完成的,CAN-BUS只負責傳輸,不會操縱信號。
stm32中的CAN
- 具有 3 個發送郵箱,發送報文的優先級可以使用軟件,可以記錄發送的時間;
- 有 2 個 3 級深度的接收 FIFO,可以使用過濾功能只接收或不接收某些 ID號的報文;
- 不支持使用 DMA 進行數據收發;
- 可變的過濾器組(最多 28 個)。
接收FIFO
CAN的FIFO用于緩存CAN數據包,最多存放3個。一旦超出3個數據就無法收到新數據,需要及時讀出,并釋放郵箱。
接收消息分為:
- 掛起:一旦FIFO有消息掛起位(pending)就會置位
- 上溢:FIFO滿了(最多有3個消息)
過濾器組
過濾器用于在數據包送到接收FIFO之前,只接受指定數據,過濾掉不需要的數據。
每個過濾器X(共28個)由兩個32位的寄存器組成:CAN_FxR1和CAN_FxR2
過濾器可設置兩種篩選方法:
- 標識符掩碼:篩選一組符合條件的報文
ID:指定ID的報文可進入FIFO中
掩碼:含義是根據CAN_FxR2中哪些位為1,篩選出ID這些位與CAN_FxR1中這些位相同的報文(即0xFFFF0000可篩選出前16位相同的報文) - 標識符列表:篩選兩個符合條件的報文
ID:只能篩選出兩種指定ID的報文
DMA
DMA不屬于通信協議,但和上述幾個通信協議一起記錄,是因為它們會經常關聯使用
基本特點
DMA可以實現在沒有CPU干預的情況下完成數據的傳輸
硬件組成
能夠使用DMA的外設:
通信過程
配置DMA:
- 傳輸模式:單次/循環
- 傳輸方向:source,destination
- 傳輸大小
- 傳輸通道
- 使能中斷:發送完成中斷,發送空閑中斷,發送一半中斷
優勢
通過串口接收數據,若采用中斷方式,在數據量很小的情況下很有用,但是一旦數據量大了,CPU將頻繁被中斷打斷;而采用DMA+中斷的方式,DMA只有在一次性傳輸size個數據(或者空閑)后才會請求DMA傳輸完成中斷,告知CPU傳輸完成,而數據的傳輸工作都是由DMA完成的。