在上一篇該系列博文中講解了MATLAB待處理數(shù)據(jù)寫入.bin二進制數(shù)據(jù)文件的過程,接下來需要將數(shù)據(jù)通過以太網(wǎng)發(fā)送到ZYNQ驗證平臺。之前了解過Xilinx公司面向DSP開發(fā)的System Generator可以通過硬件協(xié)仿真的方式,進行算法板級驗證。一個是本人不熟悉這種方式,再一個缺乏通用性,也無法在系統(tǒng)層面進行硬件驗證。當然方案有很多,熟悉上位機的朋友完全可以自己寫個軟件完成數(shù)據(jù)傳輸和算法結果對比等功能。
這里選擇最簡單的方案:在上位機通過網(wǎng)絡調試助手將數(shù)據(jù)打包并發(fā)送至以太網(wǎng)端口,ZYNQ端利用W5500硬件協(xié)議棧芯片解析數(shù)據(jù)。有人可能會說用ZYNQ這么高端的設備還使用外接協(xié)議棧芯片連接以太網(wǎng)真是浪費,這里就算是開個頭吧,只能說根據(jù)能力和現(xiàn)有條件選擇傳輸方案。如果數(shù)據(jù)量較大的場合,可考慮用LWIP開源協(xié)議?;蛑苯永?a href="http://ttokpm.com/tags/verilog/" target="_blank">verilogHDL編寫UDP/IP協(xié)議和MAC控制器的方式實現(xiàn)1000Mbps速率傳輸。
本文主要總結內容包括:TCP協(xié)議基礎 網(wǎng)絡調試助手應用事項,以及W5500的驅動移植。為了保證數(shù)據(jù)正確性,選用TCP這一可靠傳輸協(xié)議。以下介紹兩個比較淺顯易懂的博文,供沒有網(wǎng)絡和TCP協(xié)議基礎的朋友參考。(見參考鏈接1 2)
有了以上基礎知識,我們就可以正確配置網(wǎng)絡參數(shù)了。查看W5500驅動中網(wǎng)絡參數(shù)配置部分代碼:
void Load_Net_Parameters(void) {
//加載端口0的工作模式,TCP客戶端模式
S0_Mode = TCP_CLIENT; //UDP_MODE
Gateway_IP[0] = 192; //加載設備網(wǎng)關參數(shù)
Gateway_IP[1] = 168;
Gateway_IP[2] = 90;
Gateway_IP[3] = 1;
Sub_Mask[0] = 255; //加載設備子網(wǎng)掩碼
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協(xié)議中服務器,ZYNQ驗證平臺視為客戶端,即為“呼叫端”。由代碼看出PC端IP地址為192.168.90.188,子網(wǎng)掩碼應設為:255.255.255.0,這樣ZYNQ與PC端在一個子網(wǎng)內,可直接通過網(wǎng)線連接。 端口號為6000。驅動中包含W5500 SPI用戶接口時序部分代碼,可簡單修改調用本人的博文《ZYNQ EMIO使用及可重用封裝》中的EMIO接口函數(shù)(見參考鏈接3)。
根據(jù)上面參數(shù)配置好PC端的IP地址 子網(wǎng)掩碼后,我們來看下網(wǎng)絡調試助手的“坑”。
基本使用沒什么可說的,網(wǎng)上教程很多。關鍵是畫紅框的部分。這里的發(fā)送周期要盡量設置大些,因為整個數(shù)據(jù)文件會被切割成多個數(shù)據(jù)包,每個包的發(fā)送和允許重傳時間由總的發(fā)送周期分配得到。如果文件較大,發(fā)送周期又設置的較小,會導致后半部分被丟棄(所設置時間只夠傳輸文件的前半部分)。RX方向接收數(shù)據(jù)時選擇接收轉向文件,注意兩點:1 接收文件的擴展名同樣要為.bin 2 不要選擇十六進制顯示,否則接收數(shù)據(jù)會變成字符串(可能是軟件bug)。
W5500的C語言驅動基于網(wǎng)上流傳的STM32版本代碼。其中應用API為Process_Socket_Data中的發(fā)送和接收函數(shù):Write_SOCK_Data_Buffer Read_SOCK_Data_Buffer。兩者內部控制讀寫指針偏移以及調用SPI接口函數(shù)完成數(shù)據(jù)傳輸,此處不進行詳述,關于W5500的C語言驅動可看教程視頻(見參考鏈接4)。最后附上環(huán)回數(shù)據(jù)的demo效果:
對于網(wǎng)絡傳輸部分的總結就到這里,后邊可能會考慮利用LWIP完成高速傳輸。數(shù)據(jù)傳到ZYNQ了,下一步當然是先緩存起來,再發(fā)送到PL端驗證算法模塊,這樣做的好處是可以模擬實時數(shù)據(jù)流,比如驗證通信算法和視頻處理算法時尤為適用。華麗分割線
編輯:hfy
-
Xilinx
+關注
關注
71文章
2155瀏覽量
120859 -
C語言
+關注
關注
180文章
7595瀏覽量
135894 -
TCP
+關注
關注
8文章
1347瀏覽量
78934 -
子網(wǎng)掩碼
+關注
關注
2文章
39瀏覽量
11009 -
網(wǎng)絡傳輸
+關注
關注
0文章
135瀏覽量
17360
發(fā)布評論請先 登錄
相關推薦
評論