一、SPI
SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线。有四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select)。同步,全双工,支持总线挂载多设备(一主多从)。
二、SPI硬件规定
所有设备SCK、MOSI、MISO分别连接在一起;主机另外引出多条SS控制线,分别接到从机SS引脚;输出引脚配置为推挽输出,输入引脚配置为浮空输入或上拉输入。
主机SCK发送给从机SCK,产生时钟;MOSI主机输出从机输入;MISO主机输入从机输出;主机SS连接从机SS,低电平为选中该从机。
波特率发生器产生时钟信号,发送给主机移位寄存器和从机移位寄存器,时钟信号上升沿,主机移位寄存器和从机移位寄存器左移一位,放到MOSI和MISO,时钟信号下降沿,主机和从机对MOSI、MISO进行采样,将数据放到移位寄存器。
SPI通信实质是进行数据交换。
三、SPI软件规定
1.起始、终止条件
起始条件:SS从高电平切换到低电平。
终止条件:SS从低电平切换到高电平。
2.交换一个字节
模式0(用到最多):CPOL=0:空闲状态时,SCK为低电平。
CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据。
模式1:CPOL=0:空闲状态时,SCL为低电平。
CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据。
模式2:CPOL=1:空闲状态时,SCL为高电平。
CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据。
模式3:CPOL=1:空闲状态时,SCL为高电平。
CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据。
四、SPI时序
1.发送指令
向SS指定的设备,发送指令(0x06)。
2.指定地址写
向SS指定的设备,发送写指令(0x02)。随后在指定地址(Address[23:0])下,写入指定数据 。
在0x123456写入数据0x55。
3.指定地址读
向SS指定的设备,发送读指令(0x03)。随后在指定地址(Address[23:0]),读取从机数据。
在0x123456读取数据0x55。
五、W25Q64简介
1.W25Qxx
W25Qxx系列是一种低成本、小型化、使用简单的非易失性存储器,常应用于数据存储、字库存储、、固件程序存储等场景。
存储介质是Nor Flash(闪存),时钟频率80MHz/160MHz(Dual SPI)/320MHz(Quad SPI)。
存储容量(24位地址:2^24=16MB):
W25Q40:4MBit/512KByte
W25Q80:8MBit/1MByte
W25Q16:16MBit/2MByte
W25Q32:32MBit/4MByte
W25Q64:64MBit/8MByte
W25Q128:128MBit/16MByte
W25Q256:256MBit/32MByte
2.硬件电路
普通模式:DO、DI。
双重SPI模式:DI为IO0,D0为IO1。
四重SPI模式:DI为IO0,D0为IO1,/WP为IO2,/HOLD为IO3。
VCC接接线柱VCC,GND接接线柱GND,其他SPI通信线接接线柱SPI通信。/HOLD和/WP接VCC,C1用来滤波,R1用来分压,D1为电源指示灯上电就亮。
3.W25Q64框架
W25Q64内存空间为了方便管理,分成了块(Block)、扇区(Sector)和页(Page)。块分为8*1024KB/64KB=128个,扇区分为64KB/4KB=16个,页4*1024Byte/256=16个。
SPI Command&Control Logic是整个SPI管理员;Status Register状态寄存器是写保护、写使能和忙的状态;Write Control Logic与/WP设置写保护;Hight Voltage Generators高电压使掉电数据不丢失;Page Address Latch/Counter对页地址进行寻址;Byte Address Latch/Counter对字节地址进行寻址;Column Decode And 256-Byte Page Buffer字节数据页缓存区,使RAM类型,对输入输出数据进行缓存;Data进行数据传输。
4.Flash操作注意事项
写入操作时:写入操作前,必须先进行写使能
每个数据位只能由1写为0,不能由0写为1
写入数据前必须先擦除,擦除后,所有数据位变为1
擦除必须按最小擦除单元进行(以扇区为最小擦除单元)
连续写入多字节时,最多写入一页的数据,超过页尾位置的数据,会回到页首 覆盖写入
写入操作结束后,芯片进入忙状态,不响应新的读写操作
读取操作时:直接调用读取时序,无需使能,无需额外操作,没有页的限制,读取操作结束 后不会进入忙状态,但不能在忙状态时读取
5.W25Qxx手册
①状态寄存器
BUSY:忙标志位。
WEL(Write Enable Latch):写使能或失能锁存。
②指令集
六、软件SPI读写W25Q64
1.实验现象