4 UART串列埠(RS232)相關內容
4 UART串列埠(RS232)相關內容
1、首先交代:計算機中,硬體層面僅僅包括CPU和外設
只要一上電,CPU核一天到晚都在跟外設進行資料的互動。既然CPU核和外設要進行資料互動,明確常見幾種資料通訊方式:
GPIO通訊方式(輸入或者輸出):例如:LED燈或者蜂鳴器或者按鍵等;
UART串列埠通訊方式:例如:BT,GPRS,GPS等;
I2C匯流排通訊方式:例如:LM77溫度感測器,MMA8653三軸加速度感測器,電容觸控式螢幕等;
SPI匯流排通訊方式:例如:Norflash快閃記憶體,SD卡等;
1-Wire匯流排通訊方式:例如:DS18B20溫度感測器,,EEPROM儲存器等;
2、然後談談UART串列埠定義
定義就九個字:通用序列非同步收發器
接下來對定義進行詳細闡述:
“通用”:UART串列埠應用非常廣泛
“序列”:說明CPU和外設之間資料傳輸只需一根訊號線即可,此訊號線用於傳輸資料,又稱資料線,如果CPU要給外設傳送1,CPU只需將資料線拉高電平,如果CPU要給外設傳送0,CPU只需將資料線拉低電平,CPU和外設資料傳輸是一位一位的進行。
切記:UART資料傳輸從低位開始!
例如:CPU通過UART串列埠給BT傳送資料0x95(10010101),資料線的電平操作為:
10101001->資料線電平:高->低->高->低->高->低->低->高
具體參見uart1.bmp
"並行":CPU和外設之間資料通訊採用多根資料線(8根/16根/32根)一次可以傳輸1位元組/2位元組/4位元組
例如:記憶體,Nandflash,Norflash等都是採用並行傳輸。
序列和並行對比:
傳輸距離上:序列適合於遠距離傳輸
抗干擾性上:序列優於並行
傳輸速度上:一般通常,並行快於序列
"非同步":
明確:計算機中,CPU核數據處理速度遠遠快於外設。
問:由於CPU的資料處理速度遠遠快於外設,例如當CPU核向外設傳送資料時,如何保證外設能夠及時正常的獲取到資料呢?
答:此時此刻就需要考慮雙方的資料同步問題。
“資料同步”:一方傳送資料時,要務必保證接收方將資料及時正常接收到。
明確:計算機中,資料同步的方法有兩種:非同步和同步,而UART串列埠採用的非同步
“非同步”:CPU和外設在資料傳輸過程當中保證資料同步即可。
傳輸之前和傳輸之後無需考慮同步問題。到底非同步如何實現資料傳輸正常呢?具體在傳輸協議中待會兒要談談UART串列埠傳輸協議(規範)
結論:一旦有非同步,必須有協議
“同步”:CPU和外設之間不僅僅需要資料線(可以是一根或者多根),還需要一根時鐘控制訊號線,此時鐘控制訊號線用來實現雙方的資料同步,具體參見uart2.bmp
例如:CPU向LM77傳送1
CPU在CLK訊號線為低電平的時候,將資料1放到資料線(其實就是將資料線拉高電平)外設LM77就在同週期的CLK為高電平的時候,從資料線上將1讀走(其實就是LM77判斷資料線的電平是高電平還是低電平)
總結:低放高取
“收發器”:傳送資料和接收資料的硬體
例如:CPU向外設傳送資料,CPU就是傳送器,外設就是接收器
例如:外設向CPU傳送資料,外設是傳送器,CPU就是接收器
3、定義講完,立馬再次回到之前的問題
問:UART串列埠到底如何實現資料同步呢?前提是採用非同步方式
答:答案在UART串列埠資料傳輸協議中
此時此刻大談特談UART資料傳輸協議,首先交代協議中相關概念:
空閒位:UART串列埠在不進行資料傳輸時,,資料線一直髮送空閒位,空閒位的有效電平為高電平
起始位:如果CPU和外設要進行資料傳輸,首先發送起始位,表示雙方開始傳送傳輸資料了,有效電平為低電平,有效位數一位(一個bit位)
資料位:CPU和外設資料傳輸時,有效的資料位數(5/6/7/8)。一般選擇8位,一次傳輸8個bit位,但是也是一個bit位一個bit位的傳輸,有效的高低電平根據資料來定
奇偶校驗位:用來指示檢查雙方資料傳輸過程中是否出錯
校驗方式有三種:奇校驗/偶校驗/不校驗
注意:雙方的校驗方式要保持一致!
如果不採用校驗,無需傳送校驗位!
有效位數為一個bit位
例如:以CPU向BT傳送0x95資料為例,並且採用奇校驗方式
CPU傳送資料的過程:
1)CPU將資料0x95從低位開始一個bit位一個bit位傳送到資料線上
2)CPU將資料傳送完畢,CPU計算資料0x95(10010101)中"1"的個數。0x95中1的個數為4,4是一個偶數,而現在校驗方式採用奇校驗。所以只需讓奇偶校驗位的值為1,這樣4+1=5,5是一個奇數,符合奇校驗。
3)CPU算完以後,然後向資料線上傳送奇偶校驗位為1就是一個(高電平)
BT接收資料的過程:
1)BT首先從資料線上將資料0x95接收到
2)BT然後再從資料上將CPU傳送的校驗位的值接收到(為1)
3)BT計算資料0x95中的1的個數為4,並且接收到的校驗位的值為1。所以4+1=5,5是一個奇數,並且BT同樣採用奇校驗方式,5符合要求,說明雙方的資料傳輸正確。
停止位:CPU和外設停止資料互動,最後傳送一個停止位即可。有效位數為1位或者2位,有效電平為高電平
波特率:用來指定CPU和外設資料傳輸的速率。常用的兩個波特率:9600/115200。表示一秒鐘雙方資料傳輸9600個bit位或者115200個bit位。
例如:CPU向BT傳送0x95資料為例,並且UART串列埠的工作引數:
115200(波特率),8(資料位為8位)o(採用奇校驗)1(停止位為1位)
具體時序參見:uart3.bmp
如果將來UART資料傳輸異常,不確定,此時此刻只需利用示波器儀器抓去資料線上波形即可,然後認真分析波形。
4、UART串列埠三種工作模式
單工:資料傳輸永遠只朝一個方向進行
半雙工:資料傳輸可以雙向,但是同一時刻只能朝一個方向
全雙工:資料傳輸可以同時雙向進行,此時資料線必須是兩根。
一根資料線用來發送資料(TX)
一個數據線用來接收資料(RX)
當然除了資料線,還需一根地線
一般都是採用全雙工,具體參見:uart4.bmp
5、實戰演練UART串列埠
1)提出和分析使用者需求
需求:下位機通過UART重複給上位機發送字串資料
2)掌控下位機的UART串列埠硬體資訊
粗看:看位置,UART0串列埠座
細看:先看原理圖後看晶片手冊,具體硬體具體分析。先看原理圖,得到:
1.開啟底板原理圖,得到:上位機的RX引腳線->串列埠座PC_RXD1->SP3232晶片的T2OUT->SP3232晶片的T2IN->S5P6818的引腳UARTTXD0
同樣UARTTXD0引腳也具有四種功能:
GPIOD18/UARTTXD0/ISO7816/SDWP2
結論:此時應該選擇UARTTXD0(用於資料傳送)
上位機的TX引腳線->串列埠座PC_TXD1->SP3232晶片的R2IN->SP3232晶片的R2OUT
->S5P6818的引腳UARTRXD0
同樣UARTRXD0引腳也具有四種功能:
GPIOD14/UARTRXD0/ISO7816
結論:此時應該選擇UARTRXD0(用於資料接收)
此時此刻畫出一個實際的UART硬體通訊示意圖,參見uart5.bmp
總結:SP3232E電平轉換晶片:就是將TTL電平(CPU識別)轉換成EIA電平,適合於遠距離傳輸,抗干擾性強,當然另一端還需將EIA電平在轉換成TTL電平。
此晶片完全跟硬體設計相關,軟體無需關注,瞭解即可。
3)看圖得到重要的軟體操作S5P6818的UARTTXD0和UARTRXD0的流程
說流程之前畫出一個操作示意圖,具體參見:uart6.bmp
1. CPU核軟體上通過地址指標的形式訪問UART控制器內部的一大堆暫存器,也就是CPU核給UART控制器傳送控制命令
2.UART控制器接收到CPU傳送的控制命令,UART控制器硬體上自動操作UARTTXD0和UARTRXD0
3.UARTRXD0和UARTTXD0電平來影響操作上位機PC
4.立馬提出問題:UART控制器和內部的一大堆暫存器如何訪問操作呢?
答:由於UART控制器整合在S5P6818內部,只需看S5P6818晶片手冊中關於UART相關的章節即可。
4)然後開啟S5P6818晶片手冊,認真,仔細,耐心閱讀,得到:
1.開啟S5P6818晶片手冊P960
2.獲取重要的硬體資訊
S5P6818共支援6個UART,跟PC機連線的是UART0。每一個UART內部都集成了2個64位元組的緩衝區,一個用於傳送資料,一個用於接收資料
5)每一個UART控制器內部都集成了一個傳送器。而傳送器內部有集成了一個傳送緩衝區和一個傳送移位器。傳送緩衝區是用於暫存要傳送的資料。傳送移位器是用於將傳送緩衝區中的資料一位一位的傳送到TX資料線上。傳送移位器傳送資料的頻率由波特率產生器決定,例如波特率給傳送移位器產生一個波特率為115200的頻率,將來移位器根據此頻率將資料一位一位的放到TX資料線上。波特率產生器的工作頻率由時鐘源來決定
問:傳送資料的頻率最終由時鐘源決定,時鐘源如何設定呢?
如果UART控制器工作在FIFO模式,傳送緩衝區的大小為64位元組
如果UART控制器工作在非FIFO模式,傳送緩衝區的大小為1位元組
6)每一個UART控制器內部還集成了一個接收器
而接收器內部集成了一個接收緩衝區和一個接收移位器,接收移位器根據波特率產生器的頻率從RX資料線上一位一位的接收資料,然後將接收到的資料放到接收緩衝區中,將來程式以指標的形式訪問接收緩衝區,將接收到的資料獲取到。
問:如何訪問傳送緩衝區?決定軟體如何傳送資料
如何訪問接收緩衝區?決定軟體如何獲取資料
如何配置時鐘源?決定波特率