本帖最后由 FPGA课程 于 2024-10-11 17:30 编辑
软件版本:VIVADO2021.1
操作系统:WIN10 64bit
硬件平台:适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA
实验平台:米联客-MLK-H3-CZ08-7100开发板
板卡获取平台:https://milianke.tmall.com/
登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!
1概述在之前的应用中,ZYNQ 将 BOOT.bin 文件烧写至 QSPI Flash 基本都是通过 USB Cable 连接 PC,通过 JTAG 接口连接开发板,在 SDK 软件中使用“Program Flash”功能进行现场在线烧写。这种常规方法存在两个缺点。 1、速度慢。Flash 的擦除(Erase)、写入(Program)、校验(Verify)3 个过程所费的时间总和通常都需要若 干分钟。 2、无法脱离 JTAG 口。对于某些产品而言,当产品量产上市后,进入维护升级阶段,若需修改、更新 Flash 中 的 bin 文件,则需对产品进行拆解才可进行。 本例程实现了一种基于 TCP 协议的 Flash bin 文件更新方法。一方面,在较大程度上提高了 bin 文件的烧写速度 (4MB 大小 bin 文件可缩短至 20 秒左右);另一方面,提供了一种远程更新 Flash 的方法,可脱离 JTAG 接口,同 时避免固件升级时对产品进行拆解。 2系统构架
3搭建SOC系统工程详细的搭建过程这里不再重复,对于初学读者如果还不清楚如何创建SOC工程的,请学习“3-1-01米联客2024版ZynqSocSDK入门篇”中第一个工程 “01Vitis Soc开发入门”这个实验。
主要看下FLASH和以太网部分的配置,其他的设置请参考“3-1-01米联客2024版ZynqSocSDK入门篇”中第一个工程 “01Vitis Soc开发入门”这个实验。
3.1添加PIN约束1:选中PROJECT MANAGERà Add SourcesàAdd or create constraints,添加XDC约束文件。
2:打开提供例程,复制约束文件中的管脚约束到XDC文件,或者查看原理图,自行添加管脚约束,并保存。 以下是添加配套工程路径下已经提供的pin脚文件。配套工程的pin脚约束文件在uisrc/04_pin路径 3.2编译并导出平台文件1:单击Block文件à右键àGenerate the Output ProductsàGlobalàGenerate。 2:单击Block文件à右键à Create a HDL wrapper(生成HDL顶层文件)àLet vivado manager wrapper and auto-update(自动更新)。 3:生成Bit文件。 4:导出到硬件: FileàExport HardwareàInclude bitstream 5:导出完成后,对应工程路径的soc_hw路径下有硬件平台文件:system_wrapper.xsa的文件。根据硬件平台文件system_wrapper.xsa来创建需要Platform平台。
4搭建Vitis-sdk工程创建soc_base sdk platform和APP工程的过程不再重复,如果不清楚请参考本章节第一个demo。 4.1创建SDK Platform工程
LWIP库的修改: 1:新版本系列工业级开发板板载网口芯片是RTL8211FDI,由于默认的驱动不支持,需要手动自己修改库文件。我们这里已经提供了修改好的库,解压到vivado的安装路径下的对于路径下:
修改好后,需要关闭vitis-sdk然后重新打开sdk,否则无法识别修改的库
2:为了创建lwip工程需要先对zu_base中的board support package简称bsp设置lwip库的支持
3:对lwip库参数修改以达到最佳性能。
本例程使用 RAW API,即函数调用不依赖操作系统。传输效率也比 SOCKET API 高,(具体可参考 xapp1026)。 将 use_axieth_on_zynq 和 use_emaclite_on_zynq 设为 0。如下图所示。
修改 lwip_memory_options 设置,将 mem_size,memp_n_pbuf,mem_n_tcp_pcb,memp_n_tcp_seg 这 4 个参数 值设大,这样会提高 TCP 传输效率。如下图所示。
修改 pbuf_options 设置,将 pbuf_pool_size 设大,增加可用的 pbuf 数量,这样同样会提高 TCP 传输效率。如下 图所示。
修改 tcp_options 设置,将 tcp_snd_buf,tcp_wnd 参数设大,这样同样会提高 TCP 传输效率。如下图所示。
修改 temac_adapter_options 设置,将 n_rx_descriptors 和 n_tx_descriptors 参数设大。这样可以提高 zynq 内部 emac dma 的数据迁移效率,同样能提高 TCP 传输效率。如下图所示。
启用DHCP功能
修改完成后重新编译soc_base 4.2创建APP工程
1:创建helloworld工程该工程会串口打印“Hello World”字符串,后面通过网络调试助手发送这个文件更新QSPI FLASH中的程序
2:创建qpsi_update_tcp工程该工程是首先固化到FLASH中的,程序运行后会运行lwip tcp协议,当通过网络调试助手把需要更新的程序发送到开发板后,该程序会更新FLASH.
5方案演示
5.1硬件准备本实验需要用到 JTAG 下载器、USB 转串口外设,另外需要把核心板上的 2P 模式开关设置到 JTAG 模式,即 ON ON (注意新版本的 MLK-H3-CZ08-7100FC(米联客 7X 系列),支持 JTAG 模式,对于老版本的核心板,JTAG 调试 的时候一定要拔掉 TF 卡,并且设置模式开关为 OFF OFF)
5.2实验结果
1:首先固化qspi_update_tcp程序
2:从QSPI启动qspi_update_tcp程序断电,并且拔掉JTAG下载器(只要拔USB接口部分)设置模式开关1-ON 2-OFF 3-ON,后重新通电启动
3:利用网络助手发送需要更新的BOOT.BIN打开网络: 协议类型: TCP Client 远程主机地址:192.168.137.10 远程主机端口:5001
选择打开文件数据源,打开helloworld工程下的,BOOT.BIN文件
单击发送
发送完成后,输入start update 多一个空格都不行
断电重启开发板,可以看到FLASH程序被更新后,串口输出为Hello World
|