在上一篇該系列博文中講解了MATLAB待處理數據寫入.bin二進制數據文件的過程,接下來需要將數據通過以太網發送到ZYNQ驗證平臺。之前了解過Xilinx公司面向DSP開發的System Generator可以通過硬件協仿真的方式,進行算法板級驗證。一個是本人不熟悉這種方式,再一個缺乏通用性,也無法在系統層面進行硬件驗證。當然方案有很多,熟悉上位機的朋友完全可以自己寫個軟件完成數據傳輸和算法結果對比等功能。
這里選擇最簡單的方案:在上位機通過網絡調試助手將數據打包并發送至以太網端口,ZYNQ端利用W5500硬件協議棧芯片解析數據。有人可能會說用ZYNQ這么高端的設備還使用外接協議棧芯片連接以太網真是浪費,這里就算是開個頭吧,只能說根據能力和現有條件選擇傳輸方案。如果數據量較大的場合,可考慮用LWIP開源協議棧或直接利用verilogHDL編寫UDP/IP協議和MAC控制器的方式實現1000Mbps速率傳輸。
本文主要總結內容包括:TCP協議基礎 網絡調試助手應用事項,以及W5500的驅動移植。為了保證數據正確性,選用TCP這一可靠傳輸協議。以下介紹兩個比較淺顯易懂的博文,供沒有網絡和TCP協議基礎的朋友參考。(見參考鏈接1 2)
有了以上基礎知識,我們就可以正確配置網絡參數了。查看W5500驅動中網絡參數配置部分代碼:
void Load_Net_Parameters(void) {
//加載端口0的工作模式,TCP客戶端模式
S0_Mode = TCP_CLIENT; //UDP_MODE
Gateway_IP[0] = 192; //加載設備網關參數
Gateway_IP[1] = 168;
Gateway_IP[2] = 90;
Gateway_IP[3] = 1;
Sub_Mask[0] = 255; //加載設備子網掩碼
Sub_Mask[1] = 255;
Sub_Mask[2] = 255;
Sub_Mask[3] = 0;
Phy_Addr[0] = 0x0c; //加載設備物理地址(mac)
Phy_Addr[1] = 0x29;
Phy_Addr[2] = 0xab;
Phy_Addr[3] = 0x7c;
Phy_Addr[4] = 0x00;
Phy_Addr[5] = 0x01;
IP_Addr[0] = 192; //加載本設備(FPGA端)IP地址
IP_Addr[1] = 168;
IP_Addr[2] = 90;
IP_Addr[3] = 199;
//加載設備端口0(socket 0)的端口號5000
S0_Port[0] = 0x13; //十六進制 1388轉換成十進制為5000
S0_Port[1] = 0x88;
//設定的是客戶端模式
if(S0_Mode == TCP_CLIENT)
{
//加載端口0的目的(如調試用的pc機)IP地址
S0_DIP[0] = 192;
S0_DIP[1] = 168;
S0_DIP[2] = 90;
S0_DIP[3] = 188;
//加載端口0的目的(如調試用的pc機)端口號6000
S0_DPort[0] = 0x17;
S0_DPort[1] = 0x70;
}
//設定的是UDP模式,初始化給一個目的IP和端口號。
if(S0_Mode == UDP_MODE)
{
//加載端口0的目的(如調試用的pc機)IP地址
UDP_DIPR[0] = 192;
UDP_DIPR[1] = 168;
UDP_DIPR[2] = 90;
UDP_DIPR[3] = 188;
//加載端口0的目的(如調試用的pc機)端口號6000
UDP_DPORT[0] = 0x17;
UDP_DPORT[1] = 0x70;
}
}
此處將PC端作為TCP協議中服務器,ZYNQ驗證平臺視為客戶端,即為“呼叫端”。由代碼看出PC端IP地址為192.168.90.188,子網掩碼應設為:255.255.255.0,這樣ZYNQ與PC端在一個子網內,可直接通過網線連接。 端口號為6000。驅動中包含W5500 SPI用戶接口時序部分代碼,可簡單修改調用本人的博文《ZYNQ EMIO使用及可重用封裝》中的EMIO接口函數(見參考鏈接3)。
根據上面參數配置好PC端的IP地址 子網掩碼后,我們來看下網絡調試助手的“坑”。
基本使用沒什么可說的,網上教程很多。關鍵是畫紅框的部分。這里的發送周期要盡量設置大些,因為整個數據文件會被切割成多個數據包,每個包的發送和允許重傳時間由總的發送周期分配得到。如果文件較大,發送周期又設置的較小,會導致后半部分被丟棄(所設置時間只夠傳輸文件的前半部分)。RX方向接收數據時選擇接收轉向文件,注意兩點:1 接收文件的擴展名同樣要為.bin 2 不要選擇十六進制顯示,否則接收數據會變成字符串(可能是軟件bug)。
W5500的C語言驅動基于網上流傳的STM32版本代碼。其中應用API為Process_Socket_Data中的發送和接收函數:Write_SOCK_Data_Buffer Read_SOCK_Data_Buffer。兩者內部控制讀寫指針偏移以及調用SPI接口函數完成數據傳輸,此處不進行詳述,關于W5500的C語言驅動可看教程視頻(見參考鏈接4)。最后附上環回數據的demo效果:
對于網絡傳輸部分的總結就到這里,后邊可能會考慮利用LWIP完成高速傳輸。數據傳到ZYNQ了,下一步當然是先緩存起來,再發送到PL端驗證算法模塊,這樣做的好處是可以模擬實時數據流,比如驗證通信算法和視頻處理算法時尤為適用。華麗分割線
編輯:hfy
-
Xilinx
+關注
關注
73文章
2179瀏覽量
123873 -
C語言
+關注
關注
180文章
7626瀏覽量
139617 -
TCP
+關注
關注
8文章
1395瀏覽量
80093 -
子網掩碼
+關注
關注
2文章
41瀏覽量
11142 -
網絡傳輸
+關注
關注
0文章
143瀏覽量
17816
發布評論請先 登錄
相關推薦
使用W5500模塊實現DHCP協議,請教一個問題
新華龍電子推出最新網絡開發板(W5100&W5500方案)
WIZnet W5500的特點和應用介紹
什么是網絡卸載?W5500中文資料
基于FPGA和W5500的以太網傳輸系統實現
w5500 UDP模式網絡調試助手發送數據>1472,收不到數據??
W5500以太網芯片分享!
使用w5500芯片做網絡通信
W5500數據手冊(中文資料PDF版免費下載)
w5500原理圖_w5500電路圖

W5500以太網控制芯片的數據手冊免費下載

評論