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