標籤:order uart 瞭解 art 基本 ali 時序 border 頻率
這次我們來介紹一下UART的基本時序,瞭解一下底層訊號怎麼傳送的。方便以後使用Verilog HDL實現收發邏輯。
9600bit/s 的意思是每秒發送9600bit,因此可以理解為將1s分解為9600等分,對於發送端來說,每bit電平的維持時間是1/9600s,對於接收端來說,在1/9600s內要完成資料的採樣。因此對於不同時間源的裝置,如何?這個發送“節拍”以及設定接收採樣頻率非常重要,即主從裝置對各自主時鐘(SCLK)的分頻非常重要。
UART的基本時序:
發送端
接收端
UART的每一幀資料一般有10位分別為初始位,8位元據和結束位。對於發送端,將待發送的資料存入發送寄存器,產生起始位即將電平拉低,隨後每1/9600s將寄存器中的資料一位一位的發送出去。當資料發送完畢後,將電平拉高等待下一次的發送。對於接收端來說首先要檢測是否有資料來,採用下降沿檢測的方式來檢測起始位。對於資料位元的採樣,選取資料位元的中點位置的電平作為採樣資料,中點位置的電平較為穩定。設採樣間隔為N,當採樣8N後,就可以停止採樣了。
採樣時鐘的如何擷取,其實是通過裝置的主時鐘分頻得到的。取16x或者64x倍的傳輸速率時鐘作為採用時鐘是實踐總結出來的,主要是為了無失真的擷取資料,同時也為了方便編程。下面舉個例子:
主時鐘為SCLK = 40Mhz,傳輸速率為9600,則採用頻率fs = 16*9600 = 153600。Tsclk = 25ns,Ts = 1/fs = 6510.4167ns,N = Ts / Tsclk = 260.4167。也就是說在每個Ts下有260個Tsclk,以上升沿作為計數標準的話,數130下就為一個Ts,即每數130個Ts的上升沿,採樣時鐘的電平就翻轉一次。採用這種方式就可以得到採樣時鐘了。對於採樣間隔N的計算,每個bit電平的維持時間是Tbit = 16 * Ts = 104166.667ns = 16Ts。bit0採樣的是下降沿檢測,等待16Ts後,進入bit1的電平時間,在中點採樣。因此第一個採樣點的時間是(16+8)Ts = 24Ts,以此類推後面的採樣點分別為:40,56,72,88,104,120,136,152。
對於發送端,只需要根據傳輸速率對SCLK進行不同的分頻就好了。現總結分頻如下:
| 傳輸速率 |
T |
計數上限 |
FPGA50Mhz頻率下的計數值;Tsclk =1 / 50Mhz = 20ns |
| 9600 |
104166.667 |
T/Tsclk |
5208-1 |
| 19200 |
52083.333 |
T/Tsclk |
2604-1 |
| 38400 |
26041.667 |
T/Tsclk |
1302-1 |
57600 |
17361.111 |
T/Tsclk |
868-1 |
115200 |
8680.556 |
T/Tsclk |
434-1 |
UART學習之路(二)基本時序介紹