加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 1.異步串行通信的理解
    • 2.UART通信協(xié)議介紹
    • 3.數(shù)據(jù)傳輸工作流程
    • 4.硬件介紹
    • 5.軟件設(shè)計(jì)
    • 6.軟件功能仿真與測試
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

FPGA入門基礎(chǔ)之UART串口通信設(shè)計(jì)

05/17 13:03
7326
閱讀需 8 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

引言:UART是一種通用串行數(shù)據(jù)總線,用于異步通信。該總線雙向通信,可實(shí)現(xiàn)全雙工傳輸和接收。UART通常用來實(shí)現(xiàn)與PC之間數(shù)據(jù)通信,命令和控制信息的傳輸?shù)取1疚奈覀兘榻BUART通信協(xié)議、傳輸時(shí)序及如何利用HDL編程實(shí)現(xiàn)FPGA與PC通信。

1.異步串行通信的理解

首先需要介紹幾個(gè)概念。

通信協(xié)議:指雙方實(shí)體完成通信或服務(wù)所必須遵循的規(guī)則和約定。交流什么、怎樣交流及何時(shí)交流,都必須遵循某種互相都能接受的規(guī)則。這個(gè)規(guī)則就是通信協(xié)議。

串行通信:是指通信雙方按位進(jìn)行,遵守時(shí)序的一種通信方式。串行通信中,將數(shù)據(jù)按位依次傳輸,每位數(shù)據(jù)占據(jù)固定的時(shí)間長度,即可使用少數(shù)幾條通信線路就可以完成系統(tǒng)間交換信息,特別適用于計(jì)算機(jī)與計(jì)算機(jī)、計(jì)算機(jī)與外設(shè)之間的遠(yuǎn)距離通信。

異步通信:它是對(duì)于同步通信來說的,異步通信在發(fā)送字符時(shí),所發(fā)送的字符之間的時(shí)隙可以是任意的,當(dāng)然,接收端必須時(shí)刻做好接收的準(zhǔn)備(如果接收端主機(jī)的電源都沒有加上,那么發(fā)送端發(fā)送字符就沒有意義,因?yàn)榻邮斩烁緹o法接收)。發(fā)送端可以在任意時(shí)刻開始發(fā)送字符,因此必須在每一個(gè)字符的開始和結(jié)束的地方加上標(biāo)志,即加上開始位和停止位,以便使接收端能夠正確地將每一個(gè)字符接收下來。

2.UART通信協(xié)議介紹

UART使用的是異步串行通信機(jī)制,其數(shù)據(jù)傳輸協(xié)議格式如下圖所示。

圖1:UART數(shù)據(jù)傳輸協(xié)議格式

其中各位的含義如下:

起始位:先發(fā)出一個(gè)邏輯”0”信號(hào),表示傳輸字符的開始。

數(shù)據(jù)位:可以是5~8位邏輯”0”或”1”。如ASCII碼(7位),擴(kuò)展BCD碼(8位)。

校驗(yàn)位:數(shù)據(jù)位加上這一位后,使得“1”的位數(shù)應(yīng)為偶數(shù)(偶校驗(yàn))或奇數(shù)(奇校驗(yàn));數(shù)據(jù)的奇偶校驗(yàn)位是可以選擇的,如果不使用奇偶,那么就沒有這個(gè)數(shù)據(jù)位。

停止位:它是一個(gè)數(shù)據(jù)字段的結(jié)束標(biāo)志。可以是1位、1.5位、2位的高電平。

空閑位:處于邏輯“1”狀態(tài),表示當(dāng)前線路上沒有數(shù)據(jù)信息傳輸。

UART數(shù)據(jù)傳輸協(xié)議格式,通常需要在收發(fā)設(shè)備提前定義好,如傳輸數(shù)據(jù)的位數(shù)、是否需要校驗(yàn)位、停止位。另外還一個(gè)重要的參數(shù)就是數(shù)據(jù)傳輸?shù)?a class="article-link" target="_blank" href="/baike/497736.html">波特率。

圖2:常見標(biāo)準(zhǔn)波特率

UART數(shù)據(jù)傳輸?shù)乃俣韧ǔS貌ㄌ芈蕘砗饬?。在一?a class="article-link" target="_blank" href="/baike/530346.html">串口通信過程中,數(shù)據(jù)接收與發(fā)送雙方?jīng)]有共享時(shí)鐘,因此,雙方必須協(xié)商好數(shù)據(jù)傳輸波特率。根據(jù)雙方協(xié)議好的傳輸速率,相鄰bit的時(shí)間間隔就會(huì)固定下來,接收端即可對(duì)發(fā)送端的數(shù)據(jù)進(jìn)行采樣。

標(biāo)準(zhǔn)波特率:包括2400bps、4800bps、9600bps、19200bps、38400bps、57600bps、115200bps等。當(dāng)然更塊的速度意味著對(duì)采樣的要求更高,有可能誤碼率會(huì)逐漸提高。

3.數(shù)據(jù)傳輸工作流程

本文設(shè)定傳輸協(xié)議為:1位起始位+8位數(shù)據(jù)位+1位結(jié)束位,無奇偶校驗(yàn)位,傳輸波特率為9600bps。

(1)發(fā)送端按照預(yù)先設(shè)定好的傳輸協(xié)議及波特率,發(fā)送端依次發(fā)送:

1bit數(shù)據(jù)起始位+8bit數(shù)據(jù)位+1bit停止位

其中,起始位為邏輯 0(低電平) ,結(jié)束位為邏輯 1(高電平) ,發(fā)送端在空閑狀態(tài)為 1 。

(2)接收端:接收端通過檢測電平“1”(空閑狀態(tài))到“0”(起始位)的跳變來確定一個(gè)數(shù)據(jù)包的開始。確定開始位接收完成之后,依次接收數(shù)據(jù)使用更高的采樣時(shí)鐘,完成數(shù)據(jù)采集。接收完數(shù)據(jù)位后,繼續(xù)接收停止位。

4.硬件介紹

硬件上采用USB轉(zhuǎn)RS232芯片CP2104實(shí)現(xiàn)PC與FPGA之間通信。電路中設(shè)計(jì)了一片ESD靜電防護(hù)芯片RCLAMP0522P,與轉(zhuǎn)換芯片CP2104一起,可以防止靜電浪涌燒毀FPGA芯片,起到隔離保護(hù)作用。

圖3:USB轉(zhuǎn)RS232電路圖

5.軟件設(shè)計(jì)

軟件設(shè)計(jì)劃分為接收模塊uart_rx.v和uart_tx.v兩個(gè)模塊,頂層模塊uart_driver.v互聯(lián)兩個(gè)模塊,如下圖所示。

圖4:軟件模塊劃分

UART數(shù)據(jù)傳輸主要包括兩個(gè)部分:

    • 波特率的產(chǎn)生設(shè)計(jì);數(shù)據(jù)傳輸設(shè)計(jì),包括接收與發(fā)送。

(1)波特率產(chǎn)生設(shè)計(jì):

板載 FPGA 輸入時(shí)鐘 100Mhz,為得到常用的波特率,采用計(jì)數(shù)分頻來得到。BAUD_DIV=100000000/ 波特率。其中采樣中心點(diǎn)為發(fā)送或接收時(shí)鐘的中心點(diǎn),即 BAUD_DIV_CAP= 100000000/(2*波特率) 。

(2)數(shù)據(jù)傳輸設(shè)計(jì)

數(shù)據(jù)接收模塊:在設(shè)置好傳輸波特率9600bps下,根據(jù)串口傳輸時(shí)序,進(jìn)行解串(串并轉(zhuǎn)換)??臻e狀態(tài)時(shí),接收數(shù)據(jù)為邏輯高電平,等待起始位邏輯低電平的到來。當(dāng)起始位到達(dá)后,由低位到高位,依次采集8位數(shù)據(jù),并進(jìn)行相應(yīng)的解串,存入臨時(shí)寄存器。接收有效數(shù)據(jù)完成后,判斷結(jié)束位,接收完畢。

數(shù)據(jù)發(fā)送模塊:設(shè)置發(fā)送使能信號(hào)和待發(fā)送的數(shù)據(jù)。通過計(jì)數(shù)器,表示10 個(gè)數(shù)據(jù)發(fā)送的周期。這 10 個(gè)數(shù)據(jù),依次為:1位起始位+8 位數(shù)據(jù)位 +1 位結(jié)束位,實(shí)現(xiàn)數(shù)據(jù)位的逐個(gè)發(fā)送。本設(shè)計(jì)中,采用PC機(jī)的串口調(diào)試助手,發(fā)送數(shù)據(jù)位至FPGA。FPGA 接收到數(shù)據(jù)位之后,立即回傳至 PC 機(jī)。

6.軟件功能仿真與測試

編寫testbench仿真文件,利用Vivado自帶仿真器對(duì)軟件代碼進(jìn)行功能仿真,仿真結(jié)果如下圖所示。

圖5:UART串行通信仿真

圖中①處,仿真UART接收串口信號(hào)uart_rx_i輸入數(shù)據(jù)8'b10101001,baud_bps在每個(gè)bit位寬中間時(shí)刻采樣,bit_num計(jì)數(shù)接收到的數(shù)據(jù)bit個(gè)數(shù),數(shù)據(jù)按照LSB端接收;

圖中②處完成8bit數(shù)據(jù)位接收后,產(chǎn)生接收完畢信號(hào)uart_rx_done;

圖中③處,將接收到的數(shù)據(jù)按照事先定義好的傳輸協(xié)議通過uart_tx_o發(fā)送。

歡迎關(guān)注FPGA技術(shù)實(shí)戰(zhàn)公眾號(hào),喜歡就多多轉(zhuǎn)發(fā)吧!

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
10M08SCU324C8G 1 Intel Corporation Field Programmable Gate Array,
$148.65 查看
EPM2210F256A5N 1 Intel Corporation Flash PLD, 11.2ns, 1700-Cell, CMOS, PBGA256, 17 X 17 MM, 1 MM PITCH, LEAD FREE, FBGA-256
$116.24 查看
EPM570T100A5N 1 Intel Corporation Flash PLD, 8.7ns, 440-Cell, CMOS, PQFP100, 16 X 16 MM, 0.50 MM PITCH, LEAD FREE, TQFP-100
$28.12 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

專注FPGA技術(shù)開發(fā),涉及Intel FPGA、Xilinx FPGA技術(shù)開發(fā),開發(fā)環(huán)境使用,代碼風(fēng)格、時(shí)序收斂、器件架構(gòu)以及軟硬件項(xiàng)目實(shí)戰(zhàn)開發(fā),個(gè)人公眾號(hào):FPGA技術(shù)實(shí)戰(zhàn)。