1. 程式人生 > >基於FPGA的UART串列埠通訊

基於FPGA的UART串列埠通訊

通過串列埠除錯助手PC傳送16bit給FPGA,FPGA接收後返還給PC。

串列埠通訊其實沒我們想象中的那麼難,只要花點時間去理解,很快就會上手,在直入正題前,先來一點基礎知識。

串列埠是指傳送和接收資料的序列口,就是我們開啟電腦裝置管理器後看到的COM口。FPGA或微控制器的板子中很多都用到的是UART(通用非同步收發傳輸器)和RS232

UART:計算機內部採用並行資料,不能直接把資料發到Modem,必須經過UART整理才能進行非同步傳輸,其過程為:CPU先把準備寫入序列裝置的資料放到UART的暫存器(臨時記憶體塊)中,再通過FIFO(First Input First Output,先入先出佇列)傳送到序列裝置,若是沒有FIFO,資訊將變得雜亂無章,不可能傳送到Modem。它是用於控制計算機與序列裝置的晶片。有一點要注意的是,它提供了RS-232C資料終端裝置介面,這樣計算機就可以和調變解調器或其它使用RS-232C介面的序列裝置通訊了。

RS232:個人計算機上的通訊介面之一,由電子工業協會(Electronic Industries Association,EIA) 所制定的非同步傳輸標準介面,通常為9個引腳,但在我們的應用中RS-232口一般只使用RXD、TXD、GND三條線。

現在很少能看到這種口了,基本上都用的是USB,所以在下面我們FPGA的實際例子中,大家只要認準RXD、TXD兩個引腳就好。

在進入實際工程中前我們要明白什麼叫波特率:波特率指1s內所要傳送的資料,在我們的串列埠設定中有很多種波特率,比如4800、9600和19200等,根據你的實際需要選擇不同的波特率。波特率應提前被協議雙方確定,在我們的實驗中,我們是通過PC向FPGA傳送一個16bit的資料,FPGA接收後再返還給PC。那麼在這個過程中,PC發了16位的資料,FPGA要知道每一位傳送的時間有多長,FPGA才能在資料送過來時,去取樣,將資料提取出來。比如我們給定的波特率是9600,那麼傳送一位的時間為1/9600=0.000104166667s約等於104ns,那麼我們就可以讓FPGA每隔52ns的中間點去採一次樣,存下現在這一位資料是多少,16位資料,經過1664ns採集完。1664ns是一個時間段,它可以明確我們採集的是16bit的資料,當然現在這樣說還不太準確,因為我們在串列埠通訊時還存在奇偶校驗位和停止位,這兩個位的概念我們下面會講到

以上為我們正式進入實際工程前的一些基礎知識,下一篇部落格中我會貼出實際的工程程式碼,為大家講解。