基于FPGA的Flash多启动功能

基于FPGA的Flash多启动功能

介绍

一般这种功能主要用于程序在线更新,无需使用下载器。或者为安全考虑,满足某种条件执行其他程序。

flash读写

主要基于w25q128fv,本文档不会详细介绍各个芯片内容,只提供大概思路及逻辑,需要详细了解请自行查阅相关文。

  1. w25q128fv读写等功能。
    flash使用spi接口,在里面分为4种模式,spi×1.spi×2,spi×4及Quad spi。
    区别为:spi模式下命令是串行,数据可以根据模式不同分为1.2.4口并行输出
    Quad spi模式下,命令及数据都可以并行输出。
    唯一麻烦可能只在模式切换需要配置相关寄存器,先以单口串行发送如下命令:
    第一步:50h(打开易失性状态寄存器使能)
    第二步:31h(写配置寄存器2)
    第三部:02h(修改寄存器中第二位QE为’1’)
    第四步:38h(切换至Quad spi模式)
    至此就已经进入Quad spi模式.只需要发送读写等命令即可,在读写命令发送后查看寄存器1,查看busy位,当busy为0时,即可其他操作,相关时序及数据格式自行查阅文档;当flash写入完成后,自启动前必须退出Quad spi模式,才能进行多启动,命令如下:
    第一步:66h(复位使能)
    第二步:99h(设备复位)
    其中读写一次好像不能超过256(可以少但不能多),擦除只能4k,32k,64k及全部擦除并不能针对某一字节,所以在使用时,还是多注意下,反正多看文档多调试,一遍不行就两遍。
    安全起见,写命令执行完之后最好再读出来计算crc,以保证数据的正确性。

多启动

多启动只需要发送相关序列即可,相关序列如下:
在这里插入图片描述
Multiboot Start Address是需要启动的地址,Fallback Start Address是当启动程序有误时,执行一段安全的程序所在地址,所以Fallback所在程序一般是安全且固定不变的;按顺序输入命令后,程序就会重启。其中Opcode是spi模式,有spi×1.spi×2,spi×4可以选择,分别为 0x0B, 0x3B, and 0x6B 。
唯一需要注意的是序列在发送时字节需要交换,低字节与高字节交换,文档中有详细说明。
需要知道fpga是如何进行程序加载,可生成mcs文件,查看其中具体内容,0x000044之前就是进行程序启动部分,其中包含多启动地址及返回地址。
如果需要上电就执行下载后的程序,在生成bit文件时,修改这两地址就行,但这样要么你程序永远放置在一个位置,要么你每次下载新程序都需要更改相关位置,如果需要可以看看mcs文件内容,大概就知道需要改什么了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值