FPGA以太网升级程序:无需外设电路与内存,QSPI Flash升级便捷,带校验功能,适用于X...

张开发
2026/4/5 11:11:51 15 分钟阅读

分享文章

FPGA以太网升级程序:无需外设电路与内存,QSPI Flash升级便捷,带校验功能,适用于X...
fpga 以太网升级程序。 升级qspi flash无需增加外部电路无需内存方便实用具备写入校验功能。 确保正确性适用xilinx fpga7系列适合a7和k7 提供fpga上位机源码操作方法。一、概述以太网升级FPGA程序方案实现了通过PC机经串口将更新文件传输至FPGA由FPGA内部Microblaze软核接收数据后写入QSPI Flash的核心功能同时具备数据回读比较机制大幅提升了烧写过程的安全性与可靠性。该方案涵盖FPGA底层逻辑设计、Microblaze软核编程、上位机控制程序开发等多个技术模块形成了一套完整的FPGA程序远程升级解决方案适用于需要频繁更新FPGA程序且对升级安全性有要求的工业控制、嵌入式系统等应用场景。二、开发环境说明本方案的开发工具版本经过严格适配确保各模块间的兼容性具体版本如下FPGA开发工具VIVADO 2019.2用于FPGA底层逻辑搭建、IP核配置及top.bit文件生成上位机开发工具Visual Studio 2019用于编写PC机控制程序实现文件读取、命令下发及升级流程管控Microblaze开发工具Vitis IDE 2019.2用于Microblaze软核应用程序开发生成elf文件实现与QSPI Flash、以太网IP核的交互。三、核心代码模块功能解析一FPGA代码模块FPGA代码的核心是搭建基于Microblaze的软核ARM系统并通过axiquadspi核实现与QSPI Flash的读写控制。axiquadspi核作为FPGA与QSPI Flash之间的通信桥梁提供了标准的SPI接口时序支持对QSPI Flash的高速读写操作。通过VIVADO工具进行IP核配置将axiquadspi核与Microblaze软核通过AXI总线互联使Microblaze能够通过总线指令控制QSPI Flash的擦除、写入、读取等操作为后续程序升级奠定硬件基础。二Microblaze代码模块Microblaze代码是整个升级方案的核心控制单元主要负责axiquadspi核操作、以太网MAC通讯及与PC机的指令交互具体功能函数如下1. axi_quad_spi IP核操作函数erase_flash()函数实现QSPI Flash的格式化功能在写入新程序前清除指定存储区域的数据避免旧数据干扰write_flash()函数接收PC机传输的程序数据按照QSPI Flash的写入时序将数据逐字节或按块写入Flash存储单元read_flash()函数从QSPI Flash指定地址读取数据用于数据回读比较及程序验证readflashid()函数读取QSPI Flash的设备ID用于识别Flash芯片型号确保与预设的芯片配置匹配同时该函数必须调用1次以启动axiquadspi IP核data_compare()函数将写入Flash的数据与PC机下发的原始数据进行逐字节比对验证数据写入的准确性若比对不一致则反馈校验错误信息提升烧写安全性。2. 以太网IP核操作函数eer_common()函数当接收到PC机的错误命令或执行过程中出现异常时向PC机反馈错误信息便于上位机定位问题complete_common()函数在完成Flash擦除、写入等关键操作后向PC机发送操作完成指令告知上位机进入下一流程true_common()函数当数据接收正确、指令执行无误时向PC机发送数据正确确认信号确保通信链路的可靠性。三PC机代码模块PC机代码主要实现程序文件的读取、升级流程控制及与Microblaze的指令交互是升级操作的发起端和控制中心核心函数如下hardwareresetcommand()函数向Microblaze发送复位命令触发FPGA内部寄存器初始化为升级操作做准备erase_command()函数向Microblaze下发Flash擦除命令启动Flash格式化流程readbinto_buffer()函数读取待升级的bin格式程序文件到PC机内存并获取文件长度信息为后续数据传输和长度校验提供依据write_command()函数向Microblaze发送Flash写命令控制程序数据的传输与写入过程lan_loop()函数负责以太网通信的循环处理包括指令发送、响应接收、数据传输等确保PC机与FPGA之间的通信稳定。四、PC机与Microblaze通讯协议详解PC机与Microblaze之间通过约定的串口指令协议进行通信协议涵盖复位、数据长度确认、Flash擦除、数据写入等全流程指令确保升级操作的有序执行具体指令规范如下一通讯流程PC机运行updateflashlan_app.exe程序首先发送复位命令Microblaze接收复位命令后初始化内部寄存器反馈复位完成或错误信号PC机读取待升级文件到内存并获取文件长度发送数据长度命令Microblaze接收数据长度后反馈确认信息若长度异常则反馈错误PC机发送Flash擦除命令Microblaze执行擦除操作并实时反馈进度擦除完成后发送完成信号PC机收到擦除完成信号后发送Flash写命令开始传输程序数据Microblaze接收数据并写入Flash反馈写入进度写入完成后进行数据校验校验完成后Microblaze向PC机反馈校验结果整个升级流程结束。二指令格式说明序号PC机命令PC机命令代码字节Microblaze命令Microblaze命令代码字节备注1复位0x55,0xaa,0xaa,0x55,0x55,0xaa,0xaa,0x55,0x55,0xaa,0xaa,0x55--共12字节用于触发FPGA复位2--复位完成0xaa1字节确认复位成功3--复位错误0x7e1字节提示复位失败4数据长度0x55,0xaa,0xaa,0x55,0x01,0x01,Xx,xx,xx--共9字节后3字节为文件长度数据5--数据长度反馈0xaa,Xx,xx,xx4字节0xaa为确认位后3字节为接收的长度数据6--数据长度错误0x7e1字节提示长度接收异常7擦除0x55,0xaa,0xaa,0x55,0x02,0x02--共6字节触发Flash擦除8--擦除反馈进度0xaa1字节实时反馈擦除进度多次发送9--擦除反馈完成0x551字节确认擦除完成10--擦除反馈错误0x7e1字节提示擦除失败11写数据0x55,0xaa,0xaa,0x55,0x03,0x03--共6字节启动数据写入12写完成0x55,0xaa,0xaa,0x55,0x04,0x04--共6字节告知数据传输完毕13--写反馈进度0xaa1字节实时反馈写入进度多次发送14--校验错误反馈0x7e1字节提示数据写入与原始数据不一致五、关键文件生成与烧写流程一download.bit文件生成download.bit文件是FPGA可直接执行的程序文件由FPGA生成的top.bit文件与Microblaze生成的updateflashlanfpgaapp.elf文件合成生成步骤如下打开Vitis IDE软件在菜单栏中选择“Xilinx”-“Program FPGA”在弹出的配置窗口中项目选择updateflashlanfpgaapp连接方式设为Local自动载入Bitstream文件路径ide/bitstream/top.bit和BMM/MMI文件ide/bitstream/top.mmi在Software Configuration中手动选择Microblaze0处理器对应的ELF文件debug/updateflashlanfpgaapp.elf取消“Skip Revision Check”选项点击“Generate”生成download.bit文件生成后的文件路径为\sdk\updateflashlanfpgaapp\_ide\bitstream。二以太网烧写download.bit文件准备工作将生成的download.bit文件拷贝至updateflashlanapp\x64\Release目录下该目录需包含updateflashlanapp.exe上位机执行程序和updateflashlan_app.pdb调试文件网络配置确保PC机IP地址设置为172.20.20.2板卡IP地址为172.20.20.100且PC机网络速率调整为100M仅支持100M以太网连接测试在PC机命令行中执行“ping 172.20.20.100 -t”确认PC机与板卡网络连通连通后停止ping命令启动烧写进入updateflashlanapp\x64\Release目录执行命令“.\updateflashlanapp.exe”启动烧写流程烧写过程程序会自动执行硬件复位、Flash擦除、数据写入、数据校验等操作过程中会打印各步骤状态如“hardware_reset completed”“Flash erase completed”等完成重启烧写完成后断电重启板卡新程序即可生效。三板卡第一次烧写方法新生产的板卡内部未固化任何程序不支持以太网升级需通过仿真器烧写初始程序步骤如下按照“download.bit文件生成”步骤获取合成后的download.bit文件打开Vitis IDE选择“Xilinx”-“Program Flash”配置项目、连接方式和设备自动检测在Image File中选择download.bit文件Flash Type选择板卡对应的硬件Flash芯片型号如mt25ql128-spi-x1x2x4勾选“Verify after flash”烧写后验证和“Blank check after erase”擦除后空白检查点击“Program”开始烧写烧写过程中板卡不可断电若意外断电需重新通过仿真器烧写。六、Vitis环境搭建及ELF文件生成一环境搭建步骤在FPGA工程目录下新建SDK文件夹将VIVADO生成的top.bitFPGA逻辑文件和top.xsa硬件描述文件拷贝至该文件夹启动Vitis IDE工作空间选择SDK文件夹路径点击“Create Platform Project”创建平台工程导入硬件参数文件top.xsa平台工程创建完成后点击“Create Application Project”创建应用工程选择“Empty Application”空工程将Microblaze相关C代码main.c、platform.c、qspi.h等拷贝至\updateflashlanfpga\sdk\updateflashlanfpga_app\src目录下。二ELF文件生成在Vitis IDE中右键点击应用工程updateflashlanfpgaapp选择“Build Project”工具会自动编译源码并生成ELF文件生成的ELF文件位于debug或release目录下用于后续download.bit文件的合成。七、注意事项与异常处理环境兼容性所有开发工具必须使用指定版本VIVADO 2019.2、Visual Studio 2019、Vitis IDE 2019.2避免版本不兼容导致的编译或烧写失败烧写安全烧写过程中尤其是第一次仿真器烧写板卡严禁断电否则可能导致Flash芯片损坏或程序固化失败若断电需重新通过仿真器烧写代码更新每次修改FPGA代码逻辑后需重新搭建Vitis环境并生成ELF文件C代码无需修改再按照download.bit文件生成步骤重新合成建议FPGA调试稳定后再进行合成操作节省开发时间网络要求仅支持100M以太网PC机需手动将网络速率调整为100M否则会导致网络通信失败异常处理烧写过程中若出现网线脱落、上位机软件关闭等异常需等待1分钟后再重新执行烧写操作避免Flash芯片处于异常状态指令调用readflashid()函数必须调用1次否则axiquadspi IP核无法启动导致Flash读写操作失败。八、参考资料axiquadspi IP核使用手册pg153-axi-quad-spi.pdfQSPI Flash芯片手册S25FL256SAGNFI000.pdfVitis IDE开发指南Xilinx官方Vitis IDE用户手册Vivado FPGA开发手册Xilinx官方Vivado工具使用指南。通过以上模块的协同工作该以太网升级FPGA程序方案实现了高效、安全、可靠的远程升级功能适用于各类需要灵活更新FPGA程序的嵌入式系统场景降低了现场升级的难度和成本提升了产品的可维护性。fpga 以太网升级程序。 升级qspi flash无需增加外部电路无需内存方便实用具备写入校验功能。 确保正确性适用xilinx fpga7系列适合a7和k7 提供fpga上位机源码操作方法。

更多文章