通信協議的基本概念
通信協議不難理解,就是兩個(或多個)設備之間進行通信,必須要遵循的一種協議。通信協議是指雙方實體完成通信或服務所必須遵循的規則和約定。通過通信信道和設備互連起來的多個不同地理位置的數據通信系統,要使其能協同工作實現信息交換和資源共享,它們之間必須具有共同的語言。交流什么、怎樣交流及何時交流,都必須遵循某種互相都能接受的規則。這個規則就是通信協議。
通訊方式分類
1、按照數據的傳送方式劃分
串行通訊與并行通訊
串行通訊:指設備之間通過少量數據信號線(一般是 8 根以下),地線以及控制信號線,按數據位形式一位一位地傳輸數據的通訊方式。
并行通訊:指使用 8、16、32 及 64 根或更多的數據線進行傳輸的通訊方式,同時傳輸多個數據位的數據。
兩者比較:在數據傳輸速率相同時,并行效率更高,可以傳輸更多數據量;而串行通訊節省成本。并行傳輸對同步要求較高,且隨著通訊速率的提高,信號干擾的問題會顯著影響通訊性能。比較如下:
2、按數據通訊方向劃分
全雙工、半雙工、單工通訊
3、按照數據通訊的同步方式/是否使用時鐘信號進行劃分
同步通訊和異步通訊
同步通訊:收發設備雙方會使用一根信號線表示時鐘信號,在時鐘信號的驅動下雙方進行協調,同步數據。通訊中通常雙方會統一規定在時鐘信號的上升沿或下降沿對數據線進行采樣
異步通訊:不使用時鐘信號進行數據同步,直接在數據信號中穿插一些同步用的信號位,或者把主體數據進行打包,以數據幀的格式傳輸數據,某些通訊中還需要雙方約定數據的傳輸速率,以便更好地同步。
兩者比較:在同步通訊中,數據信號所傳輸的內容絕大部分就是有效數據,而異步通訊中會包含有幀的各種標識符,所以同步通訊的效率更高,但是同步通訊雙方的時鐘允許誤差較小,而異步通訊雙方的時鐘允許誤差較大。
4、按照通訊速率
比特率和波特率
比特率(Bitrate):每秒鐘傳輸的二進制位數,單位為比特每秒(bit/s)。
波特率(Baudrate):表示每秒鐘傳輸了多少個碼元
三、串口協議
USART——串口通訊
包括RS232、RS499、RS423、RS422和RS485等接口規范和標準規范
串口通訊協議的物理層及協議層:
1、物理層:串口通訊的物理層有很多標準及變種,主要有RS-232標準,一般只使用 RXD、TXD 以及 GND 三條信號線,直接傳輸數據信號。
2、協議層:串口通訊的數據包由發送設備通過自身的 TXD 接口傳輸到接收設備的 RXD 接口。在串口通訊的協議層中,規定了數據包的內容,它由啟始位、主體數據、校驗位以及停止位組成,通訊雙方的數據包格式要約定一致才能正常收發數據
數據校驗
奇校驗:有效數據和校驗位中“1”的個數為奇數;
偶校驗:有效數據和校驗位中“1”的個數為偶數;
3、USART——通用同步異步收發器(Universal Synchronous Asynchronous Receiver and Transmitter)
RX、TX
串行通信:以幀格式傳輸數據,即是一幀一幀的傳輸,每幀包含有起始信號、數據信息、停止信息,可能還有校驗信息。
字符幀:一個字符幀發送需要三個部分:起始位+數據幀+停止位。起始位是一個位周期的低電平,位周期就是每一位占用的時間;數據幀就是我們要發送的 8 位或 9 位數據,數據是從最低位開始傳輸的;停止位是一定時間周期的高電平。
I2C通訊協議
I2C通訊協議(Inter-Integrated Circuit):由 Phiilps 公司開發的,由于它引腳少,硬件實現簡單,可擴展性強,不需要 USART、CAN 等通訊協議的外部收發設備,現在被廣泛地使用在系統內多個集成電路(IC)間的通訊。
1、物理層:雙向串行數據線(SDA),串行時鐘線(SCL)
(1) 它是一個支持設備的總線。“總線”指多個設備共用的信號線。在一個 I2C 通訊總線中,可連接多個 I2C 通訊設備,支持多個通訊主機及多個通訊從機。
(2) 一個 I2C 總線只使用兩條總線線路,一條雙向串行數據線(SDA) ,一條串行時鐘線(SCL)。數據線即用來表示數據,時鐘線用于數據收發同步。
(3) 每個連接到總線的設備都有一個獨立的地址,主機可以利用這個地址進行不同設備之間的訪問。
(4) 總線通過上拉電阻接到電源。當 I2C 設備空閑時,會輸出高阻態,而當所有設備都空閑,都輸出高阻態時,由上拉電阻把總線拉成高電平。
(5) 多個主機同時使用總線時,為了防止數據沖突,會利用仲裁方式決定由哪個設備占用總線。
2、協議層:定義了通訊的起始和停止信號、數據有效性、響應、仲裁時鐘同步和地址廣播等環節
S:傳輸開始信號;SLAVE_ADDRESS:從機地址;R/W:傳輸方向選擇位,1為讀,0為寫
A/A:應答(ACK)或非應答(NACK)信號;P:停止傳輸信號
通訊過程:起始信號產生后,所有從機就開始等待主機緊接下來廣播 的從機地址信號(SLAVE_ADDRESS)。在 I2C 總線上,每個設備的地址都是唯一的,當主機廣播的地址與某個設備地址相同時,這個設備就被選中了,沒被選中的設備將會忽略之后的數據信號。根據 I2C協議,這個從機地址可以是 7位或 10位。在地址位之后,是傳輸方向的選擇位,該位為 0 時,表示后面的數據傳輸方向是由主機傳輸至從機,即主機向從機寫數據。該位為 1時,則相反,即主機由從機讀數據。從機接收到匹配的地址后,主機或從機會返回一個應答(ACK)或非應答(NACK)信號,只有接收到應答信號后,主機才能繼續發送或接收數據。
讀和寫數據:I2C通訊更常用的是復合格式,該傳輸過程有兩次起始信號(S)。一般在第一次傳輸中,主機通過 SLAVE_ADDRESS 尋找到從設備后,發送一段“數據”,這段數據通常用于表示從設備內部的寄存器或存儲器地址(注意區分它與 SLAVE_ADDRESS 的區別);在第二次的傳輸中,對該地址的內容進行讀或寫。第一次通訊是告訴從機讀寫地址,第二次則是讀寫的實際內容。
(2)通訊的起始和停止信號:起始和停止信號一般由主機產生
起始信號:SCL為高,SDA 高 —>低;
停止信號:SCL為高,SDA 低 —>高;
數據有效性:傳輸時,SCL 為高電平的時候 SDA 表示的數據有效,即此時的 SDA 為高電平時表示數據“1”,為低電平時表示數據“0”。當 SCL為低電平時,SDA 的數據無效,一般在這個時候 SDA 進行電平切換,為下一次表示數據做好準備。
3、I2C特性及架構
軟件模擬協議:直接控制芯片的兩個 GPIO 引腳,分別用作 SCL 及 SDA,按照上述信號的時序要求,直接控制引腳的輸出(若是接收數據時則讀取 SDA 電平),就可以實現 I2C 通訊。由直接控制 GPIO 引腳電平產生通訊時序時,需要由 CPU 控制每個時刻的引腳狀態。
硬件協議:STM32 的 I2C 片上外設專門負責實現 I2C 通訊協議,只要配置好該外設,它就會自動根據協議要求產生通訊信號,收發數據并緩存起來,CPU只要檢測該外設的狀態和訪問數據寄存器,就能完成數據收發。
SPI通訊協議
SPI(Serial Peripheral Interface):串行外圍設備接口,是一種高速全雙工的通信總線。
1、SPI物理層:3條總線及片選線(SCK、MOSI、MISO、片選線共4根)
(1)片選線:從設備選擇信號線,當有多個 SPI 從設備與 SPI 主機相連時,設備的其它信號線 SCK、MOSI及 MISO同時并聯到相同的 SPI總線上,即無論有多少個從設備,都共同只使用這 3 條總線;而每個從設備都有獨立的這一條 NSS 信號線,本信號線獨占主機的一個引腳,即有多少個從設備,就有多少條片選信號線。I2C 協議中通過設備地址來尋址、選中總線上的某個設備并與其進行通訊;而 SPI 協議中沒有設備地址,它使用 NSS 信號線來尋址,當主機要選擇從設備時,把該從設備的 NSS 信號線設置為低電平,該從設備即被選中片選有效,接著主機開始與被選中的從設備進行 SPI 通訊。所以SPI通訊以 NSS 線置低電平為開始信號,以 NSS 線被拉高作為結束信號。
(3) MOSI(Master Output,Slave Input):主設備輸出/從設備輸入引腳。主機的數據從這條信號線輸出,從機由這條信號線讀入主機發送的數據,即這條線上數據的方向為主機到從機。
(4) MISO(Master Input,Slave Output):主設備輸入/從設備輸出引腳。主機從這條信號線讀入數據,從機的數據由這條信號線輸出到主機,即在這條線上數據的方向為從機到主機。
2、協議層:SPI 協議定義了通訊的起始和停止信號、數據有效性、時鐘同步等環節。
SPI通訊時序:
(1)通訊的起始和停止信號:
起始信號:NSS 信號線由高變低,是 SPI 通訊的起始信號。NSS 是每個從機各自獨占的信號線,當從機在自己的 NSS 線檢測到起始信號后,就知道自己被主機選中了,開始準備與主機通訊。
停止信號:NSS 信號由低變高,是 SPI 通訊的停止信號,表示本次通訊結束,從機的選中狀態被取消。
(2)數據有效性:SPI 使用 MOSI 及 MISO 信號線來傳輸數據,使用 SCK 信號線進行數據同步。MOSI及 MISO 數據線在 SCK 的每個時鐘周期傳輸一位數據,且數據輸入輸出是同時進行的。MOSI 及 MISO 的數據在 SCK 的上升沿期間變化輸出,在 SCK的下降沿時被采樣。即在 SCK的下降沿時刻,MOSI及 MISO 的數據有效,高電平時表示數據“1”,為低電平時表示數據“0”。在其它時刻,數據無效,MOSI 及 MISO為下一次表示數據做準備。SPI每次數據傳輸可以 8 位或 16 位為單位,每次傳輸的單位數不受限制。
DMA——直接存儲器存取
DMA(Direct Memory Access):是單片機的一個外設,它的主要功能是用來搬數據,但是不需要占用 CPU,即在傳輸數據的時候,CPU 可以干其他的事情,好像是多線程一樣。數據傳輸支持從外設到存儲器或者存儲器到存儲器
1、DMA請求:如果外設要想通過 DMA 來傳輸數據,必須先給 DMA 控制器發送 DMA 請求,DMA收到請求信號之后,控制器會給外設一個應答信號,當外設應答后且 DMA 控制器收到應答信號之后,就會啟動 DMA的傳輸,直到傳輸完畢。
2、通道:DMA 具有 12 個獨立可編程的通道,其中 DMA1 有 7 個通道,DMA2 有 5 個通道,每個通道對應不同的外設的 DMA 請求。雖然每個通道可以接收多個外設的請求,但是同一
時間只能接收一個,不能同時接收多個。
3、仲裁器:當發生多個 DMA 通道請求時,就意味著有先后響應處理的順序問題,這個就由仲裁器理。
4、DMA 數據配置:DMA 傳輸數據的方向有三個——從外設到存儲器,從存儲器到外設,從存儲器到存儲器。
USART/I2C/SPI比較
1、通信速率比較:
SPI > I2C > UART
(1)同步通信>異步通信;
(2)同步通信時必須有一根時鐘線連接傳輸的兩端;
(3)都是串行通信方式,并行通信用于內部存儲間的通信,如flash;
(4)適合傳輸的距離和通信速率成反比關系;
2、連線方式:
SPI:2數據線、1時鐘線、1CS(設備片選線),串行同步通信全雙工;
I2C:1數據線、1時鐘線,串行同步通信半雙工,傳輸距離比UART短;
UART:2數據線、1地線,串行異步通信全雙工,傳輸距離比I2C長些;
(I2C接口是“器件間”接口,是在一塊板子之內傳輸數據)
(UART是 “設備間”接口,更多的是用于兩臺設備之間傳輸數據)
-
通信
+關注
關注
18文章
5880瀏覽量
135328
發布評論請先 登錄
相關推薦
評論