|
B站賬號:小光學(xué)嵌入式 ? 大家好哇!我是小光,嵌入式愛好者,一個想要成為系統(tǒng)架構(gòu)師的大二學(xué)生。 ?最近開始系統(tǒng)性補習(xí)STM32基礎(chǔ)知識,規(guī)劃有:串口通信,Github,Ucos等等。 ?今天總結(jié)一下串口通信,后面再在代碼實現(xiàn)做講解。 串口通信 1.工作原理 1.工作原理 2.傳輸步驟 3.UART優(yōu)缺點 1.傳輸步驟 2.SPI優(yōu)缺點 1.同步通信 2.異步通信 1.全雙工: 2.半雙工 1.串行通信 2.并行通信 串行與并行 全雙工與半雙工 同步通信和異步通信 一.SPI通信 二.UART通信 三.I2C通信 總結(jié) 串行與并行 1.串行通信 位通過單根線一一發(fā)送,下圖顯示了二進制(01000011)中字母“C”的串行傳輸。 當(dāng)時鐘線為高電平時,接收數(shù)據(jù)位,高電平為1,低電平為0。 ![]() 2.并行通信 數(shù)據(jù)位在導(dǎo)線中同時傳輸,下圖顯示了二進制(01000011)中字母“C”的并行傳輸: 的當(dāng)時鐘線為高電平時,8個數(shù)據(jù)位同時接受數(shù)據(jù),高電平為1,低電平為0 ![]() 所以UART、SPI、I2C都是串口通信,因為它們都是通過一根線作為數(shù)據(jù)線傳輸數(shù)據(jù)。 全雙工與半雙工 1.全雙工: 簡單來說,比如我們在打電話時,我們可以在同一時間說話,這就是全雙工通信; 2.半雙工 相對的,雖然半雙工也可以互相的通信,但是在同一時間只能單方向傳輸數(shù)據(jù); UART和SPI都是全雙工通信方式,因為他們的數(shù)據(jù)線都有兩根,即可以在同一時間A發(fā)數(shù)據(jù)給B,B也可以在這個時間發(fā)數(shù)據(jù)給A。如I2C通信,因為他只有一根數(shù)據(jù)線,所以他不能在同一時間雙向傳輸數(shù)據(jù)。 同步通信和異步通信 同步是阻塞模式,異步是非阻塞模式。 1.同步通信 。發(fā)送方發(fā)出數(shù)據(jù)后,等接收方發(fā)回響應(yīng)以后才發(fā)下一個數(shù)據(jù)包的通訊方式。 2.異步通信 。發(fā)送方發(fā)出數(shù)據(jù)后,不等接收方發(fā)回響應(yīng),接著發(fā)送下個數(shù)據(jù)包的通訊方式。 所以SPI和I2C都是同步通信,因為他們都有時鐘線,UART是異步通信方式,他只有兩個數(shù)據(jù)線,發(fā)送完數(shù)據(jù)不會確認(rèn)你是否接收到。 一.SPI通信 SPI可以無中斷傳輸數(shù)據(jù),可以連續(xù)地發(fā)送或接收任意數(shù)量的位。但是I2C和UART中,數(shù)據(jù)以數(shù)據(jù)包的形式發(fā)送,有限定位數(shù)。 在SPI設(shè)備中,設(shè)備分為主機控制設(shè)備(通常是微控制器)和從機(通常是傳感器,顯示器和存儲芯片)設(shè)備,從機從主機那獲取指令。 SPI信號線有四種: MOSI-信號線:主機輸出,從機輸入; MISO-信號線:主機輸入,從機輸出; SCLK-時鐘信號; SS/CS-片選信號; SPI協(xié)議特點 實際上,從機的數(shù)量受系統(tǒng)負(fù)載電容的限制,它會降低主機在電壓電平之間準(zhǔn)確切換的能力。 時鐘信號 每個時鐘周期傳輸一位數(shù)據(jù),因此數(shù)據(jù)傳輸?shù)乃俣热Q于時鐘信號的頻率。 時鐘信號由于是主機配置生成的,因此SPI通信始終由主機啟動。 設(shè)備共享時鐘信號的任何通信協(xié)議都稱為同步。SPI是一種同步通信協(xié)議,還有一些異步通信不使用時鐘信號。 例如在UART通信中,雙方都設(shè)置為預(yù)先配置的波特率,該波特率決定了數(shù)據(jù)傳輸?shù)乃俣群蜁r序。 片選信號 主機通過拉低從機的CS/SS來使能通信。主機可以與存在多個CS/SS引腳,允許主機與多個從機進行通信。 1.傳輸步驟 1.主機輸出時鐘信號 ![]() 2.主機拉低SS/CS引腳,激活從機 ![]() 3.主機通過MOSI將數(shù)據(jù)發(fā)送給從機 ![]() 4.如果需要相應(yīng),則從機通過MISO將數(shù)據(jù)返回給從機 ![]() 2.SPI優(yōu)缺點 優(yōu)點:無起始位和停止位,因此數(shù)據(jù)可以持續(xù)傳輸不會中斷;數(shù)據(jù)傳輸速率快(比I2C快幾乎兩倍)。獨立的MISO、MOSI可以同時發(fā)送和接收數(shù)據(jù)。 缺點:使用四根線(I2C使用兩根線),沒有信號接收成功的確認(rèn)(I2C由此功能),沒有任何形式的錯誤檢查(UART中的奇偶校驗位)。 二.UART通信 兩個UART直接相互通信。發(fā)送UART將控制設(shè)備(如CPU)的并行數(shù)據(jù)轉(zhuǎn)換位串行形式,以串行的形式將其發(fā)送到接收UART。只需要兩條線即可在兩個UART之間傳輸信息: ![]() UART屬于異步通信,沒有時鐘信號。它會在數(shù)據(jù)包中增加開始和停止位。這些位定義了數(shù)據(jù)包的開始和結(jié)束,因此接收UART知道何時讀取這些數(shù)據(jù)。 當(dāng)接收UART檢測到起始位時,它將以特定的波特率的頻率讀取(數(shù)據(jù)傳輸速度的度量),以每秒比特數(shù)(bps)表示。兩個UART必須以大約相同的波特率工作,發(fā)送的接收UART之間的波特率只能相差約10%。 1.工作原理 UART數(shù)據(jù)包包含有一個起始位,5到9個數(shù)據(jù)位(取決于UART),一個可選擇的奇偶檢驗位以及一個或兩個停止位: screen-capture 起始位 UART數(shù)據(jù)傳輸線通常在不傳輸數(shù)據(jù)時保持在高電平電平。開始傳輸時發(fā)送UART在一個時鐘周期內(nèi)將傳輸線從高電平拉低到低電平,當(dāng)接收UART檢測到高電壓轉(zhuǎn)換時,他開始以波特率的頻率讀取數(shù)據(jù)幀中的位。 數(shù)據(jù)幀 數(shù)據(jù)幀內(nèi)包含正在傳輸?shù)膶嶋H數(shù)據(jù)。使用奇偶校驗位是5-8位,不使用最多可以是9位。 校驗位 奇偶校驗位是接收UART判斷傳輸期間是否有任何數(shù)據(jù)更改的方式。接收UART讀取數(shù)據(jù)幀后,它將對值為1的數(shù)進行技術(shù),并且檢查總數(shù)是偶數(shù)還是奇數(shù),是否與數(shù)據(jù)相匹配。 停止位 向數(shù)據(jù)包的結(jié)尾發(fā)出信號,發(fā)送UART將數(shù)據(jù)傳輸線從低電壓驅(qū)動到高電壓至少兩位的時間。 2.傳輸步驟 1.發(fā)送UART從數(shù)據(jù)總線并行接收數(shù)據(jù) ![]() 2.發(fā)送UART將起始位、奇偶校驗位和停止位添加到數(shù)據(jù)幀。 ![]() 3.整個數(shù)據(jù)包從發(fā)送UART串行發(fā)送到接收UART。接收UART以預(yù)先配置的波特率對數(shù)據(jù)線進行采樣。 ![]() 4.接收UART丟棄數(shù)據(jù)幀中的起始位、奇偶校驗位和停止位: ![]() 5.接收UART將串行數(shù)據(jù)轉(zhuǎn)換回并行數(shù)據(jù),并將其傳輸?shù)浇邮斩说臄?shù)據(jù)總線: ![]() 3.UART優(yōu)缺點 優(yōu)點: 1.僅使用兩根線 2.異步通信,無需時鐘信號 3.具有奇偶校驗位以允許進行錯誤檢查、 4.只要雙方都設(shè)置好數(shù)據(jù)包的結(jié)構(gòu) 缺點: 1.數(shù)據(jù)幀的大小最大為9位 2.不支持多個從屬系統(tǒng)或多個系統(tǒng) 3.每個UART的波特率必須在彼此的10%之內(nèi) 三.I2C通信 半雙工通信,它結(jié)合了SPI和UART的優(yōu)點,可以將多個從機連接到單個主機(如SPI),也可以多個主機控制一個或多個從機。 接線: ![]() SDA–數(shù)據(jù)線 SCL–時鐘線 串行通信協(xié)議,需要時鐘同步信號并且由主機控制。 1.工作原理 I2C的數(shù)據(jù)傳輸是以多個msg的形式進行。每個msg包括:從機二進制地址幀、以及一個或者多個數(shù)據(jù)幀、開始條件和停止條件,讀/寫位和數(shù)據(jù)幀之間的ACK/NACK位: * ![]() ![]() 啟動條件 當(dāng)SCL為高電平時,SDA從高電平向低電平切換 停止條件 當(dāng)SCL是高電平時,SDA由低電平向高電平切換 地址幀 每個從屬設(shè)備唯一的7位或10位序列,用于主從設(shè)備之間的地址識別。 讀/寫位 一位,如果主機是向從機發(fā)送數(shù)據(jù)則為低電平,請求數(shù)據(jù)則為高電平 ACK/NACK 消息中的每個幀后均有一個ACK/NACK位。如果成功接收到地址幀或數(shù)據(jù)幀,接收設(shè)備會返回一個ACK位用于表示確認(rèn)。 尋址 不同于SPI的片選線,它是尋址確認(rèn)從機設(shè)備。 主機將要通信的從機地址發(fā)送給每個從機,然后每個從機將其與自己的地址進行匹配比較,如果匹配,他就向主機發(fā)送一個低電平ACK位。不匹配不執(zhí)行操作,SDA保持高電平。 讀/寫位 位于地址幀的末尾。如果主機要向從機發(fā)送數(shù)據(jù),則為低電平。如果是主機向從機發(fā)送請求數(shù)據(jù),則為高電平。 數(shù)據(jù)幀 當(dāng)主機檢測到從機的ACK位后,就可以發(fā)送一個數(shù)據(jù)幀了。數(shù)據(jù)幀始終為8位,每個數(shù)據(jù)幀后緊跟一個ACK/NACK,未驗證接收狀態(tài)。發(fā)送完數(shù)據(jù)發(fā)送停止條件。 傳輸步驟 1.在SCL線為高電平時,主機通過將SDA線從高電平切換到低電平來啟動總線通信。 2.主機向總線發(fā)送要與之通信的從機的7位或10位地址,以及讀/寫位 3.每個從機將主機發(fā)送的地址與其自己的地址進行比較。如果地址匹配,則從機通過將SDA線拉低一位返回一個ACK位。如果主機的地址與從機的地址不匹配,則從機將SDA線拉高。 4.主機發(fā)送或接收數(shù)據(jù)幀; 5.傳輸完每個數(shù)據(jù)幀后,接收設(shè)備將另一個ACK位返回給發(fā)送方,以確認(rèn)已成功接收到該幀; 6.隨后主機將SCL切換為高電平,然后再將SDA切換為高電平,從而向從機發(fā)送停止條件。 I2C優(yōu)點 1.僅僅使用兩根線 2.支持多個主機和從機 3.硬件比UART更簡單 I2C缺點 1.數(shù)據(jù)傳輸比SPI慢 2.數(shù)據(jù)幀大小限制為8位 總結(jié) 在不同的時候可以選擇使用不同的通信方式去完成一個項目,或者在使用一些傳感器的時候,他就是特定的通信方式,所以這些通信方式都要去了解去學(xué)習(xí)和實現(xiàn)的。 |
|
|