赞
踩
实际项目过程中很多时候产品定型之后是不能通过JTAG进行程序升级的,往往只能选择远程升级在线进行程序更新,Xilinx官方推荐的升级方式有multi boot及quick boot,具体可以参考
xapp10812文档,当然如果项目中选择BPI FLASH,可以直接通过借助MCU控制BPI的高位地址,强行将FLASH进行空间划分,通过切换高位地址,从而达到不同片区的效果,但是这种方式需要借助其他的主控MCU芯片才可以完成远程升级。
xilinx介绍的的quick是不借助外界芯片,直接在线更新程序,原理是将FLASH中的数据划分为golden 和update区域,通过关键字进行跳转
官方例程提供的DEMO只是针对他们特定指定的两款芯片,如果刚好设计硬件是它们 那就直接可以用,当然需要增加上层的数据接口,如果不是指定的芯片,需要将底层读写函数重新实现,我这里选择的是S29GL01GS11DHIV10,所以官方的东西都需要修改,具体可以参考手册说明
最后程序接口
在这里插入代码片 entity BpiFlashProgrammer is port ( -- Clock and control signals inClk : in std_logic; clk_osc_100m : in std_logic; inReset_EnableB : in std_logic; inCheckIdOnly : in std_logic; inVerifyOnly : in std_logic; -- Data inData32 : in std_logic_vector(15 downto 0); outFifoRd_en : out std_logic; inFifoData_count : in std_logic_vector(11 downto 0); -- Status signals outReady_BusyB : out std_logic; outDone : out std_logic; outError : out std_logic; outErrorIdcode : out std_logic; outErrorErase : out std_logic; outErrorProgram : out std_logic; outErrorCrc : out std_logic; outErrorBlockLocked : out std_logic; outErrorVPP : out std_logic; outErrorCmdSequence : out std_logic; outErrorTimeOut : out std_logic; outStarted : out std_logic; outInitializeOK : out std_logic; outCheckIdOK : out std_logic; outEraseSwitchWordOK: out std_logic; outEraseOK : out std_logic; outProgramOK : out std_logic; outVerifyOK : out std_logic; outProgramSwitchWordOK: out std_logic; -- Signals for BPI flash -- Change outAddress32 width to your BPI flash address width outAddress32 : out std_logic_vector(31 downto 0); inoutData16 : inout std_logic_vector(15 downto 0); outFCSB : out std_logic; outFOEB : out std_logic; outFWEB : out std_logic; outFWPB : out std_logic ); end BpiFlashProgrammer; `
``通过串口或者网络将MCU文件下发到FPGA进行读写FLASH完成远程更新
调试过程中,为了验证FLASH读写成功与否,可以通过VIVADO直接回读FLASH里的数据进行验证:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。