单片机通信——spi、iic、uart
一、uart
? ? ? ? 通用異步收發(fā)器,就是常說的串口通信,常常用在異步通信并且是一種全雙工的通信方式,不需要嚴(yán)格的時(shí)間限制,兩個(gè)設(shè)備之間連線簡(jiǎn)單,往往只需要將RX,TX端交叉相連即可。現(xiàn)實(shí)中利用面很廣,多用于調(diào)試,在以后學(xué)習(xí)Linux驅(qū)動(dòng)開發(fā)時(shí)是非常重要的。uart的連接過程如下圖,很簡(jiǎn)潔明了。
?
? ? ? ? ?由圖可見,數(shù)據(jù)在總線和uart之間還是并行傳輸?shù)?#xff0c;但是兩個(gè)設(shè)備之間的uart之間就采取了單線的傳輸,在傳輸?shù)那?#xff0c;還會(huì)自動(dòng)的添加起始位、奇偶校驗(yàn)位、停止位。具體的傳輸過程如下圖:
?????????這樣對(duì)uart整個(gè)的工作流程就全部解刨開了,學(xué)習(xí)難度降了好多。在以前的文章里有手撕uart代碼的文章,有興趣的可以去看看。
?二、spi-串行外設(shè)接口
? ? ? ? 這是一種同步全雙工的傳輸方式,他的連線是這三種通信方式里面最多的,有一個(gè)clk串行時(shí)鐘、MOSI主設(shè)備輸出、MISO主設(shè)備輸入、cs從設(shè)備片選。他的缺點(diǎn)就是每個(gè)從設(shè)備都需要有一個(gè)cs口用來對(duì)其在傳輸時(shí)進(jìn)行選擇。在數(shù)據(jù)傳輸時(shí)還需要考慮傳輸時(shí)是低電平有效還是高電平有效、第一個(gè)下降沿有效還是第二個(gè)下降沿有效,相當(dāng)于有四種傳輸方式。內(nèi)部spi通信相當(dāng)于一個(gè)環(huán)路,輸出數(shù)據(jù)后又讀入數(shù)據(jù):
?
?具體讀和取數(shù)據(jù)的過程如下(網(wǎng)上找到很好地一張工作流程圖),需要16個(gè)脈沖才可以完成一個(gè)完整的讀取周期。
三、iic
? ? ? ? iic實(shí)現(xiàn)連線簡(jiǎn)單,只需要一個(gè)clk時(shí)鐘線和sda數(shù)據(jù)線即可,但是iic的協(xié)議相對(duì)復(fù)雜。如圖iic可以掛載多個(gè)設(shè)備,但是傳輸時(shí)只能有一個(gè)設(shè)備工作,iic是利用地址來選擇從機(jī)的,這點(diǎn)和spi不同,兩條線都有上拉電阻且都設(shè)為開漏輸出,目的是為了數(shù)據(jù)傳輸時(shí)的穩(wěn)定,也是一種規(guī)范,iic在高電平時(shí)是空閑狀態(tài)。在數(shù)據(jù)傳輸時(shí),clk在高電平的時(shí)候,SDA絕對(duì)不能發(fā)生改變,否則會(huì)發(fā)生錯(cuò)誤。
? ? ? ? ?在iic中想利用其收發(fā)數(shù)據(jù)必須會(huì)起始與終止信號(hào):在SCL為高期間? SDA : 由高到低,起始信號(hào)、?SDA:由低到高,終止信號(hào)。
?IIC一次最多可以掛載多少個(gè)設(shè)備呢?由iic地址決定,8位地址,減去1位廣播地址,是7位地址,2^7=128,但是地址0x00不用,那就是127個(gè)地址, 所以理論上可以掛127個(gè)從器件。但是IIC協(xié)議沒有規(guī)定總線上device最大數(shù)目,但是規(guī)定了總線電容不能超過400pF。管腳都是有輸入電容的,PCB上也會(huì)有寄生電容,所以會(huì)有一個(gè)限制。實(shí)際設(shè)計(jì)中經(jīng)驗(yàn)值大概是不超過8個(gè)器件。過多設(shè)備會(huì)導(dǎo)致信號(hào)傳輸速度變慢,這牽扯到模電方面的內(nèi)容,不過多解釋。
? ? ? ? 主設(shè)備對(duì)從設(shè)備可以進(jìn)行讀寫,主設(shè)備首先會(huì)發(fā)送7bit位的slave device地址,和1bit位的read或者write命令。
時(shí)序圖如下write:
read:?
?語言描述就是:
(1)write命令
如果為write命令,則主設(shè)備釋放總線(If the I2C-bus is free, both SDA and SCL lines should be both at High level),即SDA為高位;然后從設(shè)備拉低SDA,表示ACK主設(shè)備;然后主設(shè)備再發(fā)送8bit數(shù)據(jù),從設(shè)備再ACK(A),通信結(jié)束(P)。
寫寄存器的標(biāo)準(zhǔn)流程:
1. ? ?Master發(fā)起START
2. ? ?Master發(fā)送I2C addr(7bit)和w操作0(1bit),等待ACK
3. ? ?Slave發(fā)送ACK
4. ? ?Master發(fā)送reg addr(8bit),等待ACK
5. ? ?Slave發(fā)送ACK
6. ? Master發(fā)送data(8bit),即要寫入寄存器中的數(shù)據(jù),等待ACK
7. ? ?Slave發(fā)送ACK
8. ? ?第6步和第7步可以重復(fù)多次,即順序?qū)懚鄠€(gè)寄存器
9. ? ?Master發(fā)起STOP
(2)read命令
如果為read命令,則從設(shè)備先拉低SDA表示ACK主設(shè)備,然后再發(fā)送8bit數(shù)據(jù)。主設(shè)備拉低SDA表示ACK從設(shè)備(我已經(jīng)讀取8bit的數(shù)據(jù)了),之后結(jié)束。
讀寄存器的標(biāo)準(zhǔn)流程
1、Master發(fā)送I2Caddr(7bit)和 W操作1(1bit),等待ACK
2. ? ?Slave發(fā)送ACK
3. ? ?Master發(fā)送reg addr(8bit),等待ACK
4. ? ?Slave發(fā)送ACK
5. ? Master發(fā)起START
6. ? ?Master發(fā)送I2C addr(7bit)和 R操作1(1bit),等待ACK
7. ? ?Slave發(fā)送ACK
8. ? Slave發(fā)送data(8bit),即寄存器里的值
9. ? Master發(fā)送ACK
10. ? ?第8步和第9步可以重復(fù)多次,即順序讀多個(gè)寄存器
以上文字來源于以下鏈接:原文鏈接:https://blog.csdn.net/oqqHuTu12345678/article/details/72356722
四、三種通信方式對(duì)比圖
| 對(duì)比項(xiàng) | ? ? ? ? ?UART | ? ? ? ? ? ? ? ? ? ? ?SPI | ? ? ? ? ? ? I2C |
| 信號(hào)線數(shù)目 | 3根,RX、TX、GND | 4根,SDO、SDI、SCLK、SS | 2根,SDA、SCLK |
| 設(shè)備從屬關(guān)系 | ? ? ? ? ? ?—— | 存在主從設(shè)備。SPI用片選信號(hào)選擇從機(jī)? | 存在主從設(shè)備。IIC用地址選擇從機(jī)。 |
| 通信方式 | 全雙工通信 | 全雙工通信 | 半雙工通信 |
| 通信速率 | 速度慢 | 比I2C總線要快,速度可達(dá)到幾Mbps | I2C的速度比SPI慢 |
| 應(yīng)用領(lǐng)域 | 1、UART常用于控制計(jì)算機(jī)與串行設(shè)備的芯片 2、就是我們經(jīng)常所說的串口,基本都用于調(diào)試。 | 主要應(yīng)用在EEPROM,FLASH,實(shí)時(shí)時(shí)鐘,AD轉(zhuǎn)換器,還有數(shù)字信號(hào)處理器和數(shù)字信號(hào)解碼器之間 | I2C一般是用在同一個(gè)板子上的2個(gè)IC之間的通信 ,它可以替代標(biāo)準(zhǔn)的并行總線,連接各種集成電路和功能模塊。 |
| 傳輸距離 | I2C需要有雙向IO的支持,而且使用上拉電阻,抗干擾能力較弱,一般用于同一板卡上芯片之間的通信,較少用于遠(yuǎn)距離通信 | ||
| 通信特征 | 異步,一幀可以傳5/6/7/8位 | 同步,SPI允許數(shù)據(jù)一位一位的傳送,甚至允許暫停。從最高位開始傳。 | 同步,電平信號(hào),一次連續(xù)8bit。從最高位開始傳 |
| 協(xié)議復(fù)雜度 | 結(jié)構(gòu)比較復(fù)雜 | SPI實(shí)現(xiàn)要比UART簡(jiǎn)單,UART需要固定的波特率,就是說兩位數(shù)據(jù)的間隔要相等,而SPI則無所謂,因?yàn)樗怯袝r(shí)鐘的協(xié)議。 | 協(xié)議比SPI復(fù)雜,但是連線比標(biāo)準(zhǔn)的SPI要少 |
| 對(duì)比 | 只能與一個(gè)設(shè)備相連 | 在點(diǎn)對(duì)點(diǎn)的通信中,SPI接口不需要進(jìn)行尋址操作,且為全雙工通信,顯得簡(jiǎn)單高效。 在多個(gè)從器件的系統(tǒng)中,每個(gè)從器件需要獨(dú)立的使能信號(hào),硬件上比I2C系統(tǒng)要稍微復(fù)雜一些。 |
總結(jié)
以上是生活随笔為你收集整理的单片机通信——spi、iic、uart的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubantu18.10安装mysql
- 下一篇: 科视Christie DWU2022-H