通讯协议集合- - -类比道路交通- - -一般肯定有数据电信号线和收发控制电信号线
一、總線- -信息傳送的公共通路
1、知識
1)單工:指數據傳輸只支持數據在一個方向上傳輸,即能從A到B就不能從B到A
全雙工(full-duplex)的系統允許二臺設備間同時進行雙向數據傳輸。一般的電話、手機就是全雙工的系統,因為在講話時同時也可以聽到對方的聲音。
2)半雙工(half-duplex)的系統允許二臺設備之間的雙向數據傳輸,但不能同時進行。因此同一時間只允許一設備傳送資料,若另一設備要傳送資料,需等原來傳送資料的設備傳送完成后再處理。
3)波特率表示每秒鐘傳送的碼元符號的個數。在數字通信中常常用時間間隔相同的符號來表示一個二進制數字,這樣的時間間隔內的信號稱為**(二進制)碼元**
4)多主配置方式是指多個master機,單個slave的模式,就需要競爭,分出優先級
5)同步異步 ,
同步是指:發送?發出數據后,等接收?發回響應以后才發下?個數據包的通訊?式。
異步是指:發送?發出數據后,不等接收?發回響應,接著發送下個數據包的通訊?式。
舉個例子來說,一家餐廳吧來了5個客人,同步的意思就是說,來第一個點菜,點了個魚,好, 廚師去捉魚殺魚,過了半小時魚好了給第一位客人,開始下位一位客人,就這樣一個一個來,按順序來
相同, 異步呢,異步的意思就是來第一位客人,點什么,點魚,給它一個牌子,讓他去一邊等吧,下一位客人接著點菜,點完接著點讓廚師做去吧,哪個的菜先好就先端出來,
同步的優點是:同步是按照順序一個一個來,不會亂掉,更不會出現上面代碼沒有執行完就執行下面的代碼, 缺點:是解析的速度沒有異步的快;
異步的優點是:異步是接取一個任務,直接給后臺,在接下一個任務,一直一直這樣,誰的先讀取完先執行誰的, 缺點:沒有順序 ,誰先讀取完先執行誰的 ,會出現上面的代碼還沒出來下面的就已經出來了,會報錯;
2、總線(Bus)
分散連接:各部件之間使用單獨的連線
bus:公共汽車
遠距離傳輸使用串行比并行更不易出錯
總線主設備:對總線有控制權
總線從設備:響應從主設備發來的總線命令
總線(Bus)是計算機各種功能部件之間傳送信息的公共通信干線,它是由導線組成的傳輸線束,外部總線(系統總線) 按照計算機所傳輸的信息種類,可以劃分為數據總線、地址總線和控制總線,分別用來傳輸數據、數據地址和控制信號。
總線是一種內部結構,它是cpu、內存、輸入、輸出設備傳遞信息的公用通道,
主機的各個部件通過總線相連接,外部設備通過相應的接口電路再與總線相連接,從而形成了計算機硬件系統。
在計算機系統中,各個部件之間傳送信息的公共通路叫總線,微型計算機是以總線結構來連接各個功能部件的。
3、內部總線- - -cpu中的主干道
內部總線是一種內部結構,是cpu、內存、輸入、輸出設備傳遞信息的公用通道。
內部總線,將處理器的所有結構單元內部相連。它的寬度可以是8、16、32、64或128位。
如在CPU內部,寄存器之間和算術邏輯部件ALU與控制部件之間傳輸數據所用的總線稱為片內總線(即芯片內部的總線)
1)并發
CAMAC,用于儀表檢測系統
工業標準架構總線(ISA)
擴展ISA(EISA)
Low Pin Count(LPC)
微通道(MCA)
MBus
多總線(Multibus),用于工業生產系統
NuBus,或稱IEEE 1196
OPTi本地總線,用于早期Intel 80486主板
外圍部件互聯總線(PCI)
S-100總線(S-100 bus),或稱IEEE 696,用于Altair或類似微處理器
SBus或稱IEEE 1496
VESA本地總線(VLB,VL-bus)
VERSAmodule Eurocard bus(VME總線)
STD總線(STD bus),用于八位或十六位微處理器系統
Unibus
Q-Bus
PC/104
PC/104 Plus
PC/104 Express
PCI-104
PCIe-104
2)串行
1-Wire
HyperTransport
I2C
串行PCI(PCIe)
串行外圍接口總線(SPI總線)
火線i.Link(IEEE 1394)
3、外部總線- - -計算機系統中的主干道
外部總線指纜線和連接器系統,用來傳輸I/O路徑技術指定的數據和控制信號,另外還包括一個總線終結電阻或電路,這個終結電阻用來減弱電纜上的信號反射干擾。
ExternalBus(外部總線) ,即通常所說的總線(Bus)- - -片外總線,是CPU與內存RAM、ROM和輸入/輸出設備接口之間進行通訊的通路,也稱系統總線.
1)并發
ATA:磁盤/磁帶周邊附件總線,也稱 PATA、IDE、EIDE、ATAPI 等等。 (the original ATA is parallel, but see also the recentserial ATA)
HIPPI(HIgh Performance Parallel Interface):高速平行接口。
IEEE-488:也稱 GPIB(General-Purpose Instrumentation Bus)或 HPIB(Hewlett-Packard Instrumentation Bus)。
PC card:前身為知名的PCMCIA,常用于筆記本電腦和其它便攜式設備,但自從引入USB以及嵌入式網絡后,這個總線就慢慢不再使用了。
SCSI(Small Computer System Interface):小型電腦系統接口,磁盤/磁帶周邊附件總線。
2)串行
USB Universal Serial Bus, 大量外部設備均采用此總線
Serial Attached SCSIand otherserial SCSIbuses
Serial ATA
Controller Area Network(“CAN總線”)
EIA-485
FireWire
Thunderbolt
二、針對某特定的總線的詳細描述
1、CAN總線協議- - -串行- - -外部總線- - -計算機系統中的主干道
1)CAN總線特性
CAN是一種基于廣播的通訊方式,為了保證總線上的每一個節點都能正確的接收到報文,報文的發送者要求每一個接收節點在報文發送結束前,也就是ACK SLOT 的時間內,作出應答,即在ACK段上,要求接收節點在報文正確性的基礎上及時發送一個“顯性”位。發送者在發送的同時會監視總線上的數據,如果與發送的數據不一致,則表示發送失敗或自己失去仲裁,立即停止發送或轉入接收模式。由于發送者在發送數據的同時會向ACK段連續寫入2個隱性位,如果發送者在回讀過程中監控到ACK SLOT 位為“顯性”位,則說明接收者已正確接收;如果發送者在回讀過程中監控到ACK SLOT 位為“隱性”位,則說明沒有節點正確接收該報文,則發送者會檢測到這個隱性位而知道發送失敗,此條報文需要重發。
點擊鏈接進入國際標準官網,點擊在線瀏覽平臺(OBP),搜索ISO 11898-
只有標準的信息部分是公開的。要查看完整內容,您需要通過單擊“購買”按鈕購買標準。1瑞士幣=7.3014元人民幣
a)
CAN 的全稱為 Controller Area Network,也就是控制局域網絡,簡稱為 CAN。 CAN 最早是由德國 BOSCH(博世)開發的,目前已經是國際標準(ISO 11898),是當前應用最廣泛的現場總線之一。 BOSCH 主要是做汽車電子的,因此 CAN 一開始主要是為汽車電子準備的,事實也是如此, CAN 協議目前已經是汽車網絡的標準協議。當然了, CAN 不僅僅應用于汽車電子,經過幾十年的發展, CAN 協議的高性能和高可靠性已經得到了業界的認可,目前除了汽車電子以外也廣泛應用于工業自動化、醫療、工業和船舶等領域。以汽車電子為例,汽車上有空調、車門、發動機、大量傳感器等,這些部件都是通過 CAN總線連在一起形成一個網絡,
網絡 (由節點和連線構成的圖)。車載網絡結構如圖 66.1.1.1 所示:
圖 66.1.1.1 中各個單元通過 CAN 總線連接在一起,每個單元都是獨立的 CAN 節點。同一個 CAN 網絡中所有單元的通信速度必須一致,不同的網絡之間通信速度可以不同。比如圖66.1.1.1 中 125Kbps(千比特每秒) 的 CAN 網絡下所有的節點速度都是 125Kbps 的,整個網絡由一個網關與其他的網絡連接。
CAN 的特點主要有一下幾點:
①、多主控制
在總線空閑時,所有單元都可以發送消息(多主控制),而兩個以上的單元同時開始發送消息時,根據標識符(Identifier 以下稱為 ID)決定優先級。 ID 并不是表示發送的目的地址,而是表示訪問總線的消息的優先級。兩個以上的單元同時開始發送消息時,對各消息 ID 的每個位進行逐個仲裁比較。仲裁獲勝(被判定為優先級最高)的單元可繼續發送消息,仲裁失利的單元則立刻停止發送而進行接收工作。CAN總線中,如果總線上不能同時有兩條標識符是一樣。
②、系統的柔軟性,即無地址,只有優先級
與總線相連的單元沒有類似于“地址”的信息。因此在總線上增加單元時,連接在總線上的其它單元的軟硬件及應用層都不需要改變。
③、通信速度快,距離遠
最高 1Mbps(距離小于 40M),最遠可達 10KM(速率低于 5Kbps)。
④、具有錯誤檢測、錯誤通知和錯誤恢復功能
所有單元都可以檢測錯誤(錯誤檢測功能),檢測出錯誤的單元會立即同時通知其他所有單元(錯誤通知功能),正在發送消息的單元一旦檢測出錯誤,會強制結束當前的發送。強制結束發送的單元會不斷反復地重新發送此消息直到成功發送為止(錯誤恢復功能)。
⑤、故障封閉功能
CAN 可以判斷出錯誤的類型是總線上暫時的數據錯誤(如外部噪聲等)還是持續的數據錯誤(如單元內部故障、驅動器故障、斷線等)。由此功能,當總線上發生持續數據錯誤時,可將引起此故障的單元從總線上隔離出去。
⑥、連接節點多
CAN 總線是可同時連接多個單元的總線。可連接的單元總數理論上是沒有限制的。但實際上可連接的單元數受總線上的時間延遲及電氣負載的限制。降低通信速度,可連接的單元數增加;提高通信速度,則可連接的單元數減少。
b)
CAN 電氣屬性
CAN 總線使用兩根線來連接各個單元: CAN_H 和 CAN_L, CAN 控制器通過判斷這兩根線上的電位差來得到總線電平, CAN 總線電平分為顯性電平和隱性電平兩種。顯性電平表示邏輯“0”,此時 CAN_H 電平比 CAN_L 高,分別為 3.5V 和 1.5V,電位差為 2V。隱形電平表示邏輯“1”,此時 CAN_H 和 CAN_L 電壓都為 2.5V 左右,電位差為 0V。
CAN 總線就通過顯性和隱形電平的變化來將具體的數據發送出去,如圖 66.1.2.1 所示:
CAN 總線上沒有節點傳輸數據的時候一直處于隱性狀態,也就是說總線空閑狀態的時候一直處于隱性。 CAN 網絡中的所有單元都通過 CAN_H 和 CAN_L 這兩根線連接在一起,
如圖66.1.2.2 所示:
途中所有的 CAN 節點單元都采用 CAN_H 和 CAN_L 這兩根線連接在一起, CAN_H 接CAN_H、 CAN_L 接 CAN_L, CAN 總線兩端要各接一個 120Ω的端接電阻,用于匹配總線阻抗,吸收信號反射及回撥,提高數據通信的抗干擾能力以及可靠性。CAN 總線傳輸速度可達 1Mbps/S,最新的 CAN-FD 最高速度可達 5Mbps/S,甚至更高,CAN-FD 不在本章討論范圍,感興趣的可以自行查閱相關資料。 CAN 傳輸速度和總線距離有關,總線距離越短,傳輸速度越快。
2)CAN總線協議
通過 CAN 總線傳輸數據是需要按照一定協議進行的, CAN 協議提供了 5 種幀格式來傳輸數據:數據幀、遙控幀、錯誤幀、過載幀和幀間隔。其中數據幀和遙控幀有標準格式和擴展格式兩種,標準格式有 11 位標識符(ID),擴展格式有 29 個標識符(ID)。
這 5 中幀的用途見表66.1.3.1:
a)數據幀
數據幀由 7 段組成:
①、幀起始,表示數據幀開始的段。
②、仲裁段,表示該幀優先級的段。
③、控制段,表示數據的字節數及保留位的段。
④、數據段,數據的內容,一幀可發送 0~8 個字節的數據。
⑤、 CRC 段,檢查幀的傳輸錯誤的段。
⑥、 ACK 段,表示確認正常接收的段。
⑦、幀結束,表示數據幀結束的段。
數據幀結構如圖 66.1.3.1 所示:
圖 66.1.3.1 給出了數據幀標準格式和擴展格式兩種幀結構,圖中 D 表示顯性電平 0、 R 表示隱性電平 1, D/R 表示顯性或隱性,也就是 0 或 1,我們來簡單分析一下數據幀的這 7 個段。
①、幀起始
幀起始很簡單,標準格式和擴展格式都是由一個位的顯性電平 0 來表示幀起始。
②、仲裁段
仲裁段表示幀優先級,仲裁段結構如圖 66.1.3.2 所示:
標準格式和擴展格式的仲裁段不同,從圖 66.1.3.2 可以看出,標準格式的 ID 為 11 位,發送順序是從 ID10 到 ID0,最高 7 位 ID10~ID4 不能全為隱性(1),也就是禁止 0X1111111XXXXX這樣的 ID。擴展格式的 ID 為 29 位,基本 ID 從 ID28 到 ID18,擴展 ID 由 ID17 到 ID0,基本ID 與標準格式一樣,禁止最高 7 位都為隱性。
③、 控制段
控制段由 6 個位構成,表示數據段的字節數,標準格式和擴展格式的控制段略有不同,如圖 66.1.3.3 所示:
圖 66.1.3.3 中 r1 和 r0 為保留位,保留位必須以顯性電平發送。 DLC 為數據長度,高位在前, DLC 段有效值范圍為 0~8。
④、數據段
數據段也就是幀的有效數據,標準格式和擴展格式相同,可以包含 0~8 個字節的數據,從最高位(MSB)開始發送,結構如圖 66.1.3.4 所示:
注意,圖 66.1.3.4 中數據段的 0~64 為 bit,對應到字節就是 0~8 字節。
⑤、 CRC 段
CRC 段保存 CRC 校準值,用于檢查幀傳輸錯誤,標準格式和擴展格式相同, CRC 段結構如圖 66.1.3.5 所示:
從圖 66.1.3.5 可以看出, CRC 段由 15 位的 CRC 值與 1 位的 CRC 界定符組成。 CRC 值的計算范圍包括:幀起始、仲裁段、控制段、數據段,接收方以同樣的算法進行計算,然后用計算得到的 CRC 值與此 CRC 段進行比較,如果不一致的話就會報錯。
⑥、 ACK 段
ACK 段用來確認接收是否正常,標準格式和擴展格式相同, ACK 段結構如圖 66.1.3.6 所示:
從圖 66.1.3.7 可以看出, ACK 段由 ACK 槽(ACK Slot)和 ACK 界定符兩部分組成。 發送單元的 ACK,發送 2 個隱性位,而接收到正確消息的單元在 ACK 槽(ACK Slot)發送顯性位,通知發送單元正常接收結束,這個過程叫發送 ACK/返回 ACK。發送 ACK 的是所有接收單元中接收到正常消息的單元, 所謂正常消息是指不含填充錯誤、格式錯誤、 CRC 錯誤的消息,這些接收單元既不處于總線關閉態也不處于休眠態的所有接收單元中。
⑦、幀結束
最后就是幀結束段,標準格式和擴展格式相同,幀結束段結構如圖 66.1.3.7 所示:
從圖 66.1.3.7 可以看出,幀結束段很簡單,由 7 位隱性位構成。
b)遙控幀
接收單元向發送單元請求數據的時候就用遙控幀,遙控幀由 6 個段組成:
①、幀起始,表示數據幀開始的段。
②、仲裁段,表示該幀優先級的段。
③、控制段,表示數據的字節數及保留位的段。
④、 CRC 段,檢查幀的傳輸錯誤的段。
⑤、 ACK 段,表示確認正常接收的段。
⑥、幀結束,表示數據幀結束的段。
遙控幀結構如圖 66.1.3.8 所示:
從圖 66.1.3.8 可以看出,遙控幀結構基本和數據幀一樣,最主要的區別就是遙控幀沒有數據段。遙控幀的 RTR 位為隱性的,數據幀的 RTR 位為顯性,因此可以通過 RTR 位來區分遙控幀和沒有數據的數據幀。遙控幀沒有數據,因此 DLC 表示的是所請求的數據幀數據長度,遙控幀的其他段參考數據幀的描述即可。
c) 錯誤幀
當接收或發送消息出錯的時候使用錯誤幀來通知,錯誤幀由錯誤標志和錯誤界定符兩部分
組成,錯誤幀結構如圖 66.1.3.9 所示
錯誤標志有主動錯誤標志和被動錯誤標志兩種,主動錯誤標志是 6 個顯性位,被動錯誤標志是 6 個隱性位,錯誤界定符由 8 個隱性位組成。
d)過載幀
接收單元尚未完成接收準備的話就會發送過載幀,過載幀由過載標志和過載界定符構成,過載幀結構如圖 66.1.3.10 所示:
過載標志由 6 個顯性位組成,與主動錯誤標志相同,過載界定符由 8 個隱性位組成,與錯誤幀中的錯誤界定符構成相同。
e) 幀間隔
幀間隔用于分隔數據幀和遙控幀,數據幀和遙控幀可以通過插入幀間隔來將本幀與前面的任何幀隔開,過載幀和錯誤幀前不能插入幀間隔,幀間隔結構如圖 66.1.3.11 所示:
圖 66.1.3.11 中間隔由 3 個隱性位構成,總線空閑為隱性電平,長度沒有限制,本狀態下表示總線空閑,發送單元可以訪問總線。延遲發送由 8 個隱性位構成,處于被動錯誤狀態的單元發送一個消息后的幀間隔中才會有延遲發送。
f)CAN 速率
CAN 總線以幀的形式發送數據,但是最終到總線上的就是“0”和“1”這樣的二進制數據,這里就涉及到了通信速率,也就是每秒鐘發送多少位數據,前面說了 CAN2.0 最高速度為1Mbps/S。對于 CAN 總線,一個位分為 4 段:
①、同步段(SS)
②、傳播時間段(PTS)
③、相位緩沖段 1(PBS1)
④、相位緩沖段 2(PBS2)
這些段由 Tq(Time Quantum)組成, Tq 是 CAN 總線的最小時間單位。幀由位構成,一個位由 4 個段構成,每個段又由若干個 Tq 組成,這個就是位時序。 1 位由多少個 Tq 構成、每個段又由多少個 Tq 構成等,可以任意設定位時序。通過設定位時序,多個單元可同時采樣,也可任意設定采樣點。 各段的作用和 Tq 數如圖 66.1.4.1 所示:
1 個位的構成如圖 66.1.4.2 所示:
圖 66.1.4.2 中的采樣點是指讀取總線電平,并將讀到的電平作為位值的點。位置在 PBS1結束處。根據這個位時序,我們就可以計算 CAN 通信的波特率了。具體計算方法,我們等下再介紹,前面提到的 CAN 協議具有仲裁功能,下面我們來看看是如何實現的。
在總線空閑態,最先開始發送消息的單元獲得發送權。當多個單元同時開始發送時,各發送單元從仲裁段的第一位開始進行仲裁。連續輸出顯性電平最多的單元可繼續發送。實現過程,如圖 66.1.4.3 所示:
圖 66.1.4.3 中,單元 1 和單元 2 同時開始向總線發送數據,開始部分他們的數據格式是一樣的,故無法區分優先級,直到 T 時刻,單元 1 輸出隱性電平,而單元 2 輸出顯性電平,此時單元 1 仲裁失利,立刻轉入接收狀態工作,不再與單元 2 競爭,而單元 2 則順利獲得總線使用權,繼續發送自己的數據。這就實現了仲裁,讓連續發送顯性電平多的單元獲得總線使用權。
關于 CAN 協議就講到這里,關于 CAN 協議更詳細的內容請參考《CAN 入門教程》。
3)32對CAN總線協議的硬件實現
在 STM32 互聯型產品中,帶有 2 個 CAN 控制器,而我們使用的 STM32F103ZET6 屬于增強型,不是互聯型,只有 1 個 CAN 控制器。雙 CAN 的框圖如圖 31.1.10 所示:
CAN 接收到的有效報文,被存儲在 3 級郵箱深度的 FIFO 中。 FIFO 完全由硬件來管理,從而節省了 CPU 的處理負荷,簡化了軟件并保證了數據的一致性。
更多詳情:看STM32F1 開發指南(庫函數版)
2、I2C總線- - -串行- - -內部總線- - -cpu中的主干道
1)I2C總線特性
I2C總線是由NXP(原PHILIPS)公司設計,有十分簡潔的物理層定義,其特性如下:
a)只要求兩條總線線路:一條串行數據線SDA(Serial data line),一條串行時鐘線SCL(Serial clock line)serial 連續的;連載的;
b)每個連接到總線的器件都可以通過唯一的地址和一直存在的簡單的主機/從機關系軟件設定地址,主機可以作為主機發送器或主機接收器;
c)它是一個真正的多主機總線,如果兩個或更多主機同時初始化,數據傳輸可以通過沖突檢測和仲裁防止數據被破壞;
d)串行的8 位雙向數據傳輸位速率在標準模式下可達100kbit/s,快速模式下可達400kbit/s,高速模式下可達3.4Mbit/s;
e)連接到相同總線的IC 數量只受到總線的最大電容400pF 限制。
其典型的接口連線如下:
對于主控SOC或MCU,I2C 是支持多從機的,也就是 一個 I2C 控制器下可以掛多個 I2C 從設備 (Device A,(Device B,Device C),這些不同的 I2C從設備有不同的器件地址,這樣 I2C 主控制器就可以通過 I2C 設備的器件地址訪問指定的 I2C設備了
2)I2C總線協議
a)起始位
顧名思義,也就是 I2C 通信起始標志,通過這個起始位就可以告訴 I2C 從機,“我”要開始進行 I2C 通信了。在 SCL 為 高電平 的時候, SDA 出現 下降沿 就表示為起始位,如圖 26.1.1.2 所示:
b)停止位
停止位就是停止 I2C 通信的標志位,和起始位的功能相反。在 SCL 位 高電平 的時候, SDA出現 上升沿 就表示為停止位,如圖 26.1.1.3 所示
c)數據傳輸
I2C 總線在數據傳輸的時候要保證在 SCL 高電平期間, SDA 上的數據穩定,因此 SDA 上的數據變化只能在 SCL 低電平期間發生 ,如圖 26.1.1.4 所示:
d)應答信號
當 I2C 主機發送完 8 位數據以后會將 SDA 設置為輸入狀態,等待 I2C 從機應答,也就是等到 I2C 從機告訴主機它接收到數據了。應答信號是由從機發出的,主機需要提供應答信號所需的時鐘,主機發送完 8 位數據以后緊跟著的一個時鐘信號就是給應答信號使用的。 從機通過將 SDA 拉低來表示發出應答信號,表示通信成功,否則表示通信失敗 。
AT24C02(可擦除可編程只讀存儲器)有 三位存儲空間( A2 A1 A0) 進一步確定I2C設備的地址。說是進一步確定,是因為對于這類的I2C設備來說
其地址的一部分已經是確定好了的。
例如:數據手冊上寫道:
Device Address
1K/2K 1 0 1 0 A2 A1 A0 R/W
也就是說對于改I2C設備來說,地址的高8位已經確定了為1010,而低四位則有A2 ----A0來確定, R/W來確定讀寫方向,讀還是寫。
例如,我們把A0 --A3全部拉低(出廠一般默認把A0 --A3全部拉低),則該設備的地址為0xA0.
在ARM中,讀寫方向是用寄存器的單獨一位來確定的,有一個7位的域用來保存設備地址。
所以該I2C設備在ARM I2C總線上的地址為0xA0 右移一位 0x50.即1010 0000(B)右移一位,變成101 0000(B)
如果A0–A2 有其他選擇的話,則可以根據上述原則求得設備地址。
e)I2C 寫時序
主機通過 I2C 總線與從機之間進行通信不外乎兩個操作:寫和讀, I2C 總線單字節寫時序如圖 26.1.1.5 所示:
借助用聲波以空氣為總線,進行傳播;形象化電信號或光信號在總線上傳播。
圖 26.1.1.5 就是 I2C 寫時序,我們來看一下寫時序的具體步驟:
1)、開始信號。
2)、發送 I2C 設備地址,每個 I2C 器件都有一個設備地址,通過發送具體的設備地址來決定訪問哪個 I2C 器件。這是一個 8 位的數據,其中高 7 位是設備地址,最后 1 位是讀寫位,為1 的話表示這是一個讀操作,為 0 的話表示這是一個寫操作。
3)、 I2C 器件地址后面跟著一個讀寫位,為 0 表示寫操作,為 1 表示讀操作。
4)、從機發送的 ACK 應答信號。
5)、重新發送開始信號。
6)、發送要寫寫入數據的寄存器地址。
7)、從機發送的 ACK 應答信號。
8)、發送要寫入寄存器的數據。
9)、從機發送的 ACK 應答信號。
10)、停止信號。
11)注意:不處理應答信號時OLED顯示屏,體現了設備對芯片總線的協議的靈活匹配
f)I2C 讀時序
I2C 總線單字節讀時序如圖 26.1.1.6 所示
I2C 單字節讀時序比寫時序要復雜一點,讀時序分為 4 大步,第一步是發送設備地址,第二步是發送要讀取的寄存器地址,第三步重新發送設備地址,最后一步就是 I2C 從器件輸出要讀取的寄存器值,我們具體來看一下這幾步。
1)、主機發送起始信號。
2)、主機發送要讀取的 I2C 從設備地址。
3)、讀寫控制位,因為是向 I2C 從設備發送數據,因此是寫信號。
4)、從機發送的 ACK 應答信號。
5)、重新發送 START 信號。
6)、主機發送要讀取的寄存器地址。
7)、從機發送的 ACK 應答信號。
8)、重新發送 START 信號。
9)、重新發送要讀取的 I2C 從設備地址。
10)、讀寫控制位,這里是讀信號,表示接下來是從 I2C 從設備里面讀取數據。
11)、從機發送的 ACK 應答信號。
12)、從 I2C 器件里面讀取到的數據。
13)、主機發出 NO ACK 信號,表示讀取完成,不需要從機再發送 ACK 信號了。
14)、主機發出 STOP 信號,停止 I2C 通信。
g)I2C 多字節讀寫時序
有時候我們需要讀寫多個字節,多字節讀寫時序和單字節的基本一致,只是在讀寫數據的時候可以連續發送多個自己的數據,其他的控制時序都是和單字節一樣的。
3)32對I2C總線協議的硬件實現
三、針對某特定的總線的簡述
1、SPI
串行外設接口(SPI)允許芯片與外部設備以全雙工、同步、串行方式通信。
整體的傳輸大概可以分為以下幾個過程:
- 主機先將NSS信號拉低,這樣保證開始接收數據;
- 當接收端檢測到時鐘的邊沿信號時,它將立即讀取數據線上的信號,這樣就得到了一位數據(1bit);
- 主機發送到從機時:主機產生相應的時鐘信號,然后數據一位一位地將從MOSI信號線上進行發送到從機;
- 主機接收從機數據:如果從機需要將數據發送回主機,則主機將繼續生成預定數量的時鐘信號,并且從機會將數據通過MISO信號線發送;
有一個有意思的滾動特征:基于移位寄存器。可用在特定場合減少代碼量。
下圖顯示了單個主機和單個從機之間的典型SPI連接。
SPI協議詳解(圖文并茂+超詳細)
2、USB
USB功能描述
1)端點
每個USB設備都有一個唯一的設備地址,設備地址是設備連接上主機時由主機分配的,主機主要依靠這個設備地址對USB設備進行訪問。但是在設備內部地址會被分的更細,設備會分出一些端點來,每個端點在設備都會有唯一的端點號,這個端點號是設計設備時給定的。如端點0,端點1等。一個設備最多可以包含16個端點,每個端點的地址為0-15。(網上也有說幾十個的,有待考究)
其中每個端點地址對應一個方向。例如端點3-IN,端點3-OUT,這兩個含義完全不同。但是需要注意其中的一個特殊端點–端點0,每個USB設備必須要有一個端點0,其作用為對設備枚舉和對設備進行一些基本的控制功能,端點0也被稱為控制端點。并且它與其他的端點還有一個不同之處在于端點0的數據傳輸方向是雙向的,即端點0既可以給主機發送數據,也可以接收主機發送過來的數據,而其它端點均為單向。
雖然有16個端點,但通常我們只用到3個,如下:
1)、EP0:做傳輸配置和控制信息;
2)、EP1:做數據輸入IN_EP;
3)、EP2:做數據輸出OUT_EP。
2)四條線
一條USB的傳輸線分別由地線、電源線、D+、D-四條線構成,D+和D-是差分輸入線,它使用的是3.3V的電壓(注意哦,與CMOS的5V電平不同),而電源線和地線可向設備提供5V電壓,最大電流為500MA(可以在編程中設置的,至于硬件的實現機制,就不要管它了)。
3)其他
USB模塊為PC主機和微控制器所實現的功能之間提供了符合USB規范的通信連接。 PC主機和微控制器之間的數據傳輸是通過共享一專用的數據緩沖區來完成的,該數據緩沖區能被USB外設直接訪問。這塊專用數據緩沖區的大小由所使用的端點數目和每個端點最大的數據分組大小所決定,每個端點最大可使用512字節緩沖區,最多可用于16個單向或8個雙向端點。 USB模塊同PC主機通信,根據USB規范實現令牌分組的檢測,數據發送/接收的處理,和握手分組的處理。整個傳輸的格式由硬件完成,其中包括CRC的生成和校驗。
每個端點都有一個緩沖區描述塊,描述該端點使用的緩沖區地址、大小和需要傳輸的字節數。當USB模塊識別出一個有效的功能/端點的令牌分組時, (如果需要傳輸數據并且端點已配置)隨之發生相關的數據傳輸。 USB模塊通過一個內部的16位寄存器實現端口與專用緩沖區的數據交換。在所有的數據傳輸完成后,如果需要,則根據傳輸的方向,發送或接收適當的握手分組。在數據傳輸結束時, USB模塊將觸發與端點相關的中斷,通過讀狀態寄存器和/或者利用不同的中斷處理程序,微控制器可以確定:
● 哪個端點需要得到服務
● 產生如位填充、格式、 CRC、協議、缺失ACK、緩沖區溢出/緩沖區未滿等錯誤時,正在進行的是哪種類型的傳輸。USB模塊對同步傳輸和高吞吐量的批量傳輸提供了特殊的雙緩沖區機制,在微控制器使用一個緩沖區的時候,該機制保證了USB外設總是可以使用另一個緩沖區。在任何不需要使用USB模塊的時候,通過寫控制寄存器總可以使USB模塊置于低功耗模(SUSPEND模式)。在這種模式下,不產生任何靜態電流消耗,同時USB時鐘也會減慢或停止。通過對USB線上數據傳輸的檢測,可以在低功耗模式下喚醒USB模塊。也可以將一特定的中斷輸入源直接連接到喚醒引腳上,以使系統能立即恢復正常的時鐘系統,并支持直接啟動或停止
時鐘系統。
USB通信協議詳解看時注意:所有USB設備都會響應主機向設備默認控制管道(Control Pipe)上發送的請求(requests)。 這些請求是使用控制傳輸(control transfers)進行的。請求和請求的參數通過Setup packet發送給設備
3、USART
發送端的UART將來自控制設備(如CPU)的并行數據轉換為串行數據,以串行方式將其發送到接收端的UART,然后由接收端的UART將串行數據轉換為并行數據以用于接收設備的正常處理。
這里只需要兩條線RX/TX即可在兩個UART之間傳輸數據。
串行數據格式,即 協議層
傳輸過程
- 發送端UART從數據總線轉換并行數據
- 發送端UART將起始位,奇偶校驗位和停止位添加到數據包中
- 整個數據包從發送端UART串行發送到接收端UART;接收端UART按照 預先配置好的波特率對數據線進行采樣
- 接收端UART解析接收的數據,丟棄數據包中的起始位,奇偶校驗位和停止位
- 接收UART將串行數據轉換回并行數據,并將其傳輸到接收端的數據總線
UART協議快速掃盲(圖文并茂+超詳細)
四、UART、SPI 、I2C通信方式對比圖
| 信號線數目 | 3根,RX、TX、GND | 4根,SDO、SDI、SCLK、SS | 2根,SDA、SCLK |
| 設備從屬關系 | 兩MCU上的UART都可以人為選擇是接收端還是發送端 | 存在主從設備。SPI用片選信號選擇從機 | 存在主從設備。IIC用地址選擇從機。 |
| 通信方式 | 全雙工通信 | 全雙工通信 | 半雙工通信 |
| 通信速率 | 速度慢 | 比I2C總線要快,速度可達到幾Mbps | I2C的速度比SPI慢 |
| 應用領域 | 1、UART常用于控制計算機與串行設備的芯片2、就是我們經常所說的串口,基本都用于調試。 | 主要應用在EEPROM,FLASH,實時時鐘,AD轉換器,還有數字信號處理器和數字信號解碼器之間 | I2C一般是用在同一個板子上的2個IC之間的通信 ,它可以替代標準的并行總線,連接各種集成電路和功能模塊。 |
| 傳輸距離 | I2C需要有雙向IO的支持,而且使用上拉電阻,抗干擾能力較弱,一般用于同一板卡上芯片之間的通信,較少用于遠距離通信 | ||
| 通信特征 | 異步(沒有),一幀可以傳5/6/7/8位 | 同步,SPI允許數據一位一位的傳送,甚至允許暫停。從最高位開始傳。 | 同步,電平信號,一次連續8bit。從最高位開始傳 |
| 協議復雜度 | 結構比較復雜 | SPI實現要比UART簡單,UART需要固定的波特率,就是說兩位數據的間隔要相等,而SPI則無所謂,因為它是有時鐘的協議。 | 協議比SPI復雜,但是連線比標準的SPI要少 |
| 對比 | 只能與一個設備相連 | 在點對點的通信中,SPI接口不需要進行尋址操作,且為全雙工通信,顯得簡單高效。在多個從器件的系統中,每個從器件需要獨立的使能信號,硬件上比I2C系統要稍微復雜一些。 | |
| 特色 | 不存在主從設備(相對SPI 、I2C的特色) | 滾動特征 | 主機可以讀寫從設備的各個寄存器 |
五、UART、RS232、RS485的區別
UART、RS232、RS485在串口通信中,主要區別是電平的不同
UART協議快速掃盲(圖文并茂+超詳細)
總結
以上是生活随笔為你收集整理的通讯协议集合- - -类比道路交通- - -一般肯定有数据电信号线和收发控制电信号线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 马克笔字体软件测试,广东文艺职业学院20
- 下一篇: 适配器模式(Adapter模式)详解