https://blog.csdn.net/oqqHuTu12345678/article/details/65445338 以下內(nèi)容均來(lái)源于網(wǎng)絡(luò)資源的學(xué)習(xí)整理,,如有侵權(quán),,請(qǐng)告知?jiǎng)h除。 參考博客 https://blog.csdn.net/xiaodingqq/article/details/80342459 https://blog.csdn.net/weiqifa0/article/details/8845281 https://www.zhihu.com/question/22632011 http://www.360doc.cn/article/13253385_330564821.html https://blog.csdn.net/zhuyongxin_6688/article/details/78001767(有圖,,薦) https://blog.csdn.net/Setul/article/details/78968242 目錄 一、名字
二、UART,、SPI,、I2C對(duì)比
1、速覽點(diǎn)(1)四條信號(hào)線:串行時(shí)鐘(SCLK),、串行數(shù)據(jù)輸出(SDO),、串行數(shù)據(jù)輸入(SDI)、片選線(SS),。(所謂的進(jìn)出,,是針對(duì)信號(hào)進(jìn)出主機(jī)而言) (2)SPI總線可以實(shí)現(xiàn)多SPI設(shè)備互相連接。提供時(shí)鐘的SPI設(shè)備為主設(shè)備(Master),,其他設(shè)備為從設(shè)備(Slave),。SCLK信號(hào)線只由主設(shè)備控制,從設(shè)備不能控制信號(hào)線,。 (3)在SPI總線上,,某一時(shí)刻可以出現(xiàn)多個(gè)從機(jī),但只能存在一個(gè)主機(jī),。主機(jī)通過(guò)片選線來(lái)確定要通信的從機(jī),。這就要求從機(jī)的MISO口具有三態(tài)特性,使得該口線在器件未被選通時(shí)表現(xiàn)為高阻抗,。 (4)主從設(shè)備間可以實(shí)現(xiàn)全雙工通信,,收發(fā)獨(dú)立,操作簡(jiǎn)單,,數(shù)據(jù)傳輸速率較高,,但需要占用主機(jī)較多的口線(每個(gè)從機(jī)都需要一根片選線),而且只支持單個(gè)主機(jī),,沒(méi)有指定的流控制,,沒(méi)有應(yīng)答機(jī)制確認(rèn)是否接收到數(shù)據(jù)。 (5)數(shù)據(jù)輸出通過(guò)SDO線,,數(shù)據(jù)在時(shí)鐘上沿或下沿時(shí)改變(即發(fā)送),,在緊接著的下沿或上沿被讀取,從而完成一位數(shù)據(jù)傳輸,。數(shù)據(jù)輸入也使用同樣原理,。因此,8位數(shù)據(jù)的傳輸,至少需要8次時(shí)鐘信號(hào)的改變(上沿和下沿為一次),。 (6)普通的串行通訊一次連續(xù)傳送至少8位數(shù)據(jù),,而SPI允許數(shù)據(jù)一位一位的傳送,甚至允許暫停,,因?yàn)镾CK時(shí)鐘線由主控設(shè)備控制,,當(dāng)沒(méi)有時(shí)鐘跳變時(shí),從設(shè)備不采集或傳送數(shù)據(jù),。也就是說(shuō),,主設(shè)備通過(guò)對(duì)SCK時(shí)鐘線的控制可以完成對(duì)通訊的控制。 (7)SPI接口在CPU和外圍低速器件之間進(jìn)行同步串行數(shù)據(jù)傳輸,,在主器件的移位脈沖下,,數(shù)據(jù)按位傳輸,高位在前(先傳,?),,低位在后,為全雙工通信,。 2,、數(shù)據(jù)傳輸(1)SPI在數(shù)據(jù)傳輸?shù)臅r(shí)候,需要確定兩件事情:
(2)兩個(gè)概念 CPOL:時(shí)鐘極性,表示SPI在空閑時(shí),,時(shí)鐘信號(hào)是高電平還是低電平,。 CPHA:時(shí)鐘相位,表示SPI設(shè)備是在在時(shí)鐘的上升沿采集還是下降沿采集,。 則SPI數(shù)據(jù)傳輸就有四種可能---按照標(biāo)準(zhǔn)的說(shuō)法,,SPI數(shù)據(jù)傳輸就有四種模式。 (3)四種模式
模式0(杠cs表示片選信號(hào)) 模式1 模式2 模式3 3,、spi讀寫(xiě)(1)SPI在硬件設(shè)計(jì)上采用的雙數(shù)據(jù)線制,,根據(jù)設(shè)計(jì),在SPI通信過(guò)程中,主從設(shè)備之間會(huì)形成一個(gè)數(shù)據(jù)環(huán)形鏈路——即主設(shè)備向從設(shè)備寫(xiě)一次數(shù)據(jù),,從設(shè)備就會(huì)回一次數(shù)據(jù)(至于從設(shè)備回復(fù)的數(shù)據(jù)是否有效,,則另當(dāng)別論——如果有效,主設(shè)備就把它讀入,,否則丟棄) (2)例子:假設(shè)上升沿發(fā)送,、下降沿接收、高位先發(fā)送,。 假設(shè)主機(jī)8位寄存器裝的是待發(fā)送的數(shù)據(jù)10101010 那么第一個(gè)上升沿時(shí),,數(shù)據(jù)將會(huì)是SDO=1,寄存器=0101010x 下降沿到來(lái)的時(shí)候,,SDI上的電平將存到主機(jī)的寄存器中的最低位(最右邊),,SDO上的電平將存到從機(jī)的寄存器的最低位(最右邊),則此時(shí)主機(jī)寄存器=0101010SDI(SDI表示1bit),,從機(jī)寄存器=1010101SDO,。 這樣在 8個(gè)時(shí)鐘脈沖以后,兩個(gè)寄存器的內(nèi)容互相交換一次,,這樣就完成里一個(gè)spi時(shí)序,。 假定主機(jī)和從機(jī)初始化就緒,并且主機(jī)的sbuff=0xaa=0b1010 1010,,從機(jī)的sbuff=0x55=0b0101 0101 下面將分步對(duì)SPI的8個(gè)時(shí)鐘周期的數(shù)據(jù)情況演示一遍 (1)上表示上升沿,、下表示下降沿,SDI,、SDO相對(duì)于主機(jī)而言的,。 (2)ss引腳作為主機(jī)時(shí),從機(jī)可以把它拉低,,被動(dòng)選為從機(jī),;作為從機(jī)時(shí),可以作為片選腳用,。 (3)根據(jù)以上分析,,一個(gè)完整的傳送周期是16位。因?yàn)橹鳈C(jī)首先要發(fā)送命令過(guò)去,,然后從機(jī)準(zhǔn)備數(shù)據(jù),,主機(jī)在下一個(gè)8位時(shí)鐘周期才把數(shù)據(jù)讀回來(lái)。
四,、IC之間總線:I2C1,、速覽點(diǎn)(1)由圖可知
(2)任何一個(gè)設(shè)備都能像主控器一樣工作,,并控制總線,但同一時(shí)刻只能有一個(gè)主控設(shè)備,。 (3)總線上的每一個(gè)設(shè)備都有一個(gè)獨(dú)一無(wú)二的地址,,根據(jù)設(shè)備的能力,作為發(fā)射器或接收器工作,。 (4)在它的協(xié)議體系中,,傳輸數(shù)據(jù)時(shí)都會(huì)帶上目的設(shè)備的設(shè)備地址,因此可以實(shí)現(xiàn)設(shè)備組網(wǎng),。 (5)連接到相同總線的IC 數(shù)量只受到總線的最大電容限制,。 (6)SDA傳輸數(shù)據(jù)是大端傳輸(高位先傳,低位后傳,?),,是以字節(jié)為單位的。
2,、詳細(xì)介紹https://blog.csdn.net/oqqHuTu12345678/article/details/72356722 3,、時(shí)序https://blog.csdn.net/oqqHuTu12345678/article/details/72356722 https://blog.csdn.net/Mr_Lyoko/article/details/79598106 4、代碼https://blog.csdn.net/oqqHuTu12345678/article/details/72358553
五,、通用異步收發(fā)器:UART1,、速覽點(diǎn)(1)UART由波特率產(chǎn)生器、UART接收器,、UART發(fā)送器組成,。 (2)由三條信號(hào)線組成:RX、TX,、GND (3)UART包括RS232,、RS499,、RS423,、RS422和RS485等接口標(biāo)準(zhǔn)規(guī)范和總線標(biāo)準(zhǔn)規(guī)范。它們的主要區(qū)別在于其各自的電平范圍不相同,。 嵌入式設(shè)備中常常使用到的是TTL,、TTL轉(zhuǎn)RS232的這種方式。 2,、通信協(xié)議(1)起始位:先發(fā)出一個(gè)邏輯”0”的信號(hào),,表示傳輸字符的開(kāi)始。 (2)數(shù)據(jù)位:緊接著起始位之后。數(shù)據(jù)位的個(gè)數(shù)可以是4,、5,、6、7,、8等,,構(gòu)成一個(gè)字符。通常采用ASCII碼,。 (3)奇偶校驗(yàn)位:數(shù)據(jù)位加上這一位后,,使得“1”的位數(shù)應(yīng)為偶數(shù)(偶校驗(yàn))或奇數(shù)(奇校驗(yàn)),以此來(lái)校驗(yàn)資料傳送的正確性,。 (4)停止位:它是一個(gè)字符數(shù)據(jù)的結(jié)束標(biāo)志,。可以是1位,、1.5位,、2位的高電平。 (5)空閑位:處于邏輯“1”狀態(tài),,表示當(dāng)前線路上沒(méi)有資料傳送,。 (6)波特率:數(shù)據(jù)傳輸?shù)乃俾省S幸韵聨讉€(gè)檔位:300,、600,、1200、2400,、4800,、9600、19200,、38400,、43000、56000,、57600,、115200。在數(shù)據(jù)傳輸和接收雙方,,需要預(yù)先統(tǒng)一波特率,,以便正確的傳輸數(shù)據(jù)。 3,、詳細(xì)介紹https://blog.csdn.net/oqqHuTu12345678/article/details/71597893 https://blog.csdn.net/oqqHuTu12345678/article/details/71597575 https://blog.csdn.net/xiaodingqq/article/details/80342459 4,、代碼學(xué)習(xí)https://blog.csdn.net/oqqHuTu12345678/article/details/71601785
六、心得體會(huì)1,、通信接口分為物理層和協(xié)議層(1)物理層(硬件):如UART,,PC和單片機(jī)通信,,PC機(jī)的串口是232電平而單片機(jī)的串口是TTL電平,兩個(gè)設(shè)備之間通信如果電平不一致就相當(dāng)于語(yǔ)言不通,,造成邏輯混亂,。因此一般的單片機(jī)系統(tǒng)板上都會(huì)有一個(gè)串口模塊電路(串口控制器)用來(lái)進(jìn)行電平轉(zhuǎn)換,將PC機(jī)的232電平轉(zhuǎn)化成單片機(jī)能識(shí)別的232電平,,常用芯片如PL2303,、CH340。 (2)協(xié)議層:就相當(dāng)于規(guī)定了一個(gè)標(biāo)準(zhǔn)或規(guī)則,,比如SPI協(xié)議中,,主機(jī)向從機(jī)發(fā)出一個(gè)數(shù)據(jù),從機(jī)接收到后會(huì)發(fā)出應(yīng)答信號(hào),,這就是協(xié)議規(guī)定的內(nèi)容,,不需要人為干預(yù)。當(dāng)然有的單片機(jī)沒(méi)有這些協(xié)議的控制器(硬件),,如51單片機(jī)和24c02通信,,需要模擬IIC協(xié)議,用軟件來(lái)實(shí)現(xiàn)硬件的功能,,這就增加了軟件的復(fù)雜度,。 2、總線的選擇(1)SPI總線有4根線,,分別是SCK,,SDO,SDI,,SS,,可以掛多個(gè)從設(shè)備,但是在掛多個(gè)從設(shè)備時(shí),,主設(shè)備端還需要做一個(gè)n選一的譯碼器,,用于選擇將要訪問(wèn)的從設(shè)備,因此,,主設(shè)備上的管腳需求比較多,。SPI總線在只有一個(gè)從設(shè)備時(shí),只要用到SCK,,SDO,,SDI這三根線,此時(shí)選擇SPI比I2C總線占優(yōu),。 (2)I2C總線只有兩根線,,SCL,SDA.,,也可以掛多個(gè)從設(shè)備,,對(duì)從設(shè)備的選擇直接依靠協(xié)議完成,無(wú)需增加物理連線,。一般情況下,,當(dāng)一塊電路板上有多個(gè)從設(shè)備時(shí),往往選用I2C而非SPI,,因?yàn)镾PI增加了額外額硬件開(kāi)銷(xiāo)以及電路板走線,。 (3)I2C和SPI總線一般是讀取一些PROM等從設(shè)備用。 而串行通信接口SCI(UART?),,主要應(yīng)用在兩個(gè)智能設(shè)備之間的互相通訊,。有別于SPI和I2C總線的主從模式,SCI可以是主-主模式,。 -----另一種說(shuō)法 (1)總線拓?fù)浣Y(jié)構(gòu)/信號(hào)路由/硬件資源耗費(fèi) IIC 只需兩根信號(hào)線,,而標(biāo)準(zhǔn)SPI至少四根信號(hào),如果有多個(gè)從設(shè)備,,信號(hào)需要更多,。一些SPI變種雖然只使用三根線——SCLK, SS和雙向的MISO/MOSI,但SS線還是要和從設(shè)備一對(duì)一根,。另外,,如果SPI要實(shí)現(xiàn)多主設(shè)備結(jié)構(gòu),總線系統(tǒng)需額外的邏輯和線路,。用IIC 構(gòu)建系統(tǒng)總線唯一的問(wèn)題是有限的7位地址空間,,但這個(gè)問(wèn)題新標(biāo)準(zhǔn)已經(jīng)解決——使用10位地址。從第一點(diǎn)上看,,IIC是明顯的大贏家,。 (2)數(shù)據(jù)吞吐/傳輸速度 如果應(yīng)用中必須使用高速數(shù)據(jù)傳輸,那么SPI是必然的選擇,。因?yàn)镾PI是全雙工,,IIC 的不是。SPI沒(méi)有定義速度限制,,一般的實(shí)現(xiàn)通常能達(dá)到甚至超過(guò)10 Mbps,。IIC 最高的速度也就快速+模式(1 Mbps)和高速模式(3.4 Mbps),后面的模式還需要額外的I/O緩沖區(qū),,還并不是總是容易實(shí)現(xiàn)的,。 (3)優(yōu)雅性 IIC 常被稱(chēng)更優(yōu)雅于SPI。公正的說(shuō),,我們更傾向于認(rèn)為兩者同等優(yōu)雅和健壯,。IIC的優(yōu)雅在于它的特色——用很輕盈的架構(gòu)實(shí)現(xiàn)了多主設(shè)備仲裁和設(shè)備路由。但是對(duì)使用的工程師來(lái)講,,理解總線結(jié)構(gòu)更費(fèi)勁,,而且總線的性能不高,。SPI的優(yōu)點(diǎn)在于它的結(jié)構(gòu)相當(dāng)?shù)闹庇^簡(jiǎn)單,容易實(shí)現(xiàn),,并且有很好擴(kuò)展性,。SPI的簡(jiǎn)單性不足稱(chēng)其優(yōu)雅,因?yàn)橐肧PI搭建一個(gè)有用的通信平臺(tái),,還需要在SPI之上構(gòu)建特定的通信協(xié)議軟件,。也就是說(shuō)要想獲得SPI特有而IIC沒(méi)有的特性——高速性能,工程師們需要付出更多的勞動(dòng),。另外,,這種自定的工作是完全自由的,這也說(shuō)明為什么SPI沒(méi)有官方標(biāo)準(zhǔn),。IIC和SPI都對(duì)低速設(shè)備通信提供了很好的支持,,不過(guò),SPI適合數(shù)據(jù)流應(yīng)用,,而IIC更適合“字節(jié)設(shè)備”的多主設(shè)備應(yīng)用,。 (4)小結(jié) 在數(shù)字通信協(xié)議簇中,IIC和SPI常稱(chēng)為“小”協(xié)議,,相對(duì)Ethernet, USB, SATA, PCI-Express等傳輸速度達(dá)數(shù)百上千兆字節(jié)每秒的總線,。但是,我們不能忘記的是各種總線的用途是什么,?!按蟆眳f(xié)議是用于系統(tǒng)外的整個(gè)系統(tǒng)之間通信的,“小”協(xié)議是用于系統(tǒng)內(nèi)各芯片間的通信,,沒(méi)有跡象表明“大”協(xié)議有必要取代“小”協(xié)議,。IIC和SPI的存在和流行體現(xiàn)了“夠用就好”的哲學(xué)。
七,、UART和RS232的聯(lián)系和區(qū)別1,、RS232RS232是早期的一種串行通信標(biāo)準(zhǔn),它描述了使用RS-232標(biāo)準(zhǔn)進(jìn)行通信時(shí)的電平要求(定義多少電平表示數(shù)據(jù)0和1),、接線要求,、線材要求,其實(shí)更多的是電平標(biāo)準(zhǔn),。 2,、UARTUART是通用異步收發(fā)傳輸器(Universal Asynchronous Receiver/Transmitter),既然是“器”,,顯然,,它就是個(gè)設(shè)備而已,要完成一個(gè)特定功能的硬件,。它最基本的功能是串并數(shù)據(jù)轉(zhuǎn)換,。 另外UART還要控制數(shù)據(jù)的格式(波特率,、起始位、數(shù)據(jù)位,、校驗(yàn)位,、停止位等內(nèi)容),,這表示它也是異步串行通信的一種方式,,它本身不是協(xié)議,但具有協(xié)議的特征,,然而比RS232協(xié)議更具一般性,。 因此可以說(shuō),UART同時(shí)具有硬件和協(xié)議的范疇,。 3,、TTL和RS232在嵌入式MCU中的UART使用TTL電平,而在PC中的UART使用的則是RS232電平,。所以UART并沒(méi)有規(guī)范該使用什么電平,,取決于你使用什么通信標(biāo)準(zhǔn)。即UART可以使用RS232規(guī)定的電平來(lái)通信,,也可以用其他協(xié)議規(guī)定的電平來(lái)工作,。 P.s:RS232與常見(jiàn)的TTL電平不同,RS232采用的是負(fù)邏輯,,因此一般會(huì)使用MAX-232雙向轉(zhuǎn)化芯片,。 TTL標(biāo)準(zhǔn):低電平為0,高電平為1(+5V電平,,3.3V以上即可) RS-232標(biāo)準(zhǔn):正電平為0,,負(fù)電平為1(±15V電平) ------------------------------------------------------------------------ 4、注意RS232不是接口標(biāo)準(zhǔn),,DB9,、DB25才叫接口標(biāo)準(zhǔn),現(xiàn)在RS232用的多的都是DB9,。 5,、接設(shè)備的時(shí)候,一般只接GND RX TX,。不會(huì)接Vcc或者+3.3v的電源線,,避免與目標(biāo)設(shè)備上的供電沖突。 6,、PL2303,、CP2102芯片是USB轉(zhuǎn)TTL串口的芯片,用USB來(lái)擴(kuò)展串口(TTL電平),。 ------------------------------------------------------------------------ 4,、嵌入式常用串口實(shí)物圖(1)串口(嵌入式中指的是UART),、COM口 (兩者同概念?COM口有兩種物理標(biāo)準(zhǔn):D型9針插頭和 4針杜邦頭,。左圖是UART,,中間是4針杜邦頭COM口,右圖是D型9針插頭,。由此可知,,4針杜邦頭和UART是一樣的?另外D型9針插頭我們一般只接GND,、RXD,、TXD,因此其實(shí)和UART是一樣的)
(2)下圖是用PL2303芯片的USB轉(zhuǎn)TTL串口 下圖是用CP2102芯片的USB轉(zhuǎn)TTL串口 下圖是USB轉(zhuǎn)RS-232串口
|
|
來(lái)自: 凈心止水館 > 《待分類(lèi)》