国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于USB的高速串口的設(shè)計(jì)與實(shí)現(xiàn)

2023-05-29 09:23楊兆龍蘇兆兆李瑞祥
電子技術(shù)與軟件工程 2023年7期
關(guān)鍵詞:發(fā)送數(shù)據(jù)波特率低電平

楊兆龍 蘇兆兆 李瑞祥

(晉中信息學(xué)院 山西省晉中市 030800)

在工業(yè)領(lǐng)域,仍然有很多設(shè)備使用串口來(lái)通信。但是,速率較高的場(chǎng)景,諸如數(shù)據(jù)采集、等,常常采用USB、以太網(wǎng)等方式進(jìn)行數(shù)據(jù)傳輸,而此類(lèi)接口不論是硬件設(shè)計(jì)、軟件設(shè)計(jì),都非常復(fù)雜,其工作量都極大。而串口設(shè)計(jì)簡(jiǎn)單,只有收發(fā)兩組線(xiàn),其通信協(xié)議更是容易實(shí)現(xiàn),還具備單比特檢錯(cuò)能力,可以在較高速率的使用場(chǎng)景替代其他復(fù)雜的板間總線(xiàn)。同時(shí),市場(chǎng)上常見(jiàn)的RS-485/422 收發(fā)器,如MAX22507E/MAX22508E,其最高速率可達(dá)50Mbps,而市場(chǎng)上能夠買(mǎi)到的串口通信模塊,最高僅能夠達(dá)到12Mbps,并沒(méi)有能夠?qū)⑹瞻l(fā)器的性能全部發(fā)揮出來(lái)。所以,為串口這種使用簡(jiǎn)單方便的接口提升速率,擴(kuò)展其使用場(chǎng)景,發(fā)揮收發(fā)器的潛能,非常必要。

1 總體設(shè)計(jì)

市場(chǎng)上常用的芯片串口最高支持的波特率為12Mbps,沒(méi)有更高速率的解決方案,故本系統(tǒng)采用FPGA+USB2.0 芯片的方案來(lái)實(shí)現(xiàn)串口。其結(jié)構(gòu)框圖如圖1 所示。本系統(tǒng)采用MAX22508E 實(shí)現(xiàn)RS-422 與UART 協(xié)議的電平轉(zhuǎn)換,采用FT232H 單通道USB2.0-UART/FIFO 芯片將USB2.0 轉(zhuǎn)換為同步FIFO 接口,采用LCMXO2 FPGA 實(shí)現(xiàn)UART 接口,并將收發(fā)數(shù)據(jù)通過(guò)同步FIFO 接口與FT232H 相連。

圖1:系統(tǒng)總體設(shè)計(jì)

MAX22508E 是一款全雙工的RS422 收發(fā)器,其最高速率支持50Mbps??蓱?yīng)用于現(xiàn)場(chǎng)總線(xiàn)、工業(yè)控制等場(chǎng)景。本設(shè)計(jì)最高速率為40Mbps,在其支持范圍內(nèi)。

FT232H 是一款功能非常強(qiáng)大的協(xié)議轉(zhuǎn)換芯片,其可實(shí)現(xiàn)USB2.0 與UART、IIC、SPI、FIFO 接口等協(xié)議的轉(zhuǎn)換。其驅(qū)動(dòng)可支持從Windows XP 到Windows 10的所有版本系統(tǒng),同時(shí)支持Mac OS 和Linux,具有很好的兼容性。

基于成本考慮,本系統(tǒng)FPGA 采用Lattice 的LCMXO2-640。該FPGA 具備小規(guī)模、低成本、低功耗、單一供電電壓3.3V、內(nèi)嵌flash 和時(shí)鐘的特點(diǎn),可以極大地簡(jiǎn)化設(shè)計(jì)電路,降低電路板的復(fù)雜程度。

上位機(jī)采用C#編寫(xiě),通過(guò)調(diào)用FT232H 提供的接口函數(shù),完成FT232H 的配置、FPGA 的配置、以及數(shù)據(jù)的收發(fā)。

2 FPGA設(shè)計(jì)

本設(shè)計(jì)采用的FPGA 具有640 個(gè)LUT,18kbit 的sram,1 個(gè)鎖相環(huán),40 個(gè)通用引腳,最大工作頻率133MHz,能夠滿(mǎn)足本系統(tǒng)的需求。本設(shè)計(jì)采用外部晶振,工作頻率為120MHz。

FPGA 總體結(jié)構(gòu)如圖2 所示,共分三部分介紹。

圖2:FPGA 總體結(jié)構(gòu)

2.1 同步FIFO接口

由于實(shí)現(xiàn)的串口收發(fā)的最高速率均是40Mbps,所以FT232H 與FPGA 之間的通信帶寬應(yīng)大于80Mbps,為了實(shí)現(xiàn)該通信帶寬,二者之間通信采用同步FIFO 接口,其為8 位的同步并行口,在輔以控制信號(hào),其時(shí)鐘頻率為60MHz,能夠?qū)崿F(xiàn)最大480Mbps 的通信速率。

讀過(guò)程:CLK 為時(shí)鐘信號(hào),由FT232H 輸出。RXF 為代表FT232H 中發(fā)送緩存的非空信號(hào),低電平有效,由FT232H 輸出。當(dāng)RXF 信號(hào)由高拉低時(shí),代表FT232H 中發(fā)送緩存中有數(shù)據(jù)可以讀,而RXF 信號(hào)由高拉低時(shí),代表FT232H 中發(fā)送緩存變空,沒(méi)有數(shù)據(jù)可以被讀。OE 為輸出使能信號(hào),由FPGA 輸出,低電平有效。RD 為讀使能信號(hào),由FPGA 輸出,低電平有效。當(dāng)FPGA 收到RXF 拉低后,若FPGA 中的發(fā)送緩存也非滿(mǎn),則拉低OE 信號(hào),然后拉低RD 信號(hào),開(kāi)始由FT232H 向FPGA 傳輸數(shù)據(jù);若FT232H 中發(fā)送緩存非空和FPGA 中的發(fā)送緩存也非滿(mǎn)有一條不滿(mǎn)足時(shí),則停止傳輸。

寫(xiě)過(guò)程:TXE 代表FT232H 中接收緩存的非滿(mǎn)信號(hào),低電平有效,有FT232H 輸出。當(dāng)TXE 由高拉低時(shí),代表FT232H 的接收緩存中可以寫(xiě)入數(shù)據(jù),而當(dāng)TXE由低拉高時(shí),代表FT232H 的接收緩存不能夠再寫(xiě)入數(shù)據(jù)。WR 為寫(xiě)使能信號(hào),由FPGA 輸出,低電平有效。當(dāng)FPGA 收到TXE 拉低后,若此時(shí)FPGA 中的接收緩存也非空,則拉低WR 信號(hào),開(kāi)始由FPGA 向FT232H傳輸數(shù)據(jù);若FT232H 的接收緩存非滿(mǎn)和FPGA 的接收緩存非空有一條不滿(mǎn)足時(shí),則停止傳輸。

為了保證收發(fā)兩個(gè)方向的帶寬均衡,設(shè)定最大突發(fā)為16 字節(jié)。當(dāng)讀了16 字節(jié)或者緩存不滿(mǎn)足要求,必須切換到寫(xiě)過(guò)程;當(dāng)寫(xiě)了16 字節(jié)或者緩存不滿(mǎn)足寫(xiě)的要求,必須切換到讀過(guò)程。

管腳cfg_or_data 切換當(dāng)前是進(jìn)行配置或是數(shù)據(jù)傳輸。默認(rèn)狀態(tài)為低電平,當(dāng)其為高電平并且收到特殊的幀格式時(shí),為FPGA 寄存器的配置。配置幀為6 字節(jié),包括4 字節(jié)的幀定位和兩個(gè)字節(jié)的配置數(shù)據(jù),其格式為:0xF00FF00F+baud_rate+mode。FPGA 收到配置幀后,將baud_rate 和mode 寫(xiě)入到對(duì)應(yīng)的寄存器中。

2.2 串口

為了保證串口接收的正確率,應(yīng)保證采樣時(shí)鐘遠(yuǎn)高于當(dāng)前波特率,而太高的采樣時(shí)鐘,則對(duì)FPGA 的新能提出了更高的要求。為了在保證正確率的前提下控制成本,本設(shè)計(jì)采用三倍于波特率的時(shí)鐘進(jìn)行采樣。

FPGA 的系統(tǒng)時(shí)鐘為120MHz,在一些波特率下,能夠經(jīng)過(guò)分頻正好得到三倍于波特率的時(shí)鐘(在接收側(cè)為與波特率相等的時(shí)鐘,下同)。而在一些波特率下,無(wú)法得到三倍于波特率的時(shí)鐘。這時(shí),不得不采用小數(shù)分頻。比如:當(dāng)工作波特率是256000bps 時(shí),其采樣頻率為768000Hz,其分頻比為156.25,在本設(shè)計(jì)中,采用3 個(gè)156 分頻加1 個(gè)157 分頻來(lái)達(dá)到156.25 分頻,會(huì)在小范圍內(nèi)帶來(lái)一點(diǎn)抖動(dòng),但是該抖動(dòng)不會(huì)累加產(chǎn)生頻偏,保證了波特率的精度。表1 為采樣時(shí)鐘的分頻比例:

表1:時(shí)鐘分頻比

當(dāng)發(fā)送數(shù)據(jù)時(shí),從發(fā)送緩存中讀取數(shù)據(jù),然后按照mode 寄存器中的配置,組好每次發(fā)送的數(shù)據(jù),如發(fā)送數(shù)據(jù)為0x33,而mode 配置為0x10 時(shí),那么發(fā)送數(shù)據(jù)幀根據(jù)配置,取0x33 的第5bits,即0b1001,需要增加1 位的起始位0,增加1 位的停止位1,其奇偶校驗(yàn)為奇校驗(yàn),結(jié)果為1,所以最終發(fā)送的數(shù)據(jù)幀為0b01001111,然后將該數(shù)據(jù)幀按照發(fā)送時(shí)鐘一位一位地發(fā)送出去。

接收數(shù)據(jù),這是本設(shè)計(jì)的重點(diǎn),也是容易出錯(cuò)的地方。以接收數(shù)據(jù)的上升沿和下降沿為依據(jù),將cnt 信號(hào)清0,那么下一個(gè)周期的信號(hào)一定是正確的采樣點(diǎn),即cnt 為1 的位置采樣。因?yàn)楸驹O(shè)計(jì)為3 倍采樣頻率,所以采用0、1、2 三個(gè)數(shù)循環(huán)計(jì)數(shù),在所有cnt 為1 的位置進(jìn)行采樣。而在上升沿和下降沿都將cnt 清零,也能保證積累的波特率誤差不會(huì)造成大面積的誤碼。這時(shí)接收到的數(shù)據(jù)變成了比特流,需要對(duì)其進(jìn)行幀定位。依據(jù)數(shù)據(jù)位寬、有無(wú)奇偶校驗(yàn)位可得到數(shù)據(jù)位寬,然后根據(jù)起始位為低電平,停止位為高電平,判斷出幀邊界。該方法不僅可用于間斷數(shù)據(jù),還可以用于大帶寬下的連續(xù)數(shù)據(jù)。

2.3 寄存器

本設(shè)計(jì)有兩個(gè)配置寄存器,分別是baud_rate 和mode。寄存器baud_rate,共8bits,低4bits 有效,0-15分別代表表1 中提到的16 種速率。寄存器mode 用來(lái)配置串口工作模式,共8bits,低5bits 有效,其中,[1:0]用來(lái)控制發(fā)送數(shù)據(jù)的位寬,用來(lái)適配數(shù)據(jù)不是整字節(jié)的使用場(chǎng)景;[2:2]用來(lái)配置停止位的寬度,配置為0 代表停止位為1bit,配置為1 代表停止位為2bits;[3:3]用來(lái)配置奇校驗(yàn)還是偶校驗(yàn),配置為0 代表奇校驗(yàn),配置為1 代表偶校驗(yàn);[4:4]用來(lái)配置是否使能奇偶校驗(yàn),0 代表不使能,1 代表使能;[5:5]為測(cè)試功能,在串口處的換回使能,0 代表環(huán)回不開(kāi)啟,1 代表環(huán)回開(kāi)啟。以上這些配置使得本系統(tǒng)的可用性更好,擴(kuò)大了本系統(tǒng)的使用范圍。寄存器說(shuō)明如表2 所示。

表2:寄存器說(shuō)明

3 上位機(jī)設(shè)計(jì)

安裝FT232H 驅(qū)動(dòng)后,上位機(jī)調(diào)用驅(qū)動(dòng)提供的接口函數(shù)來(lái)配置、控制FT232H,以及接收發(fā)送數(shù)據(jù)。

上位機(jī)需要具備使用簡(jiǎn)單、與各個(gè)不同版本的windows 系統(tǒng)都具有較好的兼容性的特點(diǎn)。所以本上位機(jī)采用C#為上位機(jī)的設(shè)計(jì)語(yǔ)言,在上位機(jī)的布局和功能構(gòu)成上參考通用的串口工具。具備波特率、奇偶校驗(yàn)、停止位、數(shù)據(jù)位寬的配置。

固件配置:利用官方提供的EEPROM 配置軟件,配置本系統(tǒng)獨(dú)有的VID 及PID,將FT232H 配置為“245 FIFO 模式”,實(shí)現(xiàn)同步FIFO 接口;同時(shí),配置31 號(hào)管腳為通用IO,用于實(shí)現(xiàn)cfg_or_data 的控制。

初始化:首先效用FT_Open 函數(shù),打開(kāi)設(shè)備。然后調(diào)用函數(shù)FT_SetLatencyTimer,配置延遲時(shí)間,當(dāng)接收緩存的超時(shí)后,用來(lái)沖刷到所有剩余的數(shù)據(jù),可配置為2ms 到255ms,本系統(tǒng)配置為16ms。調(diào)用函數(shù)FT_SetUSBParameters,配置USB 的緩沖大小,該值只能配置為64Bytes 的整數(shù)倍,本系統(tǒng)采用默認(rèn)值4Kbytes。

串口配置:開(kāi)啟軟件后,通過(guò)函數(shù)FT_GetVIDPID獲取器件的VID 及PID,確認(rèn)是本系統(tǒng),當(dāng)串口關(guān)閉時(shí),上位機(jī)調(diào)用FT_SetBit 函數(shù),將31 號(hào)管腳配置為高電平,即配置沒(méi)事,每修改一次配置(包括波特率、停止位、奇偶校驗(yàn)、數(shù)據(jù)位寬),上位機(jī)都會(huì)向FPGA 發(fā)送一個(gè)配置幀,將當(dāng)前上位機(jī)的配置同步給FPGA。

數(shù)據(jù)傳輸:當(dāng)串口打開(kāi)時(shí),串口的配置將不能再修改。此時(shí)上位機(jī)調(diào)用FT_ResetBit 函數(shù),將31 號(hào)管腳配置為低電平,也就是傳輸模式,此時(shí),點(diǎn)擊發(fā)送,上位機(jī)就會(huì)讀取發(fā)送數(shù)據(jù)文本框中的數(shù)據(jù),然后進(jìn)行數(shù)據(jù)類(lèi)型轉(zhuǎn)換,并調(diào)用FT_GetStatus 函數(shù),查看發(fā)送緩存的剩余空間,按照甚于空間的大小,調(diào)用FT_Write 函數(shù),將該數(shù)據(jù)發(fā)送出去。上位機(jī)創(chuàng)建一個(gè)監(jiān)聽(tīng)進(jìn)程,每隔100ms,上位機(jī)會(huì)調(diào)用FT_GetStatus 函數(shù),讀取接收緩存的字節(jié)數(shù),當(dāng)接收緩存的字節(jié)數(shù)非0 時(shí),調(diào)用函數(shù)FT_Read,讀取接收數(shù)據(jù),并將讀回的數(shù)據(jù)進(jìn)行格式轉(zhuǎn)換,轉(zhuǎn)換為十六進(jìn)制,并顯示再接收數(shù)據(jù)文本框中。

4 測(cè)試

誤碼率測(cè)試。測(cè)試環(huán)境:40MHz 波特率,收發(fā)器端雙絞線(xiàn)環(huán)回,發(fā)送1MByte 文件,接收完成后,對(duì)比接收文件和發(fā)送文件,得到誤碼率。經(jīng)過(guò)測(cè)試,在40MHz 波特率下,誤碼率0%。

5 總結(jié)

本設(shè)計(jì)完成了一個(gè)基于USB 的高速串口,系統(tǒng)采用FT232H 芯片作為USB 芯片,實(shí)現(xiàn)了USB 與同步并行接口的轉(zhuǎn)換,采用FPGA 實(shí)現(xiàn)串口與同步并行接口的相互轉(zhuǎn)換,并且具備串口基本的模式配置,可通過(guò)上位機(jī)控制串口接收和發(fā)送數(shù)據(jù)。實(shí)驗(yàn)證明,該系統(tǒng)可以實(shí)現(xiàn)40Mbps 的波特率,發(fā)送1MByte 的數(shù)據(jù),誤碼率為0,能夠滿(mǎn)足如較低速數(shù)據(jù)采集等場(chǎng)景的使用。

此外,本設(shè)計(jì)通過(guò)設(shè)置burst 來(lái)提升傳輸效率的同時(shí),能夠均衡收發(fā)兩個(gè)方向的帶寬,亦可用于其他設(shè)計(jì)中。

猜你喜歡
發(fā)送數(shù)據(jù)波特率低電平
鐵道車(chē)輛高/低電平信號(hào)智能發(fā)生器設(shè)計(jì)
2017款凱迪拉克2.8L/3.0L/3.2L/3.6L車(chē)型低電平參考電壓總線(xiàn)電路圖
基于馬爾科夫鏈的LoRaWAN網(wǎng)絡(luò)節(jié)點(diǎn)性能分析
帶標(biāo)記方式的CRDSA++協(xié)議性能分析*
基于FPGA的異步串行通信波特率容錯(cuò)設(shè)計(jì)
使用IPSec安全傳輸數(shù)據(jù)
15-MeV電子直線(xiàn)加速器的低電平系統(tǒng)
集成電路靜態(tài)參數(shù)測(cè)試
C*Core芯片SCI串口波特率容限優(yōu)化
計(jì)算機(jī)多設(shè)備接口波特率不匹配的研究
德安县| 大田县| 安岳县| 江达县| 潼关县| 钦州市| 吉水县| 微博| 呈贡县| 龙游县| 且末县| 建瓯市| 揭阳市| 观塘区| 沁阳市| 柳江县| 舟曲县| 固镇县| 苍山县| 京山县| 宝鸡市| 苗栗县| 伊宁市| 新闻| 长白| 阿拉尔市| 五台县| 临城县| 汤原县| 莒南县| 沁水县| 徐水县| 木里| 资溪县| 石柱| 龙海市| 扶风县| 新巴尔虎右旗| 娄烦县| 德庆县| 平安县|