<font color="#FF8000">作者:ALINX</font>
<span id="profileBt"><a href="https://zhuanlan.zhihu.com/p/345036094">* 本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处。</a></span>
<strong>适用于板卡型号:</strong>
AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG
<strong>vivado工程目录为“ps_hello/vivado”</strong>
vitis工程目录为“ps_remote/vitis”
在实际工作中,会遇到产品升级问题,如果按照程序烧录的方式,可能需要打开产品的外壳,这无疑。本章介绍一种通过网络远程更新FLASH程序的方法,包含UDP和TCP两种方法。
<strong>软件工程师工作内容</strong>
以下为软件工程师负责内容。
<strong>1. Vitis程序开发</strong>
1.1 UDP传输方式
1)LWIP部分主要处理BIN文件的接收,程序为lwip_app.c
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121562-1.p…; alt=""></center>
2)在创建工程后,需要使能lwip库,并进行设置,使能DHCP功能,将pbuf空间尽可能设置大一些,增大缓存空间,提高效率。
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121563-2.j…; alt=""></center>
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121564-3.j…; alt=""></center>
3)udp_receive函数为设置的接收回调函数,主要功能是接收数据,并将接收到的数据缓存到FlashRxBuffer空间,留待更新Flash使用,在发送数据后,再发送“update”命令,开始更新flash,在函数中判断此命令。
4)在while循环语句中,判断StartUpdate变量值,更新Flash。
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121565-4.p…; alt=""></center>
1.2 TCP传输方式
1)TCP的LWIP部分同样也是lwip_app.c文件,控制部分参考lwip echo server例程,建立一个TCP Server
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121566-5.j…; alt=""></center>
2)与UDP类似,在recv_callback接收回调函数中,缓存接收到的BIN文件,启动更新命令同样是update,其他部分也与UDP类似。
1.3 QSPI Flash读写控制
UDP和TCP两种方式使用的是同样的QSPI读写文件qspi.c和qspi.h
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121567-6.p…; alt=""></center>
1)qspi.c文件是根据xqspipsu_generic_flash_polled_example做的修改
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121568-7.p…; alt=""></center>
2)主要有以下一些函数,写使能及关闭,flash擦除,flash写,flash读,读Flash ID等。
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121569-8.p…; alt=""></center>
3)主要的函数为update_qspi,其中TotalLen为要更新的总字节数,FlashDataToSend为存放更新数据的缓存区域,流程也比较简单,首先是擦除,在这里没选择擦除整个Flash,而是根据TotalLen大小进行Sector擦除,因此擦除的空间会比TotalLen稍微大一点;然后是写Flash,利用FlashWrite函数进行写入;最后是校验,从Flash里读出数据,并与写入的数据进行对比。
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121570-9.j…; alt=""></center>
<strong>2. 板上验证</strong>
我们可以选择其他例程的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地址,就无法验证。
没有问题之后打开串口软件。
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121571-10…; alt=""></center>
2.1 UDP方式
1)下载程序,可以看串口里的信息
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121572-11…; alt=""></center>
2)打开工程目录下的板卡网络升级软件
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121573-12…; alt=""></center>
3)填入板卡的IP地址和端口号,选择UDP发送方式,选择BOOT.bin文件,点击发送
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121574-13…; alt=""></center>
4)发送完毕后,会显示发送的字节数
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121575-14…; alt=""></center>
5)在串口窗口可以看到板卡接收到的字节数,以及擦除,烧写,校验过程。
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121576-15…; alt=""></center>
6)断电通拨码开关选择QSPI启动方式,打开电源启动,即可看到程序运行起来。
2.2 TCP方式
1)下载程序,可以看到串口信息
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121577-16…; alt=""></center>
2)打开工程目录下的板卡网络升级软件
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121578-17…; alt=""></center>
3)填入IP地址和端口号,选择TCP发送方式,选择BOOT.bin文件,点击发送
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121579-18…; alt=""></center>
4)与UDP一样,也能看到发送的字节数
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121580-19…; alt=""></center>
5)在串口窗口可以看到板卡接收到的字节数,以及擦除,烧写,校验过程。
<center><img src="http://xilinx.eetrend.com/files/2021-02/wen_zhang_/100061566-121581-20…; alt=""></center>
6)断电通过拨码开关选择QSPI启动方式,打开电源启动,即可看到程序运行起来。