请选择 进入手机版 | 继续访问电脑版
[X]关闭

[米联客-XILINX-H3_CZ08_7100] FPGA_SDK高级篇连载-24 基于 TCP 的远程更新固件方案

文档创建者:FPGA课程
浏览次数:237
最后更新:2024-10-11
文档课程分类-AMD-ZYNQ
AMD-ZYNQ: ZYNQ-SOC » 1_SDK应用方案(仅旗舰型号) » 2-SDK高级应用方案
本帖最后由 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系统构架
2912c230eabe48c7a9b28bf67601528c.jpg
3搭建SOC系统工程
详细的搭建过程这里不再重复,对于初学读者如果还不清楚如何创建SOC工程的,请学习“3-1-01米联客2024版ZynqSocSDK入门篇”中第一个工程 “01Vitis Soc开发入门”这个实验。
1e4c24f87b4349ce90709f3f3d7ab379.jpg
主要看下FLASH和以太网部分的配置,其他的设置请参考“3-1-01米联客2024版ZynqSocSDK入门篇”中第一个工程 “01Vitis Soc开发入门”这个实验。
053d8f0eb6bb4f24bd8b78e11e361c68.jpg
f9f3e01c1a4141c68ec7b6b5f95ec973.jpg
784b3a22759147ac8d33f438d199357b.jpg
3.1添加PIN约束
1:选中PROJECT  MANAGERà Add SourcesàAdd or create constraints,添加XDC约束文件。
d34d5b18f95a4ee1af2debb4ae9699da.jpg
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平台。
7c363b70e8024e8190475df75f0905b3.jpg
4搭建Vitis-sdk工程
创建soc_base sdk platform和APP工程的过程不再重复,如果不清楚请参考本章节第一个demo。
4.1创建SDK Platform工程
f84d4eabab014d02a77f3fdf3ad0f2b1.jpg
LWIP库的修改:
1:新版本系列工业级开发板板载网口芯片是RTL8211FDI,由于默认的驱动不支持,需要手动自己修改库文件。我们这里已经提供了修改好的库,解压到vivado的安装路径下的对于路径下:
308b60ec7917405c8e93ac0320e230c3.jpg
b8cd1a75b3694eac82f830828ac02aa8.jpg
修改好后,需要关闭vitis-sdk然后重新打开sdk,否则无法识别修改的库
2:为了创建lwip工程需要先对zu_base中的board support package简称bsp设置lwip库的支持
7abbf31601ef4f45b8c7d3a8dc9cba8f.jpg
3:对lwip库参数修改以达到最佳性能。
本例程使用 RAW API,即函数调用不依赖操作系统。传输效率也比 SOCKET API 高,(具体可参考 xapp1026)。 将 use_axieth_on_zynq 和 use_emaclite_on_zynq 设为 0。如下图所示。
325f86832dc24e168fc18cf1fc03b709.jpg
修改 lwip_memory_options 设置,将 mem_size,memp_n_pbuf,mem_n_tcp_pcb,memp_n_tcp_seg 这 4 个参数 值设大,这样会提高 TCP 传输效率。如下图所示。
9f7a7895797e46f2a595c1b8ae118ed3.jpg
修改 pbuf_options 设置,将 pbuf_pool_size 设大,增加可用的 pbuf 数量,这样同样会提高 TCP 传输效率。如下 图所示。
2ed943707fd34a1480ed89bfbb8e0eed.jpg
修改 tcp_options 设置,将 tcp_snd_buf,tcp_wnd 参数设大,这样同样会提高 TCP 传输效率。如下图所示。
9d64cd67d77a4ea3b7f89aa46d134c31.jpg
修改 temac_adapter_options 设置,将 n_rx_descriptors 和 n_tx_descriptors 参数设大。这样可以提高 zynq 内部 emac dma 的数据迁移效率,同样能提高 TCP 传输效率。如下图所示。
24ada01106c641b88a8441e790427e41.jpg
启用DHCP功能
29aa403c6abd4a99b3bd0ac62b90b1ad.jpg
修改完成后重新编译soc_base
4.2创建APP工程
1:创建helloworld工程
该工程会串口打印“Hello World”字符串,后面通过网络调试助手发送这个文件更新QSPI FLASH中的程序
05dae6138f1e4c5da565d54f2fae1391.jpg
2:创建qpsi_update_tcp工程
该工程是首先固化到FLASH中的,程序运行后会运行lwip tcp协议,当通过网络调试助手把需要更新的程序发送到开发板后,该程序会更新FLASH.
c9628691a1304a21bd1dea70c0d1f4f5.jpg
5方案演示
5.1硬件准备
本实验需要用到 JTAG 下载器、USB 转串口外设,另外需要把核心板上的 2P 模式开关设置到 JTAG 模式,即 ON ON (注意新版本的 MLK-H3-CZ08-7100FC(米联客 7X 系列),支持 JTAG 模式,对于老版本的核心板,JTAG 调试 的时候一定要拔掉 TF 卡,并且设置模式开关为 OFF OFF)
b21803483d2747b78b6e1ca1a025b196.jpg
5.2实验结果
1:首先固化qspi_update_tcp程序
4c4127b1c4394ff6b0442a8d096197c7.jpg
2:从QSPI启动qspi_update_tcp程序
断电,并且拔掉JTAG下载器(只要拔USB接口部分)设置模式开关1-ON 2-OFF 3-ON,后重新通电启动
80d34db5e63249648329a7f9e673890b.jpg
3:利用网络助手发送需要更新的BOOT.BIN
打开网络:
协议类型: TCP Client
远程主机地址:192.168.137.10
远程主机端口:5001
b3b47b83f54e461f84fbd031b7e2b509.jpg
选择打开文件数据源,打开helloworld工程下的,BOOT.BIN文件
1997dc2c3a674dcb9939cc25f29e209c.jpg
46189248acc14264993b8b835a61204b.jpg
单击发送
6d93fefe67c1437887998536f742acec.jpg
发送完成后,输入start update 多一个空格都不行
f48df65a0a5c41c4be4ec27c178b5ad0.jpg
67f9326191534ec7b66f9f29a49e0983.jpg
断电重启开发板,可以看到FLASH程序被更新后,串口输出为Hello World
5d00cc781bbf46db928f2e6122fa1068.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则