前言:
STM32中的通信接口:
UART 单总线 IIC SPI CAN
1. SPI FLASH W25Q64的关系
SPI:一种通信接口,可以用于和搭载SPI接口的设备通信
FLASH:是一种掉电不丢失的存储 -- 手机8+256G的256 单片机 64K+512K的512
芯片内部flash:64K+512K的512K -- 存放个代码的地方
芯片外部flash:独立于芯片外部
W25Q64:是flash的一种
如果我们想把数据存储起来可以有以下几个方案:
- 5.4.1 备份数据寄存器 -- 并不是每个单片机都有
- IIC+EEPROM(AT24C02)
- SPI+FLASH(W25Q64)
- 存储在芯片内部的flash中 -- 512K
1.1 SPI 简介
SPI作为一种通信接口其数字接口为:
发送:发送方控制数据线的高低电平
接收:接收方读取对方控制数据线的高低电平
一主多从
CS | 片选 -- 选择和谁通信 |
SCK | 时钟线 |
MOSI | 主机输出 -- 从机输入 |
MISO | 主机输入 -- 从机接收 |
MOSI :主机控制这根线的高低电平 从机读取这跟线的高低电平 如果STM32作为主机 MOSI要配置成输出模式 |
MISO :从机控制这根线的高低电平,主机读取这根线的高低电平 如果STM32作为主机 MISO要配置成输入模式 |
SCK : 一般是主机控制时钟线 如果STM32作为主机 SCK要配置成输出模式 |
CS : 由主机控制 如果STM32作为主机 SCK要配置成输出模式 |
1.2 SPI 物理层
1.3 数据链路层
时钟极性CPOL | 空闲时候,时钟线的点平为0(低电平)空闲点平为1(高电平) |
时钟相位CPHA | CPHA=0,在串口同步时钟的第一个(奇数)跳变沿(上升或下降)数据被采集 CPHA=1,在串行同步时钟的第二个(偶数)跳变沿(上升或下降)数据被采集 |
所谓的采集:就是读取对方控制线的高低点平
主机读取MISO的高低点平
从机读取MOSI的高低点平
其中的四种模式:
CPOL | CPHA | ||
SPI0 | 0 | 0 | CLK空闲为低,上升沿采样;下降沿就发送 |
SPI1 | 0 | 1 | CLK空闲为低,下降沿采样;上升沿就发送 |
SPI2 | 1 | 0 | CLK空闲为高,下降沿采样;上升沿就发送 |
SPI3 | 1 | 1 | CLK空闲为高,上升沿采样;下降沿就发送 |
1.4 SPI 引脚功能选择
2 W25Q64
W25Q64 容量大小: 64M BIT == 8M字节
0x0--0x7FFFFF(111 1111 1111 1111 1111 1111)
000 0000 0000 0000 0000 0000
块 扇区 页 字节
0x700000
111 0000 0000 0000 0000 0000
第112块(编号从0开始) 0 扇区 0页 0字节
5.1 指令操作
使用的五大原则:
- FLASH使用的时候,必须先擦除,再写。擦除之后,里面放的数据全部都是0xff,flash只能由1变0,不能由0变1。
- 不能跨页写,超过1页会从该页的起始位置覆盖
- 写之前必须要写使能
- 最小擦除指令就是扇区擦除
- 指令执行完,检测状态寄存器是否操作完成