S5PV210开发 -- UART 详解
如需轉載請注明出處:https://blog.csdn.net/qq_29350001/article/details/78532740
上一篇文章系統的講了一下通信的分類,包括并行通信,串行通信。串行通信的分類,包括同步通信,異步通信。
這篇文章我們主要講一下 UART
?
串口編程,我們并不陌生。之前講過RS485通信,參看:UNIX再學習 -- RS485 串口編程
再者,參看:日常生活小技巧 -- UART 回環測試
一、基本概念
?
參看:UART -- 維基百科
UART 是 Universal Asynchronous Receiver/Transmitter,通用異步收發器(異步串行通信口)的英文縮寫,它包括了RS232、RS449、RS423、RS422和RS485等接口標準規范和總線標準規范,即UART是異步串行通信口的總稱。 而RS232、RS449、RS423、RS422和RS485等,是對應各種異步串行通信口的接口標準和總線標準,它規定了通信口的電氣特性、傳輸速率、連接特性和接口的機械特性等內容。實際上是屬于通信網絡中的物理層(Physical Layer)的概念,與通信協議沒有直接關系。而通信協議,是屬于通信網絡中的資料鏈接層(Data Link Layer)的概念。 COM是PC(個人計算機)上,異步串行通信口的簡寫。由于歷史原因,IBM的PC外部接口配置為RS232,成為實際上的PC界默認標準。所以,現在PC機的COM均為RS232。若配有多個異步串行通信口,則分別稱為COM1、COM2... 。
二、UART數據傳輸格式
在講之前先感慨兩句,UART這部分的總結,真真的網上看了好多的資料。但都講的很零碎,沒有個所以然。看的我很糾結,不知道從何講起。
還好我們之前有講過串口編程,并非對 UART一無所知。那就從 TTL 和 RS232 電平說起。
(1)TTL 和 RS232 電平
RS232 電平
邏輯1:-3V~-15V
邏輯0:+3V~+15V
TTL 電平
邏輯1:+2V~+5V
邏輯0:+0V~+0.8V
?
TTL 電平和 RS232 電平我會再開一篇詳細來講。這里就是要了解一下SP3232 芯片。
我們查看原理圖,串口電路部分:
你能區分 SP3232 芯片引腳哪邊是TTL電平,哪邊是 RS232 電平嗎?(傻紙問題,哈哈)
我們介紹UART基本概念的時候,也提到了現在PC機的COM均為RS232,但是單片機的電平是TTL電平。
所以要用一個電平轉化芯片 SP3232,然后使得單片機和PC通過串口進行通信。
上圖標的很清楚啦,PC_TXD0、PC_RXD0 在PC端,為RS232電平。
(2)數據傳輸格式
?
空閑位:?從一個字符的停止位結束到下一個字符的起始位開始,表示線路處于空閑狀態,為邏輯 1。
起始位:必須是持續1bit時間的邏輯 0 電平,標志著傳輸一個字符的開始,接收方可用起始位使自己的接收時鐘與發送方的數據同步。
數據位:緊跟在起始位之后,是通信中的真正有效信息。數據位的位數可以由通信雙方共同約定,一般可以是5位、6位、7位或8位,標準的ASCII碼是0~127(7位),擴展的ASCII碼是0~255(8位)。傳輸數據時先傳送字符的低位,后傳送字符的高位。
? ? 這里有幾個知識點需要知道:
? ? ASCII 碼,參看:C語言再學習 -- ASCII碼表(轉)
? ? MSB 和 LSB,參看:C語言再學習-- 大端小端詳解(轉)
? ? 思考:
? ? 傳輸數據時先傳送字符的低位,后傳送字符的高位。
? ? 因為通常我們的PC是小端的,如果沒有另外說明,通??梢约俣〝祿紫葌鬏斪畹陀行?#xff08;LSB)。
? ? 在標準ASCII碼中 127 轉化成二進制為 0111 1111,即最有效高位一直為 0。只需傳輸 7 位即可
? ? 在擴展ASCII碼中 255 轉化成二進制為 1111 1111,需要傳輸 8 位。
校驗位:奇偶校驗位僅占一位,用于進行奇校驗或偶校驗,奇偶檢驗位不是必須有的。如果是奇校驗,需要保證傳輸的數據總共有奇數個邏輯高位;如果是偶校驗,需要保證傳輸的數據總共有偶數個邏輯高位。
? ? 這里有幾個知識點需要知道:
? ? 校驗位可分為NONE(無校驗位)、ODD(奇校驗)、EVEN(偶校驗),一般多為無校驗位。
? ? 奇偶校驗,參看:奇偶校驗 -- 百度百科? ?
? ??奇偶校驗位是一個表示給定位數的二進制數中 1 的個數是奇數還是偶數的二進制數。奇偶校驗位是最簡單的錯誤檢 測碼。奇偶校驗位有兩種類型:偶校驗位與奇校驗位。如果一組給定數據位中 1 的個數是奇數,那么偶校驗位就置為 1,從而使得總的 1 的個數是偶數;如果給定一組數據位中 1 的個數是偶數,那么奇校驗位就置為 1,使得總的1 的個數保持奇數不變。
? ? 舉個栗子:假設傳輸的數據位為 01001100,如果是奇校驗,則奇校驗位為0(要確??偣灿衅鏀祩€1),如果是 偶校驗,則偶校驗位為1(要確保總共有偶數個1)
? ? 如果是采用奇校驗,在傳送每一個字節的時候另外附加一位作為校驗位,校驗位在數據位后面,當實際數據中“1”的個數為偶數的時候,這個校驗位就是“1”,否則這個校驗位就是“0”,這樣就可以保證傳送數據滿足奇校驗的要求。在接收方收到數據時,將按照奇校驗的要求檢測數據中“1”的個數,如果是奇數,表示傳送正確,否則表示傳送錯誤。
?
? ??如果傳輸過程中包括校驗位在內的奇數個數據位發生改變,那么奇偶校驗位將出錯表示傳輸過程有錯誤發生。因此,奇偶校驗位是一種錯誤檢測碼,但是由于沒有辦法確定哪一位出錯,所以它不能進行錯誤校正。發生錯誤時必須扔掉全部的數據,然后從頭開始傳輸數據。在噪聲很多的媒介上成功傳輸數據可能要花費很長的時間,甚至根本無法實現。但是奇偶校驗位也有它的優點,它是使用一位數據能夠達到的最好的校驗碼,并且它僅僅需要一些異或門就能夠生成。奇偶校驗被廣泛應用。
?
停止位:可以是是1bit、1.5bit或2bit,可以由軟件設定。它一定是邏輯 1 電平,標志著傳輸一個字符的結束。
? ? 由于數據是在傳輸線上定時的,并且每一個設備有其自己的時鐘,很可能在通信中兩臺設備間出現了小小的不同步。因此停止位不僅僅是表示傳輸的結束,并且提供 計算機校正時鐘同步的機會。適用于停止位的位數越多,不同時鐘同步的容忍程度越大,但是數據傳輸率同時也越慢。
(3)舉例說明TTL電平和RS232電平數據傳輸格式的不同
上面我們提到了 TTL 電平和 RS232 電平的邏輯電平是不同的,那么接下來我們舉個栗子。
例如,對于16進制數據55aaH,當采用8位數據位、1位停止位傳輸時,無校驗位。(先傳第一個字節55,再傳第二個字節aa,每個字節都是從低位向高位逐位傳輸)。我們來看它在一下 TTL 電平和 RS232 電平的信號線上的波形。
《1》TTL電平的串行數據幀格式
對于正邏輯的 TTL 電平,起始位是邏輯 0 為低電平;停止位和空閑位是邏輯 1 為高電平。
《2》RS-232電平的串行數據幀格式
?
對于正邏輯的 RS232 電平,起始位是邏輯 0 為高電平;停止位和空閑位是邏輯 1 為低電平。
?
?
?
上面提到 UART 包括了RS232、RS449、RS423、RS422和RS485等接口標準規范和總線標準規范。
我們最常見的是 RS232、RS485、RS422 這三個。下面我們一一的來詳細講解一下。
三、RS232
(1)接口標準
RS-232是美國電子工業聯盟(EIA)制定的串行數據通信的接口標準,原始編號全稱是EIA-RS-232(簡稱232,RS232)。它被廣泛用于計算機串行接口外設連接。
RS-232-C接口(又稱EIARS-232-C)是目前最常用的一種串行通訊接口。(“RS-232-C”中的“-C”只不過表示RS-232的版本,所以與“RS-232”簡稱是一樣的)。
RS-232采取不平衡傳輸方式,即所謂單端通訊。由于其發送電平與接收電平的差僅為2V至3V左右,所以其共模抑制能力差,再加上雙絞線上的分布電容,其傳送距離最大為約15米,最高速率為20kb/s。RS-232是為點對點(即只用一對收、發設備)通訊而設計的,其驅動器負載為3~7kΩ。所以RS-232適合本地設備之間的通信。
(2)常見連接器
常見的有 DB9 和 DB25,并且連接器分公/母頭。
《1》DB9
首先它相關器件有很多。這里只是介紹最常見的。
DB9針串口魚叉式公頭母頭:
?
DB9針串口焊板式公座母座:
?
?
串口線延長母對母/公對母/公對公:
?
講到串口線,它有交叉線與直通線之分:
參看:串口線-交叉線與直通線之分
1:串口交叉線
串口線兩頭都一樣都相同。都是公對公或者母對母串口線,這種線必須是交叉線。一端的第二針與另一端的第三針是通路的,說明此線是交叉線。
以下是判斷方法:
2:串口直通線
如果用戶串口設備與串口服務器連接使用公對母串口線,那必須使用公對母直通線。
一端公頭的2對應,另一端母頭的2,一端母頭的3對應另一端公頭的3.
?
DB9針串口焊板式PCB元件封裝:
?
最后示例分析串口直通和交叉之分:
以聯想臺式機為例,通常PC上的串口為公頭的:
或者筆記本電腦,通常用的 USB轉串口線,也是公頭的:
?
1:串口交叉線
2:串口直通線
引腳定義:
公頭:
母頭:
Pin2 TXD
Pin3 RXD
Pin5 GND
《2》DB25
(3)RS232收發器
這類芯片也有不少,我們就講上面提到的 SP3232,查看相關手冊和原理圖。
《1》特性
滿足EIA/TIA-232-F標準,工作電壓為+3.0V到+5.5V
滿載最小數據速率:120Kbps
1uA的低功耗關斷模式,接收器(SP3222E)有效
可與RS-232共同使用,電源低至+2.7V?
增強型ESD規范: ?
±15kV人體放電模式?
±15kV IEC1000-4-2氣隙放電?
±8kV IEC1000-4-2接觸放電
《2》封裝
《3》引腳說明
《4》相關電路圖
四、RS485
(1)接口標準
電子工業協會(EIA)于1983 年制訂并發布RS-485 標準,并經通訊工業協會(TIA)修訂后命名為TIA/EIA-485-A,習慣地稱之為RS-485 標準。
它是從RS-422基礎上發展而來的,所以RS-485許多電氣規定與RS-422相仿。如都采用平衡傳輸方式、都需要在傳輸線上接終接電阻等。RS-485可以采用二線與四線方式,二線制可實現真正的多點雙向通信,而采用四線連接時,與RS-422一樣只能實現點對多的通信,即只能有一個主(Master)設備,其余為從設備,但它比RS-422有改進,無論四線還是二線連接方式總線上可多接到32個設備。
RS-485與RS-422的不同還在于其共模輸出電壓是不同的,RS-485是-7V至+12V之間,而RS-422在-7V至+7V之間,RS-485接收器最小輸入阻抗為12kΩ、RS-422是4kΩ;由于RS-485滿足所有RS-422的規范,所以RS-485的驅動器可以在RS-422網絡中應用。
RS-485與RS-422一樣,其最大傳輸距離約為1219米,最大傳輸速率為10Mb/s。平衡雙絞線的長度與傳輸速率成反比,在100kb/s速率以下,才可能使用規定最長的電纜長度。只有在很短的距離下才能獲得最高速率傳輸。一般100米長雙絞線最大傳輸速率僅為1Mb/s。[2]?
RS-485 標準是為彌補RS-232 通信距離短、速率低等缺點而產生的。RS-485 標準只規定了平衡發送器和接收器的電特性,而沒有規定接插件、傳輸電纜和應用層通信協議。
RS-485 標準與RS-232 不一樣,數據信號采用差分傳輸方式(Differential Driver Mode),作用是可以抑制共模干擾。
(2)485轉232接口
上面提到了,標準沒有規定接插件,所以一般都是引出四根線:VCC,GND,TXD,RXD
常用的還有 485轉232轉換器
(3)RS485收發器
這里主要講一下?SP3485
《1》特性
RS-485和RS-422收發器?
工作電壓為+3.3V ?
可與+0.5V的邏輯電路共同工作?
驅動器/接收器使能 z?
低功耗關斷模式(SP3481)?
-7V~+12V的共模輸入電壓范圍?
允許在同一串行總線上連接32個收發器?
與工業標準75176管腳配置兼容?
驅動器輸出短路保護
《2》電路圖和引腳
引腳說明:
Pin1-RO-接收器輸出。
Pin2-RE-接收器輸出使能(低電平有效)。
Pin3-DE-驅動器輸出使能(高電平有效)。
Pin4-DI-驅動器輸入。
Pin5-GND-連接地。
Pin6-A-驅動器輸出/接收器輸入(同相)。
Pin7-B-驅動器輸出/接收器輸入(反相)。
Pin8-Vcc
?
注意:將AB間120歐姆去掉,如果采用阻抗匹配的電纜,300米以內幾乎可以不用加終端電阻。加終端電阻的缺點就是增大了線路的無用功耗,尤其是電池系統供電時,降低了電池的續航能力。我一開始沒有將它去掉,導致只能發送數據,無法接收數據。
?
五、RS422
我用的并不多,所以只是簡單簡紹一下:
標準全稱是“平衡電壓數字接口電路的電氣特性”,它定義了接口電路的特性。典型的RS-422是四線接口。實際上
還有一根信號地線,共5根線。其DB9連接器引腳定義。由于接收器采用高輸入阻抗和發送驅動器比RS232更強的驅動能力,故允許在相同傳輸線上連接多個接收節點,最多可接10個節點。即一個主設備(Master),其余為從設備(Slave),從設備之間不能通信,所以RS-422支持點對多的雙向通信。接收器輸入阻抗為4k,故發端最大負載能力是10×4k+100Ω(終接電阻)。RS-422四線接口由于采用單獨的發送和接收通道,因此不必控制數據方向,各裝置之間任何必須的信號交換均可以按軟件方式(XON/XOFF握手)或硬件方式(一對單獨的雙絞線)實現。
RS-422的最大傳輸距離為1219米,最大傳輸速率為10Mb/s。其平衡雙絞線的長度與傳輸速率成反比,在100kb/s速率以下,才可能達到最大傳輸距離。只有在很短的距離下才能獲得最高速率傳輸。一般100米長的雙絞線上所能獲得的最大傳輸速率僅為1Mb/s。
六、三者比較
參看:串行通信的基礎知識- RS-232C / RS-422 / RS-485 -
七、需要了解的小知識點
雙絞線,參看:雙絞線 -- 百度百科
?
差分布線,參看:Altium Designer -- 差分布線原則
如何差分布線,參看:Altium Designer -- 精心總結
八、總結
擴展閱讀:
Serial Communication
Universal Asynchronous Receiver/Transmitter (UART)
The USART of the AVR
Serial and UART Tutorial
?
這篇文章,寫了好久。查閱相關資料應該是最多的一次了。最后發現還是有很多東西沒有寫,也是無語。
最近諸事不順,搞的很焦慮。真的感覺人是很脆弱的,放寬心開心健康過好每一天,是多么珍貴。
如需轉載請注明出處:https://blog.csdn.net/qq_29350001/article/details/78532740
總結
以上是生活随笔為你收集整理的S5PV210开发 -- UART 详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最优化学习笔记(十二)——基本共轭方向算
- 下一篇: S5PV210开发 -- 串口驱动开发