日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单片机通信——spi、iic、uart

發布時間:2023/12/15 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机通信——spi、iic、uart 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、uart

? ? ? ? 通用異步收發器,就是常說的串口通信,常常用在異步通信并且是一種全雙工的通信方式,不需要嚴格的時間限制,兩個設備之間連線簡單,往往只需要將RX,TX端交叉相連即可?,F實中利用面很廣,多用于調試,在以后學習Linux驅動開發時是非常重要的。uart的連接過程如下圖,很簡潔明了。

?

? ? ? ? ?由圖可見,數據在總線和uart之間還是并行傳輸的,但是兩個設備之間的uart之間就采取了單線的傳輸,在傳輸的前,還會自動的添加起始位、奇偶校驗位、停止位。具體的傳輸過程如下圖:

?????????這樣對uart整個的工作流程就全部解刨開了,學習難度降了好多。在以前的文章里有手撕uart代碼的文章,有興趣的可以去看看。

?二、spi-串行外設接口

? ? ? ? 這是一種同步全雙工的傳輸方式,他的連線是這三種通信方式里面最多的,有一個clk串行時鐘、MOSI主設備輸出、MISO主設備輸入、cs從設備片選。他的缺點就是每個從設備都需要有一個cs口用來對其在傳輸時進行選擇。在數據傳輸時還需要考慮傳輸時是低電平有效還是高電平有效、第一個下降沿有效還是第二個下降沿有效,相當于有四種傳輸方式。內部spi通信相當于一個環路,輸出數據后又讀入數據:

?

?具體讀和取數據的過程如下(網上找到很好地一張工作流程圖),需要16個脈沖才可以完成一個完整的讀取周期。

三、iic

? ? ? ? iic實現連線簡單,只需要一個clk時鐘線和sda數據線即可,但是iic的協議相對復雜。如圖iic可以掛載多個設備,但是傳輸時只能有一個設備工作,iic是利用地址來選擇從機的,這點和spi不同,兩條線都有上拉電阻且都設為開漏輸出,目的是為了數據傳輸時的穩定,也是一種規范,iic在高電平時是空閑狀態。在數據傳輸時,clk在高電平的時候,SDA絕對不能發生改變,否則會發生錯誤。

? ? ? ? ?在iic中想利用其收發數據必須會起始與終止信號:在SCL為高期間? SDA : 由高到低,起始信號、?SDA:由低到高,終止信號。

?IIC一次最多可以掛載多少個設備呢?由iic地址決定,8位地址,減去1位廣播地址,是7位地址,2^7=128,但是地址0x00不用,那就是127個地址, 所以理論上可以掛127個從器件。但是IIC協議沒有規定總線上device最大數目,但是規定了總線電容不能超過400pF。管腳都是有輸入電容的,PCB上也會有寄生電容,所以會有一個限制。實際設計中經驗值大概是不超過8個器件。過多設備會導致信號傳輸速度變慢,這牽扯到模電方面的內容,不過多解釋。

? ? ? ? 主設備對從設備可以進行讀寫,主設備首先會發送7bit位的slave device地址,和1bit位的read或者write命令。

時序圖如下write:

read:?

?語言描述就是:

(1)write命令

如果為write命令,則主設備釋放總線(If the I2C-bus is free, both SDA and SCL lines should be both at High level),即SDA為高位;然后從設備拉低SDA,表示ACK主設備;然后主設備再發送8bit數據,從設備再ACK(A),通信結束(P)。

寫寄存器的標準流程:

1. ? ?Master發起START

2. ? ?Master發送I2C addr(7bit)和w操作0(1bit),等待ACK

3. ? ?Slave發送ACK

4. ? ?Master發送reg addr(8bit),等待ACK

5. ? ?Slave發送ACK

6. ? Master發送data(8bit),即要寫入寄存器中的數據,等待ACK

7. ? ?Slave發送ACK

8. ? ?第6步和第7步可以重復多次,即順序寫多個寄存器

9. ? ?Master發起STOP

(2)read命令

如果為read命令,則從設備先拉低SDA表示ACK主設備,然后再發送8bit數據。主設備拉低SDA表示ACK從設備(我已經讀取8bit的數據了),之后結束。

讀寄存器的標準流程

1、Master發送I2Caddr(7bit)和 W操作1(1bit),等待ACK

2. ? ?Slave發送ACK

3. ? ?Master發送reg addr(8bit),等待ACK

4. ? ?Slave發送ACK

5. ? Master發起START

6. ? ?Master發送I2C addr(7bit)和 R操作1(1bit),等待ACK

7. ? ?Slave發送ACK

8. ? Slave發送data(8bit),即寄存器里的值

9. ? Master發送ACK

10. ? ?第8步和第9步可以重復多次,即順序讀多個寄存器

以上文字來源于以下鏈接:原文鏈接:https://blog.csdn.net/oqqHuTu12345678/article/details/72356722

四、三種通信方式對比圖

對比項? ? ? ? ?UART? ? ? ? ? ? ? ? ? ? ?SPI? ? ? ? ? ? I2C
信號線數目3根,RX、TX、GND4根,SDO、SDI、SCLK、SS2根,SDA、SCLK
設備從屬關系? ? ? ? ? ?——存在主從設備。SPI用片選信號選擇從機?存在主從設備。IIC用地址選擇從機。
通信方式全雙工通信全雙工通信半雙工通信
通信速率速度慢比I2C總線要快,速度可達到幾MbpsI2C的速度比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、iic、uart的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。