FPGA BPI FLSAH远程升级Quick boot

实际项目过程中很多时候产品定型之后是不能通过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里的数据进行验证:
![在这里插入图片描述](https://img-blog.csdnimg.cn/b576342570fd47a990f10aa154ac4d0a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-l6Iqv55S15a2Q56eR5oqA,size_20,color_FFFFFF,t_70,g_se,x_16
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值