总线协议一(UART/RS232/RS485/IIC/SPI)
目錄
基礎概述:
一、UART(為串口通信方式)
二、RS232協議
三、RS485協議
四、I2C總線協議
五、SPI總線
六、I2C和SPI的區別
基礎概述:
總線的本質就是一根導線,傳遞的是電信號,0和1;用于在不同的通信設備之間,如外部設備和單片機之間,進行通信的一種方式。
串行通信:指的是通信雙方按位進行通信,每一次的數據傳輸都被“排隊”,一個個從低位到高位,如UART,或者從高位到低位,如I2C,開始通信,即遵循時序的一種通信方式。
并行通信:指的是一組數據不用“排隊”,一組數據的各數據位在多條線上同時被傳輸的通信方式。
異步通信:指的是數據的接收方和發送方具有不同的時鐘。
同步通信:指的是數據的接收方和發送方具有相同的時鐘。
對于串行通信和并行通信來說,串行通信只有一條總線,并行通信有多條總線并可以同時進行數據傳輸。從通信速度上來看,并行通信的速度比串行通信快得多;從占用的總線資源上來看,串行通信只占用了一條,要比并行通信占用的總線資源少得多;從布線布局來看,并行通信的要比串行通信的復雜。
一、UART(為串口通信方式)
UART是一種通用的串行、異步通信的總線,為通用異步收發器。含有兩條數據線,一條用于發送、一條用于接收,可以實現全雙工發送和接收。
在串口同通信的時候要先發送低位(即最右邊的位),然后發送高位。
其中UART的幀格式如下圖所示。值得注意的是在校驗位中使用的是奇偶校驗,空閑位和起始位分別固定為1和0,停止位也固定為1。校驗位是可有可無的選項。
在數據傳輸的過程中要與波特率聯系起來,例如確定發送的是10還是1100的話就要靠波特率來確定,因為波特率表示的是每秒鐘所發送的比特的數量。如2秒內收到的全是0,則前兩位表示的就是00;如第一秒收到一個0,第二秒收到一個1,則表示前兩秒發送的是10;以此來區分重疊的數據序列。
?為了更好的理解波特率,貼上牛客網上的一道波特率的計算題進行理解:
題目:串口的數據傳送速率用波特率來表示,即每秒鐘傳送的二進制位數。設置串口的工作模式為1個起始位,7個數據位,1個校驗位,1個結束位,串口波特率設置為9600。那么每秒鐘傳送的字符個數為()
?解析:
波特率 = 每秒傳送的字符數*字符位數;其中8位二進制數等于一個字符。由上述給出的條件可得:
每秒傳送的字符數為:9600/10 = 960.
拓展:
值得注意的是雙工通信可分為半雙工和全雙工,UART實現的是全雙工通信。全雙工通信是雙向的,半雙工通信相比于全雙工通信多了一個約束條件:即發送器和接收器不能同時發送和接收,在發送的時候只能單方面從發送器到接收器,在另一邊的發送器給接收器的時候不能工作;單工通信是單向的,只能由發送器發送數據或信息給接收器,接收器不能反向發送。
波特率:用于描述UART通信時的通信速度,其單位為bps,即每秒鐘傳送的bit的數量。?
注意在串口通信中,每次發送的數據量最多只能為一個字節,即8個bit。這樣的做法是為了防止由于時間延遲等造成的累計誤差。
在UART的使用當中,只需要理解的UART的數據傳送和接收的原理,在代碼編寫的時候不用管;但需要聲明波特率。因為在soc中,如果使用UART進行通信的話,作為人為控制的是UART控制器,而UART(串口)控制器對應著的是控制著發送和接收的寄存器。
由于UART(即串口)存在抗干擾能力差(因為直接使用的是TTL電平),電氣接口不統一(UART通信時都是直接使用處理器的電平,而不同的處理器之間的電平有差異),通信距離很短(一般只適用于同一塊電路板上不同芯片之間的通信)等問題,因此在工程中一般不直接使用串口進行通信。
二、RS232協議
針對UART存在的問題,有很多生產廠家共同制定了用于串行通信的標準,即RS232(下稱232)。
同時在該標準中規定采用一個標準的連接器,也對連接器的每個引腳的作用作了規定,還對信號的電平也加以規定。下圖所示為RS232接口示意圖,圖片來源Microsoft bing images。
其中,現在的232接口有9根線,在工業控制中一般只使用到?RXD/TXD/GND。
?其中,使用232在單片機之間的通信可如下圖所示:
RS232協議也是全雙工通信。
三、RS485協議
跟232類似,485同樣是基于串口通信的。但相比于232協議,其傳輸距離能達到1500米,而232最高只有15米;且?232是點對點通信的,即都只有一個發送器和接收器。
232和485最大的區別在于232的總線上來兩邊的處理器上只能各自有一個232,但485總線上可以有多個485設備(可以根據I2C總線的主機和從機原理進行理解),即具有多站能力,從而能夠構成一個局域網。
?值得注意的是:485總線采用的是差分信號進行數據傳輸,即兩線同時傳輸邏輯電平1或0;而232只采用一根線傳輸邏輯0或1.在485差分信號之間,兩線間的電壓差為+2v到+6v表示邏輯“1”,-2到-6表示邏輯電平“0”。
但也正是因為485使用的兩線制,數據的接收和發送都要使用這對差分信號線,因此通信方式只能使用半雙工方式,即發送的時候不能接收,接收的時候不能發送。但該總線方式的通信距離長,且抗干擾性強,通信速度加快,以及可實現多節點組網。
四、I2C總線協議
- ?I2C總線是一種串行、半雙工總線。主要用于近距離、低速的芯片之間的通信。
- I2C有兩根雙向的信號線,一根是SDA,另一根是SCL。其中SDA是數據線,用于收發數據,SCL是時鐘線,用于通信雙方時鐘的同步。
- I2C不是點對點的通信,是一種多主機總線。
?其中,在I2C總線上的設備或者器件都能作為主機或從機,但在同一個時間點上只能有一個主機。主機有權發起和結束一次通信,但從機只能被等待主機呼叫。
- 如果在總線上有多個主機同時啟動總線的話,那么I2C可以通過沖突檢測和仲裁來選取合適的主機,從而防止錯誤的產生。
- 每個連接到I2C總線上的器件都有唯一一個器件地址(7bit),且每個器件既可以作為主機也可以作為從機,總線上刪除和增加器件或設備不影響其他器件的正常工作。
- I2C總線上接收數據的為接收器,發送數據的器件為發送器。
I2C的通信過程:
1,確定主機后,主機發送起始信號啟用總線。
2,主機發送一個字節的數據指明從機地址和后續字節的傳送方向。即:由于連接到I2C的器件都有一個唯一的7bit的地址,這是發送的高7位,其中第0位為指明后續字節的傳送方向。因為I2C協議是全雙工通信,因此I2C規定了當最低位為0時,表示主機向從機通信,即主機發送數據;當最低位為1時,表示從機向主機通信,即從機發送數據。
3,被尋址的從機發送應答信號回應主機。同時反饋一個應答信號給主機確定是否收到信號。
4,發送器發送一個字節數據。其中第一步發送器必然是主機,接收器必然是從機。后續的發送器和接收器根據第2步的后續字節傳送方向確定是主機向從機發送數據還是被尋址的從機向主機傳送數據。?
5,接收器發送應答信號回應發送器。(其中應答信號ACK可由master或者slave發出)。
........(循環執行步驟4和5)
n,通信完成后主機發送停止信號釋放總線。
注意:
在I2C通信中,起始信號和停止信號表示完成了一次I2C通信過程,在其通信過程中,可以發送任意多個字節。
I2C總線在通信時每個字節為8位,且I2C是串行通信方式(即只有一根線),先傳送最高位、再傳送最低位。這與UART通信方式先發低位再發高位是相反的。且發送器再發送完一個字節數據后接收器必須發送1位應答信號給發送器,即一幀中總共有9位。
I2C的尋址方式如下圖所示:?
I2C時鐘信號的作用:
?注意:當時鐘線SCL為0時,數據線SDA此時的數據允許被寫入;當SCL為1時,數據線SDA的數據要保持穩定,此時接收器要從數據線上讀取前面時鐘線SCL為0時寫入的數據。其中,當SCL和SDA空閑的時候兩者為高電平。
五、SPI總線
?1,定義:SPI是一種高速的、全雙工、同步的串行通信總線。?
SPI總線采用主從方式工作,一般有一個主設備和一個從設備或多個從設備;SPI至少需要四根線,分別為MISO(主設備輸入從設備輸出)、MOSI(主設備輸出從設備輸入)、SCLK(時鐘)、CS(片選)。
??
?2,尋址方式
?在尋址方式中,主機主要是通過利用片選信號CS(即chip select)來決定選擇哪個從機進行通信。其中圖中的CS1和CS2為主機發出的片選信號,CS為從設備接收片選信號的引腳。圖中沒有小圓圈的畫法表示片選信號高電平有效。
3,通信過程
- SPI總線在進行數據傳輸時,先傳送高位,后傳送低位數據。SPI總線在通信過程中沒有起始信號和停止信號,也沒有應答信號,即使用SPI總線進行通信時,只要上電即可開始對數據進行傳輸,一個字節傳遞完成后不需要應答即可開始下一個字節的傳輸。
- SPI總線使用同步方式進行工作。和I2C一樣,都是利用時鐘線和數據線進行同步通信,但是SPI使用的是邊沿的方式對數據的讀寫進行控制。即:當時鐘線在上升沿或下降沿時發送器向數據線上發送數據;緊接著在下降沿或上升沿時接收器從數據線上接收數據,這是完成1位數據傳送的過程(串口通信是按位進行數據傳送的)。其中要完成一個字節數據的傳送,需要8個時鐘周期。
? 4,極性和相位
SPI總線在工作過程中有四種不同的工作模式,其取決于極性(CPOL)和相位(CPHL)兩個因素。
- 極性為0,相位也為0,表示的空閑時刻SCLK為低電平,當其第一個上升沿到來的時候則表示發送數據,下降沿到來的時候接收數據;
- 當極性為0,相位為1的時候,表示的空閑時刻SCLK為低電平,當第一個上升沿到來時表示接收數據,下降沿到來時表示發送數據;
- 當極性為1,相位為0,表示SCLK空閑時電平為高,當其第一個下降沿到來的時候則表示接收數據,上升沿到來的時候發送數據;
- 當極性為1,相位為1,表示SCLK空閑時電平為高,當第一個下降沿到來時表示發送數據,上升沿到來時表示接收數據。
其中,注意的是區分第一次到來的是上升沿還是下降沿,這取決于極性。如果極性為0,則第一次到來的是上升沿;如果極性為1,則第一次到來的是下降沿。對于相位而:如果相位為0,表示上升沿發送數據,下降沿讀取數據;如果相位為1,表示下降沿發送數據,上升沿讀取數據。
六、I2C和SPI的區別
?3,I2C通過向總線廣播從機地址來尋址,SPI通過向對應的片選信號進行尋址。
?4,I2C的時鐘極性和時鐘相位是固定的,SPI的時鐘極性和時鐘相位可調。
六、SPI總線擴展(QSPI總線)
1.QSPI協議是什么?
QSPI協議實際是SPI協議的其中一種擴展,SPI協議包括了standard SPI 、dual SPI與queued SPI。而QSPI指的就是最后一種queued SPI。
由queued這個英文單詞可知,QSPI和隊列有關系。QSPI總線協議增強了隊列傳輸機制,在其基礎上增加了IO2/IO3兩個外設接口。
2.QSPI 的傳輸模式
在QSPI接口命令中,QSPI通過命令與flash通訊,命令包括了:指令,地址,交替字節,空周期以及數據五個階段,其中命令的傳輸模式可以設置為單線傳輸、雙線傳輸以及四線傳輸。同時在上述命令的五個階段中,每一個階段均可跳過,但必須至少要包含指令、地址、交替字節或數據階段之一。
其中想要更加了解QSPI四線傳輸模式的可參考以下鏈接:
http://第24章 QSPI—讀寫串行FLASH_xqhrs232的博客-CSDN博客_qspi讀寫 https://blog.csdn.net/xqhrs232/article/details/111629407?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165370780316782184654320%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165370780316782184654320&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-3-111629407-null-null.142^v11^pc_search_result_control_group,157^v12^control&utm_term=QSPI&spm=1018.2226.3001.4187
以及
http://QSPI協議詳解(一)_Alfred.HOO的博客-CSDN博客_qspi https://blog.csdn.net/Michael177/article/details/121779374?ops_request_misc=&request_id=&biz_id=102&utm_term=QSPI&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-121779374.142^v11^pc_search_result_control_group,157^v12^control&spm=1018.2226.3001.4187
3.QSPI的功能框圖
如上圖所示:在QSPI中,相比于SPI其信號線有6根,分別是四根數據線?BK1_IO0~BK1_IO3,是時鐘輸出CLK,片選輸出BK1_nCS。
- 片選輸出BK1_nCS:低電平有效。根據電平選擇與哪個flah通信。
- CLK:時鐘輸出,決定了整個通訊的速率。
?3.在QSPI中,禁止使用雙閃存模式。其工作模式主要有以下三種:
- 間接模式:使用QSPI寄存器執行全部操作
在間接模式下,主要通過寫入QUADSPI寄存器來觸發命令,并通過讀寫數據寄存器來傳輸數據,就像跟其他通信外設進行數據傳輸一樣
若FMODE = 00,則?QUADSPI?處于間接寫入模式,字節在數據階段中發送到?Flash。
若?FMODE = 01,則?QUADSPI?處于間接讀取模式,在數據階段中從?Flash?接收字節。
在間接寫入模式下,固件寫入數據 時,將在?FIFO?中增加數據。
在間接讀出模式下,固件寫入數據 時,將在?FIFO?中移除數據。
其中,FIFO 的本質是RAM。
- 狀態輪詢模式:周期性讀取外部flash狀態寄存器,如果標志位置為1時將會產生中斷(如擦除或燒寫完成,會產生中斷)
- 內存映射模式:外部flash映射到微控制器地址空間,從而系統將其視為內部存儲器。
參考視頻:
SPI、UART、RS232、RS485、IIC 5種嵌入式經典通信總線協議精講「附贈課件資料&項目源碼」_嗶哩嗶哩_bilibili
總結
以上是生活随笔為你收集整理的总线协议一(UART/RS232/RS485/IIC/SPI)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cv算法(cv算法题笔试题库)
- 下一篇: 丽水数据可视化设计价格_大数据可视化项目