【ZYNQ Ultrascale+ MPSOC FPGA教程】第十三章 RS485實驗

原創聲明:

本原創教程由芯驛電子科技(上海)有限公司(ALINX)創做,版權歸本公司全部,如需轉載,需受權並註明出處。緩存

適用於板卡型號:

AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG併發

實驗Vivado工程爲「rs485_test」。工具

本章以AN3485模塊介紹RS485的數據傳輸。測試

1.實驗原理

前面介紹過RS232和RS422的實驗,而RS485與RS422相似,也是採用差分信號傳輸,但RS485是半雙工傳輸,也就是說,同一時刻只能有一個方向的數據傳輸。並且接口也比RS422少,只有差分信號A和B,而與ARM或FPGA相連的信號爲DE(方向選擇),DI(輸入信號TXD),RO(輸出信號RXD)。設計

從MAX3485文檔中,發送方向,若是DE爲1時,也就是輸出使能,DI值爲1時,對於差分信號A和B值爲1和0,不然爲0和1。3d

從接收來看,若是DE爲0,A和B之間差值大於等於+0.2V,則RO值爲1,不然爲0。orm

2.程序設計

因爲RS485是半雙工傳輸,那麼咱們須要制定傳輸協議進行握手,設定第一個字節爲8’h55,表示一幀數據的開始,接下來是傳輸的數據長度信息,因爲FIFO大小限制(256),範圍爲1~255,接下來是數據。格式即爲:起始8’h55+數據長度+數據。blog

其中uart_tx和uart_rx跟RS232實驗同樣,在這裏只修改uart_test便可。咱們設計的功能爲初始狀態下將DE設爲0,也就是輸入,等待接收上位機發來的數據,並緩存到FIFO中,FIFO大小設置爲256,而後切換DE爲1,也就是輸出,把接收到的數據從FIFO中讀出併發送出去。注意緩存的數據是除去起始8’h55和數量信息的。教程

在RCV_HEAD狀態時,判斷接收到的數據是不是」S」。接口

在RCV_COUNT狀態時,若是數據長度小於0,則跳轉到IDLE狀態,若是大於0,則進入接收數據狀態。

在RCV_DATA狀態下,把數據寫入FIFO,而且檢查數據長度,切換RS485的方向爲輸出,並跳轉狀態。

在切換總線狀態時,爲了可靠工做,在WAIT狀態下,延時1ms進行方向切換。

再而後是發送FIFO中的數據,SEND_WAIT狀態是控制讀使能信號fifo_rden,而且判斷數據是否發送完,發送完後進入IDLE狀態。

3. 實驗測試

咱們仍然使用USB轉串口設備,經過杜邦線將RS485_1的A和B分別與設備的A和B鏈接。

打開串口工具,設置好串口號波特率,選擇16進制發送,發送數據以8’h55開頭,點擊發送,便可在接收窗口看到返回的數據。

相關文章
相關標籤/搜索