作者:ALINX
* 本原創(chuàng)教程由芯驛電子科技(上海)有限公司(ALINX)創(chuàng)作,版權(quán)歸本公司所有,如需轉(zhuǎn)載,需授權(quán)并注明出處。
適用于板卡型號(hào):
AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG
實(shí)驗(yàn)Vivado工程為“rs485_test”。
本章以AN3485模塊介紹RS485的數(shù)據(jù)傳輸。
1.實(shí)驗(yàn)原理
前面介紹過(guò)RS232和RS422的實(shí)驗(yàn),而RS485與RS422類(lèi)似,也是采用差分信號(hào)傳輸,但RS485是半雙工傳輸,也就是說(shuō),同一時(shí)刻只能有一個(gè)方向的數(shù)據(jù)傳輸。而且接口也比RS422少,只有差分信號(hào)A和B,而與ARM或FPGA相連的信號(hào)為DE(方向選擇),DI(輸入信號(hào)TXD),RO(輸出信號(hào)RXD)。
從MAX3485文檔中,發(fā)送方向,如果DE為1時(shí),也就是輸出使能,DI值為1時(shí),對(duì)于差分信號(hào)A和B值為1和0,否則為0和1。
從接收來(lái)看,如果DE為0,A和B之間差值大于等于+0.2V,則RO值為1,否則為0。
2.程序設(shè)計(jì)
由于RS485是半雙工傳輸,那么我們需要制定傳輸協(xié)議進(jìn)行握手,設(shè)定第一個(gè)字節(jié)為8’h55,表示一幀數(shù)據(jù)的開(kāi)始,接下來(lái)是傳輸?shù)臄?shù)據(jù)長(zhǎng)度信息,由于FIFO大小限制(256),范圍為1~255,接下來(lái)是數(shù)據(jù)。格式即為:起始8’h55+數(shù)據(jù)長(zhǎng)度+數(shù)據(jù)。
其中uart_tx和uart_rx跟RS232實(shí)驗(yàn)一樣,在這里只修改uart_test即可。我們?cè)O(shè)計(jì)的功能為初始狀態(tài)下將DE設(shè)為0,也就是輸入,等待接收上位機(jī)發(fā)來(lái)的數(shù)據(jù),并緩存到FIFO中,F(xiàn)IFO大小設(shè)置為256,然后切換DE為1,也就是輸出,把接收到的數(shù)據(jù)從FIFO中讀出并發(fā)送出去。注意緩存的數(shù)據(jù)是除去起始8’h55和數(shù)量信息的。
在RCV_HEAD狀態(tài)時(shí),判斷接收到的數(shù)據(jù)是否是”S”。
在RCV_COUNT狀態(tài)時(shí),如果數(shù)據(jù)長(zhǎng)度小于0,則跳轉(zhuǎn)到IDLE狀態(tài),如果大于0,則進(jìn)入接收數(shù)據(jù)狀態(tài)。
在RCV_DATA狀態(tài)下,把數(shù)據(jù)寫(xiě)入FIFO,并且檢查數(shù)據(jù)長(zhǎng)度,切換RS485的方向?yàn)檩敵?,并跳轉(zhuǎn)狀態(tài)。
在切換總線狀態(tài)時(shí),為了可靠工作,在WAIT狀態(tài)下,延時(shí)1ms進(jìn)行方向切換。
再然后是發(fā)送FIFO中的數(shù)據(jù),SEND_WAIT狀態(tài)是控制讀使能信號(hào)fifo_rden,并且判斷數(shù)據(jù)是否發(fā)送完,發(fā)送完后進(jìn)入IDLE狀態(tài)。
3. 實(shí)驗(yàn)測(cè)試
我們?nèi)匀皇褂?a target="_blank">USB轉(zhuǎn)串口設(shè)備,通過(guò)杜邦線將RS485_1的A和B分別與設(shè)備的A和B連接。
打開(kāi)串口工具,設(shè)置好串口號(hào)波特率,選擇16進(jìn)制發(fā)送,發(fā)送數(shù)據(jù)以8’h55開(kāi)頭,點(diǎn)擊發(fā)送,即可在接收窗口看到返回的數(shù)據(jù)。
審核編輯:何安
-
FPGA
+關(guān)注
關(guān)注
1629文章
21738瀏覽量
603459
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論