大名鼎鼎的串行異步通信名字的由來
///插播一條:我自己在今年年初錄製了一套還比較系統的入門單片機教程,想要的同學找我拿就行了免費的,私信我就可以哦~點我頭像黑色字體加我地球呺也能領取哦。最近比較閒,帶做畢設,帶學生參加省級或以上比賽///
「串口是我們平時在調試板子和程序時經常使用到的。就像榨菜一樣,便宜又百搭。對於新人來說,卻也容易因為概念不清晰而犯錯。串行通信,UART,RS232這些東西是一會事嗎?如果你分不清這些名詞,那就值得看一下這篇文章。」
01串行通信
首先看下串行通信是個啥。我們通常說的串行通信其實是一種想法,只是種想法。串行通信的思想是將數位訊號通過一根數據線一個Bit一個Bit的發送出去,這種想法是相對於並行通信而存在的。並行通信的應用中通常會有8根16根或32根不等的數據線,一次就可以輸出一個Byte或一個Word。既然串行通信只是一個想法,那我們要做些什麼事情才能把這個想法變成現實呢?我們可以用兩個火把,兩種顏色,一個黃的,一個紅的。黃的代表數據,亮了是1,滅了是0。那應該在什麼時候記錄數據呢?紅的火把從暗到亮的時候記錄數據。這樣我們就可以得到一連串的010101111…….了。我們的火把同步串行通信接口(Torch Synchronous Serial Interface,TSSI)就設計完成了。
02 UART
如果把上面的黃、紅火把發出的光換成我們的專業術語,就會是數據信號和時鐘信號。而UART(Universal Asynchronous Receiver/Transmitter)就類似那兩個產生信號的火把再加上記錄數據和舉火把的小人,這是一個看的見摸的著的電路。這個電路里有位移寄存器、波特率發生器、緩存器等。區別於我們的TSSI的是,UART沒有生成時鐘信號去同步數據發送端和數據接收端,沒有時鐘信號線。它只用了一個數據線。當要傳輸數據的時候Transmitter直接在信號線上來個電平跳變,提醒Receiver數據要來了。Receiver在感知到這個跳變信號後開始採樣。工程中用到的採樣頻率一般是數據發送頻率(波特率)的4倍或16倍。Transmitter的數據發送頻率就被稱之為波特率。因為跳變的電平信號已經起到了一定的讓Receiver和Transmitter同步的作用,再加上採樣頻率高于波特率,Receiver和Transmitter之間就沒有必要再多一根時鐘信號線了,也就是時鐘可以不同步,可以有略微的差別(5%左右)。這就是大名鼎鼎的串行異步通信名字的由來。
03 RS232
有了UART這個東西之後是不是就可以直接在設備之間用了呢?如果是在一塊板子上這裡沒有太大問題。現在大多數晶片的輸出電壓都是TTL的,所以電平兼容,而且一塊板子上干擾又不會太高。但要是用在設備與設備之間通信,那可能就會有問題了。比如說主控電腦和電機驅動器之間。這種情況下TTL的抗噪能力就比較單薄了。比較簡單的做法就是增加邏輯1和邏輯0之間的電壓差,比如像RS232這種接口中定義的電平格式(邏輯1:-5~-15V,邏輯0:+5~+15V)。還有用差分信號的方式,比如RS485。沒錯,RS232只是一種接口,定義了接口的外觀、各個引腳的功能、信號0和1對應的電壓等。所以平時使用UART的時候要注意接口的電壓是TTL的還是RS232的。如果兩個設備的邏輯電平定義不一樣就得加個轉換口。類似下圖。
有了上面介紹的這些東西,我們好像就可以開始設計我們自己的串口通信電路了。什麼iUART, UARTplus, USRT等等等,仿佛商機就在眼前。但讓人可惜或者高興的是市場上有太多現成的產品可以用了,像USB, SPI, I2C, CAN等一系列基於串行通信這個想法發展起來的協議,其協議本身和周邊配套的硬體和軟體驅動都已經很成熟了。