原創聲明:
本原創教程由芯驛電子科技(上海)有限公司(ALINX)創作,版權歸本公司所有,如需轉載,需授權并注明出處。
適用于板卡型號:
AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG
vivado工程目錄為“ps_hello/vivado”
在實際工作中,會遇到產品升級問題,如果按照程序燒錄的方式,可能需要打開產品的外殼,這無疑。本章介紹一種通過網絡遠程更新FLASH程序的方法,包含UDP和TCP兩種方法。
軟件工程師工作內容
以下為軟件工程師負責內容。
1. Vitis程序開發
1.1 UDP傳輸方式
1)LWIP部分主要處理BIN文件的接收,程序為lwip_app.c
2)在創建工程后,需要使能lwip庫,并進行設置,使能DHCP功能,將pbuf空間盡可能設置大一些,增大緩存空間,提高效率。
3)udp_receive函數為設置的接收回調函數,主要功能是接收數據,并將接收到的數據緩存到FlashRxBuffer空間,留待更新Flash使用,在發送數據后,再發送“update”命令,開始更新flash,在函數中判斷此命令。
4)在while循環語句中,判斷StartUpdate變量值,更新Flash。
1.2 TCP傳輸方式
1)TCP的LWIP部分同樣也是lwip_app.c文件,控制部分參考lwip echo server例程,建立一個TCP Server
2)與UDP類似,在recv_callback接收回調函數中,緩存接收到的BIN文件,啟動更新命令同樣是update,其他部分也與UDP類似。
1.3 QSPI Flash讀寫控制
UDP和TCP兩種方式使用的是同樣的QSPI讀寫文件qspi.c和qspi.h
1)qspi.c文件是根據xqspipsu_generic_flash_polled_example做的修改
2)主要有以下一些函數,寫使能及關閉,flash擦除,flash寫,flash讀,讀Flash ID等。
3)主要的函數為update_qspi,其中TotalLen為要更新的總字節數,FlashDataToSend為存放更新數據的緩存區域,流程也比較簡單,首先是擦除,在這里沒選擇擦除整個Flash,而是根據TotalLen大小進行Sector擦除,因此擦除的空間會比TotalLen稍微大一點;然后是寫Flash,利用FlashWrite函數進行寫入;最后是校驗,從Flash里讀出數據,并與寫入的數據進行對比。
2. 板上驗證
我們可以選擇其他例程的BOOT.bin文件。我們是設定網絡環境理想狀態下做的實驗,在做此實驗時,不要打開其他有關以太網傳輸的上位機軟件,由于端口號一樣,可能會造成沖突。
1)首先連接開發板,將網線連接到網口
2)如果有DHCP服務器,會自動分配IP給開發板;如果沒有DHCP服務器,默認開發板IP地址為192.168.1.10,需要將PC的IP地址設為同一網段,如下圖所示。同時要確保網絡里沒有192.168.1.10的IP地址,否則會造成IP沖突,導致無法顯示。可以在板子未上電前在CMD里輸入ping 192.168.1.10查看是否能ping通,如果ping通,說明網絡中有此IP地址,就無法驗證。
沒有問題之后打開串口軟件。
2.1 UDP方式
2)打開工程目錄下的板卡網絡升級軟件
3)填入板卡的IP地址和端口號,選擇UDP發送方式,選擇BOOT.bin文件,點擊發送
4)發送完畢后,會顯示發送的字節數
5)在串口窗口可以看到板卡接收到的字節數,以及擦除,燒寫,校驗過程。
6)斷電通撥碼開關選擇QSPI啟動方式,打開電源啟動,即可看到程序運行起來。
2.2 TCP方式
1)下載程序,可以看到串口信息
2)打開工程目錄下的板卡網絡升級軟件
3)填入IP地址和端口號,選擇TCP發送方式,選擇BOOT.bin文件,點擊發送
4)與UDP一樣,也能看到發送的字節數
5)在串口窗口可以看到板卡接收到的字節數,以及擦除,燒寫,校驗過程。
6)斷電通過撥碼開關選擇QSPI啟動方式,打開電源啟動,即可看到程序運行起來。
-
FPGA
+關注
關注
1630文章
21769瀏覽量
604646 -
FlaSh
+關注
關注
10文章
1640瀏覽量
148295 -
Zynq
+關注
關注
10文章
610瀏覽量
47224 -
QSPI
+關注
關注
0文章
41瀏覽量
12227 -
MPSoC
+關注
關注
0文章
199瀏覽量
24300
發布評論請先 登錄
相關推薦
評論