通信協議總結

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)

通信過程

  1. 空閑狀態
    當總線上的上出現連續的11位隱性電平,那么總線就處于空閑狀態。

  2. 數據傳輸
    每次發送數據前,節點都會監聽總線的狀態,如果總線狀態為空閑時,它就會立即向總線上發送自己的數據,這個數據里不僅有數據,還有本身的ID信息或者其他的控制指令,應稱為數據包(數據幀),也叫做報文

  3. 仲裁機制(利用線與和回讀機制

    以上只是節點1主動發送數據,但是萬一節點1和節點2同時向節點3發送數據的時候,如何判定先后呢?采用非破壞性位仲裁機制,即對各個消息的標識符(即ID號)進行逐位仲裁(比較),如果某個節點發送的消息仲裁獲勝,那么這個節點將獲取總線的發送權,仲裁失敗的節點則立即停止發送并轉變為監聽(接收)狀態。

    因為顯性電平會覆蓋隱性電平,兩個節點同時發送報文時,0會將1覆蓋(線與),而每個節點在發送完之后都會進行回讀操作:如果自己發的1,都回來的卻是0,那仲裁失敗,進入空閑狀態;自己發的和回讀的一樣則獲得總線控制權。( ID:000000 00010 比 000000 00011 的優先級要高)

在這里插入圖片描述

  1. 位時序
    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完成的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36667.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36667.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36667.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

十常侍亂政 | 第2集 | 愿領精兵五千,斬關入內,冊立新君,誅殺宦黨,掃清朝廷,以安天下 | 三國演義 | 逐鹿群雄

🙋大家好!我是毛毛張! 🌈個人首頁: 神馬都會億點點的毛毛張 📌這篇博客是毛毛張分享三國演義文學劇本中的經典臺詞和語句,本篇分享的是《三國演義》第Ⅰ部分《群雄逐鹿》的第2??集《十常侍亂政治》&am…

匯聚榮做拼多多運營第一步是什么?

匯聚榮做拼多多運營第一步是什么?在眾多電商平臺中,拼多多憑借其獨特的社交電商模式迅速崛起,吸引了大量消費者和商家的目光。對于希望在拼多多上開店的商家而言,了解如何進行有效運營是成功的關鍵。那么,匯聚榮做拼多多運營的第…

【Android面試八股文】Looper如何在子線程中創建?

文章目錄 一、Looper的幾個重要方法二、子線程中使用Looper的方式1三、子線程中使用Looper的方式23.1 使用HandlerThread實現3.2 HandlerThread源碼解析創建子線程的 Looper必須要通過 Looper.prepare()初始化looper,然后再通過 Looper.loop()方法讓 Loop運行起來。 那么具…

算法入門:二分查找及其Java實現

在程序開發中,算法是解決問題的核心。本篇博客將詳細講解一種高效的查找算法——二分查找,并通過Java代碼示例幫助你理解其實現和應用。 如果你覺得這篇文章對你有幫助,不要忘記點贊、收藏和關注我,這將是對我最大的支持和鼓勵&am…

VMware 最新的安全漏洞公告VMSA-2024-0013

#深度好文計劃# 一、摘要 2024年6月26日,VMware 發布了最新的安全漏洞公告 VMSA-2024-0013,修復了 VMware ESXi 和 VMware vCenter 中的多個安全漏洞。 VMSA-2024-0013:VMware ESXi 和 vCenter Server 更新修正了多個安全性漏洞 &#xff…

Unity3D 物體的運動

運動方式1 修改 position / localPosition ,可以讓物體運動 例如, Vector3 pos this.transform.localPosition; pos.z distance; this.transform.localPosition pos; 此時,小車向Z 方向運動 具體代碼如下 using System.Collection…

C語言入門課程學習筆記10:結構體聯合體位域

C語言入門課程學習筆記10 第48課 - 自定義數據類型(上)實驗-typedef實驗小結 第49課 - 自定義數據類型(中)實驗實驗小結 第50課 - 自定義數據類型(下)實驗實驗小結 第51課 - 多文件程序設計實驗實驗實驗小結…

uni-app picker多列選項

預期實現的效果&#xff1a; 選中后的效果&#xff1a; // Dom部分 <template><picker mode"multiSelector" :range"ssqRange" range-key"name" columnchange"ssqColumnChange" change"ssqChange" class"p…

研究發現GPT-4o等較新的多模態AI模型的安全機制有不足之處

在 ChatGPT 和類似的生成式人工智能模型推出后&#xff0c;很多人都在強調安全問題&#xff0c;政府也參與其中&#xff0c;OpenAI 甚至成立了一個超級協調小組&#xff0c;以阻止未來的人工智能失控&#xff0c;但由于對人工智能安全的發展方向存在分歧&#xff0c;該小組于今…

03邏輯門電路

分立門電路&#xff1a; 集成門電路&#xff1a; TTL門電路 MOS門電路&#xff1a;NMOS門電路、PMOS門電路、CMOS門電路 BICMOS門電路&#xff1a;CMOS的高輸入阻抗和TTL的高放大倍數的結合 向更低功耗、更高速度發展 MOS管的Rdson在可變電阻區的阻值也一般會小于1000歐姆 …

達夢數據庫的系統視圖v$locked_object

達夢數據庫的系統視圖v$locked_object 在達夢數據庫&#xff08;Dameng Database&#xff09;中&#xff0c;V$LOCKED_OBJECT 視圖提供了與數據庫中被鎖定對象相關的信息。這通常用于監控和診斷數據庫中的鎖定問題&#xff0c;幫助管理員了解哪些對象被鎖定了&#xff0c;以及…

1.回溯算法.基礎

1.回溯算法 基礎知識題目1.組合2.組合-優化3.組合總和|||4.電話號碼和字母組合5.組合總和6.組合總和II7.分割回文串8.復原IP地址 基礎知識 回溯法也可以叫做回溯搜索法&#xff0c;它是一種搜索的方式。回溯是遞歸的副產品&#xff0c;只要有遞歸就會有回溯 因為回溯的本質是窮…

Excel 宏錄制與VBA編程 —— 11、工作表及工作簿操作(附:Worksheets與Sheets區別)

代碼1 - Worksheets與Sheets區別 Worksheets表示普通工作表;Sheets即可表示普通工作表也可表示圖標工作表。 下面模塊中代碼結果是一樣的,大家理解時可結合上面區別說明進行了解 Sub Test()Worksheets("Sheet1").Range("A1").Value 100Sheets("Sheet…

BioCLIP:物種圖像的基礎視覺模型

從無人機到個人手機&#xff0c;各種相機收集的自然世界圖像是越來越豐富的生物信息來源。從圖像中提取生物相關信息用于科學的計算方法和工具激增&#xff0c;尤其是計算機視覺。然而&#xff0c;其中大多數都是為特定任務設計的&#xff0c;不容易適應或擴展到新的問題、環境…

【編程知識】什么是編譯型語言?什么是解釋型語言?

1.編譯型語言&#xff1a; 源代碼由編譯器編譯為機器代碼&#xff08;中間代碼&#xff09;&#xff0c;生成可執行文件&#xff0c;后面的執行無需編譯&#xff0c;可以直接運行&#xff0c;無需依賴源代碼或編譯器。 執行速度更快&#xff0c;因為在執行前已經有一步編譯階段…

運維團隊如何加強安全設備監控與日志管理

隨著信息技術的飛速發展&#xff0c;網絡安全問題日益凸顯&#xff0c;安全設備的監控和日志管理成為了運維團隊不可或缺的工作內容。本文將結合運維行業的實際需求&#xff0c;探討如何加強安全設備監控與日志管理&#xff0c;以提升系統的安全性和穩定性。 一、安全設備監控…

git 本地代碼管理

簡介 git 能實現本地代碼多個更改版本的管理和導出。 首先復制好項目&#xff08;參考 git clone 別人項目后正確的修改和同步操作 中的前三步&#xff09; 實操 克隆原始項目 首先&#xff0c;從遠程倉庫克隆項目到本地&#xff1a; git clone https://github.com/libo-huan…

【AI大模型】Transformers大模型庫(十二):Evaluate模型評估

目錄 一、引言 二、Evaluate模型評估 2.1 概述 2.2 使用方法 2.2.1 步驟1: 導入必要的庫 2.2.2 步驟2: 加載模型和分詞器 2.2.3 步驟3: 準備數據集 2.2.4 步驟4: 數據預處理 2.2.5 步驟5: 創建訓練和評估數據集 2.2.6 步驟6: 設置訓練參數并創建Trainer 2.2.7 步…

基于Flask開發的前后端交互項目(可用于期末大作業) MySQL數據庫 文件上傳 Spider爬蟲 Echarts可視化展示 JS動態

項目描述&#xff1a; 開發一個基于Flask框架開發的前后端交互項目&#xff0c;項目內容為 東京奧運會 。對各個需要填寫的字段做了數據驗證&#xff0c;非法信息會被JS攔截提醒不合法&#xff1b;還對未登錄就訪問做了攔截&#xff0c;阻止未登錄就訪問。 前端&#xff1a;HT…

idea 開發工具properties文件中的中文不顯示

用idea打開一個項目&#xff0c;配置文件propertise中的中文都不展示&#xff0c;如圖&#xff1a; 可修改idea配置讓中文顯示&#xff1a; 勾選箭頭指向的框即可&#xff0c;點擊應用保存&#xff0c;重新打開配置文件&#xff0c;顯示正常