SPI 协议中, 其中一种应用就是驱动SPI FLASH , 当然, spi 协议也是可以用于其他设备通讯的, 比如video switch, 无线模块, lcd 显示屏等等。 在嵌入式系统中, 因为 spi flash 使用pin 比较少 (通常4pin ),速率又比较高 (很多spi flash 单线能达到133M bit/s),容量(相对于eerpom) 也比较大,所以经常使用spi flash 作为程序存储使用。更多的内容请登录: ica123.com
参考文章:
SPI 通讯协议 及 SPI 相关工程 详解
在参考文章最后列出几种常用的spi flash 手册。以及相关的工程代码(zip)
SPI FLASH 有很多生产厂家, 向 micron, winbond, Macronix,Microchip,ST 等等很多厂家。这些厂家的SPI FLASH 各有不同, 但也有很多相同的地方。基本上都是通过SPI 发送相应的命令,发送数据, 或者是发送相应的命令 ,接收数据。由于各个厂家生产的芯片容量,性能,电压标准的不同,所有会有不同的spi 命令。 总结下来,有一些标准的命令, 各个生产厂家都是共同遵循的。
通用命令
flash command
命令格式: 05, 8clock 。。。 当对芯片有相关的写操作, 擦除,编程等等指令, 都需要使用这个指令来验证是否写入成功。下图为 status 寄存器相关资料
厂家的spi flash 指令 不止以上这些, 还有其他的指令,但那些指令并不是经常使用。 各个厂家的指令代码也不尽相同。有些甚至是不支持的。 但只使用以上这些通用指令,完全可以对各个厂家的flash 进行操作。
1)编程指令 (02h)
2) 4K扇区擦除(20h)
3)块擦除(d8h)
4)全片擦除(c7h)
5)读厂家ID(9fh)
6) 读数据指令(03h)
8)写失效指令(04h)
用户常用的flash操作
作为用户(fpga ,或者软件开发者),通常的操作有 :
1)全片擦除
2)扇区擦除,只有当前扇区被擦除后, 才能进行编程。
3)地址编程(写数据到flash)
4)读数据 (从某个地址开始, 连续读出相应的flash 中的数据)
5)读厂家ID (确定是那个厂家的芯片, 确定芯片容量,性能, 电压等等)
SPI flash 操作流程
全片擦除
注: 除了第4条, 其他每一条都是完整的指令,即: 开始有 片选有效, 结束后设置 片选无效。
扇区擦除
注: 除了第4条, 其他每一条都是完整的指令,即: 开始有 片选有效, 结束后设置 片选无效。
地址编程(写数据到flash)
注: 除了第4条, 其他每一条都是完整的指令,即: 开始有 片选有效, 结束后设置 片选无效。
读数据 (从某个地址开始, 连续读出相应的flash 中的数据)
读厂家ID (确定是那个厂家的芯片, 确定芯片容量,性能, 电压等等)
1)发送 : 9f + 8clock + 8clock + 8clock + 8clock 。。。; 读取当前所使用的芯片的厂家ID ,读取 3 bytes — nbyes。 一般不会小于 3 bytes。