单片机通信——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、GND | 4根,SDO、SDI、SCLK、SS | 2根,SDA、SCLK |
| 設備從屬關系 | ? ? ? ? ? ?—— | 存在主從設備。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、iic、uart的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubantu18.10安装mysql
- 下一篇: 科视Christie DWU2022-H