一设计功能 对SPI_flash进行扇区擦除,分为写指令和扇区擦除两个时序部分. 二设计知识点 我简单理解flash,第一它是掉电不丢失数据的存储器,第二它每次写入新数据前首先得擦除数据,分为扇区擦除和全擦擦. 下面讲讲我自己亲自动手设计的原创代码过程: 自己设计过程: 第一步:就先看了SPI FLASH文档,了解SPI FLAHS的原理:先有写使能信号及其时序波形,然后是扇区擦除指令和地址及时序波形,再是延时3秒回到初始状态. 第二步:自己画出所有的状态及其转移图,还是就是用线性序列机表达写使…
背景: MCU:STM32F207 SPI flash: Winbond W25Q16BV OS: RTT V1.1.1 bsp: STM32F20x 1 将spi_core.c,spi_dev.c及spi.h三个文件加入工程 spi_core.c,spi_dev.c这两个文件位于RTT\components\drivers\spi目录下,而spi.h头文件位于RTT\\components\drivers\include\drivers目录下. 可在MKD工程的Drivers组下将上面两个源文…
W25Q16V 是华邦出的一颗 spi flash. 25系列是比较通用的一个系列. 后面的数字 16 跟容量有关, 16 表示 16Mbits, 相当于 2MB. 与此类似的还有 W25Q128V 等, 128 就表示容量 16MB. 对于 W25Q16V: page 为最大的编程单位. 1 page = 256 bytes sector 为最小的擦除单位, 1sector = 16 pages = 4096 bytes (4KB) 块擦除有两种大小: 32K block = 8 secotr…
1.SPI FLASH的基本特征 本文实现用FPGA来设计SPI FLASH,FLASH型号为W25Q128BV.支持3种通信方式,SPI.Dual SPI和Quad SPI.FLASH的存储单元无法写入bit 1,只能写入bit 0,所以写入数据之前要将原来的数据擦除(FFh),遇到写入bit 1的情况不作处理.W25Q128BV的特征为如下图所示: 2.SPI FLASH的基本结构 W25Q128BV由Block0~Block255共256个Block组成,容量大小为256*64KB=256…
W25Q80BV是台湾华邦电子(Winbond)生产的8M-bit串行flash芯片.主要特性有: 工作电压:2.5 ~ 3.6 V 功耗:读写(active)时4mA,低功耗(power-down)时<1μA 容量:8M-bit/1M-byte,包含4096个页(每页大小256字节) 接口:Standard/Dual/Quad SPI,支持时钟频率最高104MHz 支持以4/32/64k-bytes为单位进行Sector/Block擦除 一次写入最多256字节 软件/硬件写保护功能 大于10万…
参考博文: 博文很长,但是实际要操作的步骤没几下. http://m.elecfans.com/article/730878.html  为了防止几年后文章链接找不到,我把文章复制过来了 /**********************************************转载注明出处 http://m.elecfans.com/article/730878.html  Start******************************************************…
引言 经过前面的分析和介绍,我们对ORPSoC的启动过程(http://blog.csdn.net/rill_zhen/article/details/8855743)和 ORpSoC的debug子系统(http://blog.csdn.net/rill_zhen/article/details/9045837)有了初步的了解, 但是对于启动和debug前的工作还没有仔细分析过.比如FPGA是怎么config的,orpmon是怎么load的,是如何事先烧到外部的flash里的,等等. 本小节就试…
大体上可分为以下几个部分: 1.注册设备驱动 spi_register_driver 2.分配 mtd_info 结构体 3.配置 mtd_info 结构体 4.注册 mtd_info 结构体 构建 spi_driver 并注册 static struct spi_driver spi_flash_drv = { .driver = { .name = "spi_flash", .owner = THIS_MODULE, }, .probe = spi_flash_probe, .re…
读取厂家\设备 ID 发送 90H 指令,再发送 00h 的地址,然后接收即可. 代码如下: void SPIFlashReadID(int *pMID, int *pDID) { SPIFlash_Set_CS(0); /* 选中SPI FLASH */ SPISendByte(0x90); SPIFlashSendAddr(0); *pMID = SPIRecvByte(); *pDID = SPIRecvByte(); SPIFlash_Set_CS(1); } 两个状态寄存器 通过状态寄…
如果从头开始做SPI Flash固化是有一些麻烦的,要在完成综合之后,打开 synthesized Design (图) (图) 然后在synthesized Design打开状态下,选择Tools->Edit Device Properties编辑器件属性 (图) 我们这个FPGA有16MFlash,是Master SPIx1,大家有兴趣可以看一下Xilinx官网配置,你在此处修改都会保存在已经激活的xdc文件 (图) (图) (图) Finish就可以了,把synthesis去掉 (图) 我…