?
通信協(xié)議的基本概念
通信協(xié)議不難理解,就是兩個(gè)(或多個(gè))設(shè)備之間進(jìn)行通信,必須要遵循的一種協(xié)議。通信協(xié)議是指雙方實(shí)體完成通信或服務(wù)所必須遵循的規(guī)則和約定。通過(guò)通信信道和設(shè)備互連起來(lái)的多個(gè)不同地理位置的數(shù)據(jù)通信系統(tǒng),要使其能協(xié)同工作實(shí)現(xiàn)信息交換和資源共享,它們之間必須具有共同的語(yǔ)言。交流什么、怎樣交流及何時(shí)交流,都必須遵循某種互相都能接受的規(guī)則。這個(gè)規(guī)則就是通信協(xié)議。
通訊方式分類
1、按照數(shù)據(jù)的傳送方式劃分
串行通訊與并行通訊
串行通訊:指設(shè)備之間通過(guò)少量數(shù)據(jù)信號(hào)線(一般是 8 根以下),地線以及控制信號(hào)線,按數(shù)據(jù)位形式一位一位地傳輸數(shù)據(jù)的通訊方式。
并行通訊:指使用 8、16、32 及 64 根或更多的數(shù)據(jù)線進(jìn)行傳輸?shù)耐ㄓ嵎绞剑瑫r(shí)傳輸多個(gè)數(shù)據(jù)位的數(shù)據(jù)。
兩者比較:在數(shù)據(jù)傳輸速率相同時(shí),并行效率更高,可以傳輸更多數(shù)據(jù)量;而串行通訊節(jié)省成本。并行傳輸對(duì)同步要求較高,且隨著通訊速率的提高,信號(hào)干擾的問(wèn)題會(huì)顯著影響通訊性能。比較如下:
2、按數(shù)據(jù)通訊方向劃分
全雙工、半雙工、單工通訊
3、按照數(shù)據(jù)通訊的同步方式/是否使用時(shí)鐘信號(hào)進(jìn)行劃分
同步通訊和異步通訊
同步通訊:收發(fā)設(shè)備雙方會(huì)使用一根信號(hào)線表示時(shí)鐘信號(hào),在時(shí)鐘信號(hào)的驅(qū)動(dòng)下雙方進(jìn)行協(xié)調(diào),同步數(shù)據(jù)。通訊中通常雙方會(huì)統(tǒng)一規(guī)定在時(shí)鐘信號(hào)的上升沿或下降沿對(duì)數(shù)據(jù)線進(jìn)行采樣
異步通訊:不使用時(shí)鐘信號(hào)進(jìn)行數(shù)據(jù)同步,直接在數(shù)據(jù)信號(hào)中穿插一些同步用的信號(hào)位,或者把主體數(shù)據(jù)進(jìn)行打包,以數(shù)據(jù)幀的格式傳輸數(shù)據(jù),某些通訊中還需要雙方約定數(shù)據(jù)的傳輸速率,以便更好地同步。
兩者比較:在同步通訊中,數(shù)據(jù)信號(hào)所傳輸?shù)膬?nèi)容絕大部分就是有效數(shù)據(jù),而異步通訊中會(huì)包含有幀的各種標(biāo)識(shí)符,所以同步通訊的效率更高,但是同步通訊雙方的時(shí)鐘允許誤差較小,而異步通訊雙方的時(shí)鐘允許誤差較大。
4、按照通訊速率
比特率和波特率
比特率(Bitrate):每秒鐘傳輸?shù)亩M(jìn)制位數(shù),單位為比特每秒(bit/s)。
波特率(Baudrate):表示每秒鐘傳輸了多少個(gè)碼元
三、串口協(xié)議
USART——串口通訊
包括RS232、RS499、RS423、RS422和RS485等接口規(guī)范和標(biāo)準(zhǔn)規(guī)范
串口通訊協(xié)議的物理層及協(xié)議層:
1、物理層:串口通訊的物理層有很多標(biāo)準(zhǔn)及變種,主要有RS-232標(biāo)準(zhǔn),一般只使用 RXD、TXD 以及 GND 三條信號(hào)線,直接傳輸數(shù)據(jù)信號(hào)。
2、協(xié)議層:串口通訊的數(shù)據(jù)包由發(fā)送設(shè)備通過(guò)自身的 TXD 接口傳輸?shù)浇邮赵O(shè)備的 RXD 接口。在串口通訊的協(xié)議層中,規(guī)定了數(shù)據(jù)包的內(nèi)容,它由啟始位、主體數(shù)據(jù)、校驗(yàn)位以及停止位組成,通訊雙方的數(shù)據(jù)包格式要約定一致才能正常收發(fā)數(shù)據(jù)
數(shù)據(jù)校驗(yàn)
奇校驗(yàn):有效數(shù)據(jù)和校驗(yàn)位中“1”的個(gè)數(shù)為奇數(shù);
偶校驗(yàn):有效數(shù)據(jù)和校驗(yàn)位中“1”的個(gè)數(shù)為偶數(shù);
3、USART——通用同步異步收發(fā)器(Universal Synchronous Asynchronous Receiver and Transmitter)
RX、TX
串行通信:以幀格式傳輸數(shù)據(jù),即是一幀一幀的傳輸,每幀包含有起始信號(hào)、數(shù)據(jù)信息、停止信息,可能還有校驗(yàn)信息。
字符幀:一個(gè)字符幀發(fā)送需要三個(gè)部分:起始位+數(shù)據(jù)幀+停止位。起始位是一個(gè)位周期的低電平,位周期就是每一位占用的時(shí)間;數(shù)據(jù)幀就是我們要發(fā)送的 8 位或 9 位數(shù)據(jù),數(shù)據(jù)是從最低位開始傳輸?shù)模煌V刮皇且欢〞r(shí)間周期的高電平。
I2C通訊協(xié)議
I2C通訊協(xié)議(Inter-Integrated Circuit):由 Phiilps 公司開發(fā)的,由于它引腳少,硬件實(shí)現(xiàn)簡(jiǎn)單,可擴(kuò)展性強(qiáng),不需要 USART、CAN 等通訊協(xié)議的外部收發(fā)設(shè)備,現(xiàn)在被廣泛地使用在系統(tǒng)內(nèi)多個(gè)集成電路(IC)間的通訊。
1、物理層:雙向串行數(shù)據(jù)線(SDA),串行時(shí)鐘線(SCL)
(1) 它是一個(gè)支持設(shè)備的總線。“總線”指多個(gè)設(shè)備共用的信號(hào)線。在一個(gè) I2C 通訊總線中,可連接多個(gè) I2C 通訊設(shè)備,支持多個(gè)通訊主機(jī)及多個(gè)通訊從機(jī)。
(2) 一個(gè) I2C 總線只使用兩條總線線路,一條雙向串行數(shù)據(jù)線(SDA) ,一條串行時(shí)鐘線(SCL)。數(shù)據(jù)線即用來(lái)表示數(shù)據(jù),時(shí)鐘線用于數(shù)據(jù)收發(fā)同步。
(3) 每個(gè)連接到總線的設(shè)備都有一個(gè)獨(dú)立的地址,主機(jī)可以利用這個(gè)地址進(jìn)行不同設(shè)備之間的訪問(wèn)。
(4) 總線通過(guò)上拉電阻接到電源。當(dāng) I2C 設(shè)備空閑時(shí),會(huì)輸出高阻態(tài),而當(dāng)所有設(shè)備都空閑,都輸出高阻態(tài)時(shí),由上拉電阻把總線拉成高電平。
(5) 多個(gè)主機(jī)同時(shí)使用總線時(shí),為了防止數(shù)據(jù)沖突,會(huì)利用仲裁方式?jīng)Q定由哪個(gè)設(shè)備占用總線。
2、協(xié)議層:定義了通訊的起始和停止信號(hào)、數(shù)據(jù)有效性、響應(yīng)、仲裁時(shí)鐘同步和地址廣播等環(huán)節(jié)
S:傳輸開始信號(hào);SLAVE_ADDRESS:從機(jī)地址;R/W:傳輸方向選擇位,1為讀,0為寫
A/A:應(yīng)答(ACK)或非應(yīng)答(NACK)信號(hào);P:停止傳輸信號(hào)
通訊過(guò)程:起始信號(hào)產(chǎn)生后,所有從機(jī)就開始等待主機(jī)緊接下來(lái)廣播 的從機(jī)地址信號(hào)(SLAVE_ADDRESS)。在 I2C 總線上,每個(gè)設(shè)備的地址都是唯一的,當(dāng)主機(jī)廣播的地址與某個(gè)設(shè)備地址相同時(shí),這個(gè)設(shè)備就被選中了,沒(méi)被選中的設(shè)備將會(huì)忽略之后的數(shù)據(jù)信號(hào)。根據(jù) I2C協(xié)議,這個(gè)從機(jī)地址可以是 7位或 10位。在地址位之后,是傳輸方向的選擇位,該位為 0 時(shí),表示后面的數(shù)據(jù)傳輸方向是由主機(jī)傳輸至從機(jī),即主機(jī)向從機(jī)寫數(shù)據(jù)。該位為 1時(shí),則相反,即主機(jī)由從機(jī)讀數(shù)據(jù)。從機(jī)接收到匹配的地址后,主機(jī)或從機(jī)會(huì)返回一個(gè)應(yīng)答(ACK)或非應(yīng)答(NACK)信號(hào),只有接收到應(yīng)答信號(hào)后,主機(jī)才能繼續(xù)發(fā)送或接收數(shù)據(jù)。
讀和寫數(shù)據(jù):I2C通訊更常用的是復(fù)合格式,該傳輸過(guò)程有兩次起始信號(hào)(S)。一般在第一次傳輸中,主機(jī)通過(guò) SLAVE_ADDRESS 尋找到從設(shè)備后,發(fā)送一段“數(shù)據(jù)”,這段數(shù)據(jù)通常用于表示從設(shè)備內(nèi)部的寄存器或存儲(chǔ)器地址(注意區(qū)分它與 SLAVE_ADDRESS 的區(qū)別);在第二次的傳輸中,對(duì)該地址的內(nèi)容進(jìn)行讀或?qū)憽5谝淮瓮ㄓ嵤歉嬖V從機(jī)讀寫地址,第二次則是讀寫的實(shí)際內(nèi)容。
(2)通訊的起始和停止信號(hào):起始和停止信號(hào)一般由主機(jī)產(chǎn)生
起始信號(hào):SCL為高,SDA 高 —》低;
停止信號(hào):SCL為高,SDA 低 —》高;
數(shù)據(jù)有效性:傳輸時(shí),SCL 為高電平的時(shí)候 SDA 表示的數(shù)據(jù)有效,即此時(shí)的 SDA 為高電平時(shí)表示數(shù)據(jù)“1”,為低電平時(shí)表示數(shù)據(jù)“0”。當(dāng) SCL為低電平時(shí),SDA 的數(shù)據(jù)無(wú)效,一般在這個(gè)時(shí)候 SDA 進(jìn)行電平切換,為下一次表示數(shù)據(jù)做好準(zhǔn)備。
3、I2C特性及架構(gòu)
軟件模擬協(xié)議:直接控制芯片的兩個(gè) GPIO 引腳,分別用作 SCL 及 SDA,按照上述信號(hào)的時(shí)序要求,直接控制引腳的輸出(若是接收數(shù)據(jù)時(shí)則讀取 SDA 電平),就可以實(shí)現(xiàn) I2C 通訊。由直接控制 GPIO 引腳電平產(chǎn)生通訊時(shí)序時(shí),需要由 CPU 控制每個(gè)時(shí)刻的引腳狀態(tài)。
硬件協(xié)議:STM32 的 I2C 片上外設(shè)專門負(fù)責(zé)實(shí)現(xiàn) I2C 通訊協(xié)議,只要配置好該外設(shè),它就會(huì)自動(dòng)根據(jù)協(xié)議要求產(chǎn)生通訊信號(hào),收發(fā)數(shù)據(jù)并緩存起來(lái),CPU只要檢測(cè)該外設(shè)的狀態(tài)和訪問(wèn)數(shù)據(jù)寄存器,就能完成數(shù)據(jù)收發(fā)。
SPI通訊協(xié)議
SPI(Serial Peripheral Interface):串行外圍設(shè)備接口,是一種高速全雙工的通信總線。
1、SPI物理層:3條總線及片選線(SCK、MOSI、MISO、片選線共4根)
(1)片選線:從設(shè)備選擇信號(hào)線,當(dāng)有多個(gè) SPI 從設(shè)備與 SPI 主機(jī)相連時(shí),設(shè)備的其它信號(hào)線 SCK、MOSI及 MISO同時(shí)并聯(lián)到相同的 SPI總線上,即無(wú)論有多少個(gè)從設(shè)備,都共同只使用這 3 條總線;而每個(gè)從設(shè)備都有獨(dú)立的這一條 NSS 信號(hào)線,本信號(hào)線獨(dú)占主機(jī)的一個(gè)引腳,即有多少個(gè)從設(shè)備,就有多少條片選信號(hào)線。I2C 協(xié)議中通過(guò)設(shè)備地址來(lái)尋址、選中總線上的某個(gè)設(shè)備并與其進(jìn)行通訊;而 SPI 協(xié)議中沒(méi)有設(shè)備地址,它使用 NSS 信號(hào)線來(lái)尋址,當(dāng)主機(jī)要選擇從設(shè)備時(shí),把該從設(shè)備的 NSS 信號(hào)線設(shè)置為低電平,該從設(shè)備即被選中片選有效,接著主機(jī)開始與被選中的從設(shè)備進(jìn)行 SPI 通訊。所以SPI通訊以 NSS 線置低電平為開始信號(hào),以 NSS 線被拉高作為結(jié)束信號(hào)。
(3) MOSI(Master Output,Slave Input):主設(shè)備輸出/從設(shè)備輸入引腳。主機(jī)的數(shù)據(jù)從這條信號(hào)線輸出,從機(jī)由這條信號(hào)線讀入主機(jī)發(fā)送的數(shù)據(jù),即這條線上數(shù)據(jù)的方向?yàn)橹鳈C(jī)到從機(jī)。
(4) MISO(Master Input,Slave Output):主設(shè)備輸入/從設(shè)備輸出引腳。主機(jī)從這條信號(hào)線讀入數(shù)據(jù),從機(jī)的數(shù)據(jù)由這條信號(hào)線輸出到主機(jī),即在這條線上數(shù)據(jù)的方向?yàn)閺臋C(jī)到主機(jī)。
2、協(xié)議層:SPI 協(xié)議定義了通訊的起始和停止信號(hào)、數(shù)據(jù)有效性、時(shí)鐘同步等環(huán)節(jié)。
SPI通訊時(shí)序:
(1)通訊的起始和停止信號(hào):
起始信號(hào):NSS 信號(hào)線由高變低,是 SPI 通訊的起始信號(hào)。NSS 是每個(gè)從機(jī)各自獨(dú)占的信號(hào)線,當(dāng)從機(jī)在自己的 NSS 線檢測(cè)到起始信號(hào)后,就知道自己被主機(jī)選中了,開始準(zhǔn)備與主機(jī)通訊。
停止信號(hào):NSS 信號(hào)由低變高,是 SPI 通訊的停止信號(hào),表示本次通訊結(jié)束,從機(jī)的選中狀態(tài)被取消。
(2)數(shù)據(jù)有效性:SPI 使用 MOSI 及 MISO 信號(hào)線來(lái)傳輸數(shù)據(jù),使用 SCK 信號(hào)線進(jìn)行數(shù)據(jù)同步。MOSI及 MISO 數(shù)據(jù)線在 SCK 的每個(gè)時(shí)鐘周期傳輸一位數(shù)據(jù),且數(shù)據(jù)輸入輸出是同時(shí)進(jìn)行的。MOSI 及 MISO 的數(shù)據(jù)在 SCK 的上升沿期間變化輸出,在 SCK的下降沿時(shí)被采樣。即在 SCK的下降沿時(shí)刻,MOSI及 MISO 的數(shù)據(jù)有效,高電平時(shí)表示數(shù)據(jù)“1”,為低電平時(shí)表示數(shù)據(jù)“0”。在其它時(shí)刻,數(shù)據(jù)無(wú)效,MOSI 及 MISO為下一次表示數(shù)據(jù)做準(zhǔn)備。SPI每次數(shù)據(jù)傳輸可以 8 位或 16 位為單位,每次傳輸?shù)膯挝粩?shù)不受限制。
DMA——直接存儲(chǔ)器存取
DMA(Direct Memory Access):是單片機(jī)的一個(gè)外設(shè),它的主要功能是用來(lái)搬數(shù)據(jù),但是不需要占用 CPU,即在傳輸數(shù)據(jù)的時(shí)候,CPU 可以干其他的事情,好像是多線程一樣。數(shù)據(jù)傳輸支持從外設(shè)到存儲(chǔ)器或者存儲(chǔ)器到存儲(chǔ)器
1、DMA請(qǐng)求:如果外設(shè)要想通過(guò) DMA 來(lái)傳輸數(shù)據(jù),必須先給 DMA 控制器發(fā)送 DMA 請(qǐng)求,DMA收到請(qǐng)求信號(hào)之后,控制器會(huì)給外設(shè)一個(gè)應(yīng)答信號(hào),當(dāng)外設(shè)應(yīng)答后且 DMA 控制器收到應(yīng)答信號(hào)之后,就會(huì)啟動(dòng) DMA的傳輸,直到傳輸完畢。
2、通道:DMA 具有 12 個(gè)獨(dú)立可編程的通道,其中 DMA1 有 7 個(gè)通道,DMA2 有 5 個(gè)通道,每個(gè)通道對(duì)應(yīng)不同的外設(shè)的 DMA 請(qǐng)求。雖然每個(gè)通道可以接收多個(gè)外設(shè)的請(qǐng)求,但是同一
時(shí)間只能接收一個(gè),不能同時(shí)接收多個(gè)。
3、仲裁器:當(dāng)發(fā)生多個(gè) DMA 通道請(qǐng)求時(shí),就意味著有先后響應(yīng)處理的順序問(wèn)題,這個(gè)就由仲裁器理。
4、DMA 數(shù)據(jù)配置:DMA 傳輸數(shù)據(jù)的方向有三個(gè)——從外設(shè)到存儲(chǔ)器,從存儲(chǔ)器到外設(shè),從存儲(chǔ)器到存儲(chǔ)器。
USART/I2C/SPI比較
1、通信速率比較:
SPI 》 I2C 》 UART
(1)同步通信》異步通信;
(2)同步通信時(shí)必須有一根時(shí)鐘線連接傳輸?shù)膬啥?
(3)都是串行通信方式,并行通信用于內(nèi)部存儲(chǔ)間的通信,如flash;
(4)適合傳輸?shù)木嚯x和通信速率成反比關(guān)系;
2、連線方式:
SPI:2數(shù)據(jù)線、1時(shí)鐘線、1CS(設(shè)備片選線),串行同步通信全雙工;
I2C:1數(shù)據(jù)線、1時(shí)鐘線,串行同步通信半雙工,傳輸距離比UART短;
UART:2數(shù)據(jù)線、1地線,串行異步通信全雙工,傳輸距離比I2C長(zhǎng)些;
(I2C接口是“器件間”接口,是在一塊板子之內(nèi)傳輸數(shù)據(jù))
(UART是 “設(shè)備間”接口,更多的是用于兩臺(tái)設(shè)備之間傳輸數(shù)據(jù))
評(píng)論
查看更多