FPGA远程升级 -- FLASH控制

简介

前文讲到如何实现XILINX芯片程序跳转,但升级程序是事先通过VIVADO工具将两个程序合成一个BIN文件实现升级的,并不能在线更新升级。要实现远程升级的能力需要对FPGA的FLASH进行在线写入升级程序。

FLASH介绍

本次设计FLASH选用的是S25FL128芯片,FPGA实现远程升级需要对FLASH进行擦除和写入等操作,下面将对FLASH的读操作、写操作、擦除等操作做简单描述。

FLASH读ID

基本所有芯片都有ID寄存器,可以访问ID寄存器可以认为该芯片正常工作并且能正常访问内部寄存器。

查阅"Device ID address map"可得ID内容如下:

即此芯片的ID是32位的,前3个Byte分别是0x01,0x60,0x18。

FLASH 擦除

FLASH写操作之前需要对FLASH进行擦除操作,这里我们使用的是块擦除,指令如下:

擦除块的大小需要根据自己烧录的程序大小而定,例如烧录程序大小为5Mbit,擦除一块FLASH的大小为64KB,那么至少需要擦除64块BLOCK内存供FLASH写入新的程序。

FLASH写入

擦除完毕后可以对FLASH做写入操作,写入前需要添加写命令使能,命令如下:

写入命令如下:

FLASH读命令

读命令如下:

不管是擦除命令、读写命令、SPI模式都有多种,以上介绍的都是本次设计使用到的命令,其他命令这里不做阐述。

FLASH的擦除和写入并不是瞬间完成的,每一次擦除和写入都是又时间的,原文描述如下:

擦除或者写入一次完成后对下一次写入或者擦除时间是有描述的,设计中我们可以查FLASH的状态寄存器确定FLASH是否可以做下一次写入或者擦除操作,命令如下:

综上所述,在进行当前擦除或者写入操作前需要确保驱动处于Ready状态,不然擦除或者写入命令会出错。

对于FLASH的驱动代码,都有独立的模块和控制模块,需要源码的可联系我,如下图所示:

FPGA原语

默认情况下FPGA是无法对存放工程的FLASH进行操作的,需要调用FPGA的一个原语令FPGA可以控制FLASH操作,原语代码如下:

复制代码
   STARTUPE2 #(
      .PROG_USR("FALSE"),  // Activate program event security feature. Requires encrypted bitstreams.
      .SIM_CCLK_FREQ(10)  // Set the Configuration Clock Frequency(ns) for simulation.
   )
   STARTUPE2_inst (
      .CFGCLK(),       // 1-bit output: Configuration main clock output
      .CFGMCLK(),     // 1-bit output: Configuration internal oscillator clock output
      .EOS(EOS),             // 1-bit output: Active high output signal indicating the End Of Startup.
      .PREQ(),           // 1-bit output: PROGRAM request to fabric output
      .CLK(0),             // 1-bit input: User start-up clock input
      .GSR(0),             // 1-bit input: Global Set/Reset input (GSR cannot be used for the port name)
      .GTS(0),             // 1-bit input: Global 3-state input (GTS cannot be used for the port name)
      .KEYCLEARB(1), // 1-bit input: Clear AES Decrypter Key input from Battery-Backed RAM (BBRAM)
      .PACK(1),           // 1-bit input: PROGRAM acknowledge input
      .USRCCLKO(spi_sclk),   // 1-bit input: User CCLK input
                             // For Zynq-7000 devices, this input must be tied to GND
      .USRCCLKTS(0), // 1-bit input: User CCLK 3-state enable input
                             // For Zynq-7000 devices, this input must be tied to VCC
      .USRDONEO(1),   // 1-bit input: User DONE pin output control
      .USRDONETS(0)  // 1-bit input: User DONE 3-state enable output
   );

再将FLASH的引脚做约束即可,这里需要注意FLASH的时钟引脚无需做约束。

以上就是FLASH部分的远程升级内容,结合前面章节描述的multiboot,可以实现远程升级功。如需源码和帮助可联系我。

相关推荐
西安景驰电子6 小时前
PCIe 授时卡原理及应用
运维·服务器·windows·单片机·嵌入式硬件·fpga开发
落chen7 小时前
基于Vivado的FIFO-IP核-强化篇
fpga开发
公众号:fuwuqiBMC11 小时前
(转自“服务器BMC”)服务器BMC芯片——AST1840
运维·服务器·fpga开发
国科安芯11 小时前
还是4位?ASC8T245S 与 ASC4T245S 的双向电平转换选型实战
单片机·嵌入式硬件·物联网·fpga开发·机器人·云计算
Rambo.xia1 天前
接口协议避坑 · 第5篇:多器件级联时序踩坑实录
fpga开发
紫霄芯语2 天前
观察者模式在FPGA中断系统的实战重构
观察者模式·fpga开发·重构
ARM+FPGA+AI工业主板定制专家2 天前
国产化RK3576+FPGA架构|晶圆传输机器人高速定位+AI瑕疵检测一体化方案
fpga开发·架构·机器人·嵌入式·fpga·工控·机器人运控
Eloudy3 天前
FPGA (QSFP28 + CMAC US+ RoCEv2) 与 Ubuntu22 + Mellanox 网卡直连分析
fpga开发
szxinmai主板定制专家3 天前
RK3568+FPGA高速并行采集|半导体探针测试设备多通道同步数据采集系统设计
人工智能·嵌入式硬件·计算机视觉·fpga开发
ARM|X86+FPGA工业主板厂家4 天前
RK3588+FPGA+EtherCAT异构架构解析|工业场景如何同时保住AI算力与微秒级运动实时性
人工智能·fpga开发·架构