1. 程式人生 > 其它 >RISC-V MCU應用之單片赤菟V307實現八串列埠伺服器

RISC-V MCU應用之單片赤菟V307實現八串列埠伺服器

簡介

串列埠伺服器,提供串列埠轉網路的功能,將串列埠轉換成TCP/IP協議網路介面,實現串列埠和網路介面的資料雙向透明傳輸,擴充套件串列埠裝置的通訊距離。
赤菟V307是搭載沁恆自研RISC-V核心青稞V4F的高效能互聯型MCU,主頻支援144MHz,支援硬體浮點運算(FPU),提供八個UART介面、USB2.0高速介面(480Mbps)並內建了PHY收發器、千兆乙太網MAC並整合10M PHY、2個CAN介面等豐富的外設資源。

 

 

基於八個UART介面、10M乙太網的強大外設,通過單片赤菟V307即可實現八串列埠伺服器,每個串列埠獨立工作。

 

 

原始碼倉庫地址:https://github.com/openwch/ch32v307/tree/main/Application/8_uarts_server

網口端設計
網口端採用的是開源的輕量級TCP/IP協議棧LwIP,可以輕鬆實現赤菟V307網口端的TCP、UDP通訊。
例程中預設開啟的是TCP Client模式,採用單向迴圈連結串列的方式接收TCP Server發過來的資料。

 

 

當串列埠端接收到資料時,直接啟動TCP Client的傳送函式,並更新佇列的讀指標。

串列埠端設計
串列埠端為了加快資料的收發,採用DMA迴圈佇列的方式接收資料,通過查詢接收DMA 傳輸資料數目暫存器CNTR,與上一次該值進行比較,有變化則說明串列埠接收到資料,此時便更新佇列寫指標,並計算佇列中資料長度。

 

 

根據網口接收端的連結串列中的資料地址及長度,啟動串列埠端的傳送DMA進行資料傳送。

多工設計
通過RT-Thread作業系統,建立兩個執行緒,分別為用於網口端接收資料的“eth_rev”執行緒和用於串列埠端接收資料的“uart_rev”執行緒。
採用時間片輪轉方式進行這兩個執行緒的排程,當“eth_rev”執行緒收到網口端的資料時,啟動串列埠端的傳送DMA將資料通過串列埠傳送出去;當“uart_rev”執行緒收到串列埠端的資料時,啟動網口端的傳送函式將資料通過網口傳送出去,這樣就實現了串列埠和網路介面的資料雙向透明傳輸。

驗證
串列埠預設波特率為115200,實測八個串列埠獨立工作,可以實現收發10+KB/s的速度。

 

 

該例程目前僅實現了TCP Client的收發,還有TCP Server、UDP Server/Client等需要完善,希望各位開發者能夠積極提交pr,一起完善該專案。可新增微信15950380583為好友,註明:赤菟V307,邀請您進入沁恆RISC-V MCU開發者微信交流群,一起玩轉RISC-V MCU。
赤菟V307評估板購買連結:

https://item.szlcsc.com/3329177.html