RS232/485、UART及波特率相關

波特率描述了單片機或計算機在串口通信時的速率。如每秒鐘傳送960個字符,而每個字符格式包含10位(1個起始位,1個停止位,8個數據位),這時的波特率爲960Bd,比特率爲10位*960個/秒=9600bps。又比如每秒鐘傳送960個二進制位,這時的波特率爲960Bd,比特率也是960bps。

波特率,可以通俗的理解爲一個設備在一秒鐘內發送(或接收)了多少碼元的數據。它是對符號傳輸速率的一種度量,1波特即指每秒傳輸1個碼元符號(通過不同的調製方式,可以在一個碼元符號上負載多個bit位信息),1比特每秒是指每秒傳輸1比特(bit)。


解決波特率轉化的途徑有兩種。一是用單片機,接收時設置爲跟上位PC機一致的波特率進行接收。發送時再設置爲跟下位系統相同的波特率發送數據;二是用FPGA,利用VHDL設計出異步串行通信電路,直接接收PC 機的數據,自行轉化爲另一種波特率的數據再發送出去。

從某種意義上,可以說,線路上存在的僅僅是電流,RS232/RS485規定了這些電流在什麼樣的線路上流動和流動的樣式;在UART那裏,電流才被解釋和組裝成數據並變成CPU可直接讀寫的形式。

 

EIA-RS-232C對電氣特性、邏輯電平和各種信號線功能都作了規定。

在TxD和RxD上:

邏輯1(MARK)=-3V~-15V

邏輯0(SPACE)=+3~+15V

在RTS、CTS、DSR、DTR和DCD等控制線上:

信號有效(接通,ON狀態,正電壓)=+3V~+15V

信號無效(斷開,OFF狀態,負電壓)=-3V~-15V

 

RS-485的電氣特性:

邏輯“0”以兩線間的電壓差爲+(2—6)V表示;

邏輯“1”以兩線間的電壓差爲-(2—6)V表示。

接口信號電平比RS-232降低了,就不易損壞接口電路的芯片,且該電平與TTL電平兼容,可方便與TTL電路連接。RS-485接口是採用平衡驅動器和差分接收器的組合,抗共模干擾能力增強,即抗噪聲干擾性好。數據最高傳輸速率爲10Mbps。因爲RS485接口組成的半雙工網絡,一般只需二根連線(一般叫AB線),所以RS485接口均採用屏蔽雙絞線傳輸。

 

參考資料:UART和RS232/RS485的關係是什麼?

http://www.360doc.com/content/13/1119/18/13253385_330564821.shtml

說了這麼多,其實筆者,只想弄明白一個問題,那就是Xilinx FPGA中的串口波特率支持動態修改嗎,在此過程中瞭解了一些關於波特率和UART的知識,特此分享給大家。


UART(Universal AsynchronousReceiver/Transmitter,通用異步收發器)是用於控制CPU與串行設備通信的芯片。常見UART主要有INS8250,PC16450和PCI6550,其中16550發送和接收都帶有16 B的FIFO,爲協調發送、接收端的速率匹配提供了更大的緩衝餘地,同時也可以提高CPU的使用效率,從而提高系統的整體性能。

 

UART16550的基本結構由CPU接口模塊、波特率發生器、FIFO控制器、發送/接收FIFO和發送/接收模塊共7個部分組成。

CPU通過UART的CPU接口模塊配置整個UART,波特率發生器在CPU寫入初始值後產生需要的波特率,控制發送和接收模塊在設定的波特率下工作。CPU通過接口模塊向發送FIFO內寫入需要發送的8位數據,同時發送模塊開始讀取FIFO中的數據,並加入起始位、奇偶校驗位和停止位後以串行發送的方式傳輸給串行接收設備。接收模塊時刻監視串行輸入端口,發現有數據發送來的時候馬上啓動接收模塊開始接收數據並有效的判斷出奇偶校驗位來檢測數據的正確性,最後把剩下的8位數據放入接收FIFO,並通知CPU有數據進來進行接收。

在使用UART16550前,CPU必須要對控制寄存器進行配置,包括波特率、數據位數、奇偶校驗、停止位位數及FIFO的控制等。這也是16550區別於一般UART的具有可編程的特點。

UARTl6550在可編程邏輯器件FPGA上的實現,可以方便地用串口協議與PC機進行串行通信,而且擴展了板級系統的接口功能。應用在可編程器件FPGA內部,可以很大程度地減少電路板的使用面積,並提高系統的穩定性和可編程性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章