1.SPI通信
是一种通用数据总线
相比I2C,传输更快,最大科大80MHZ,设计简单粗暴,通信线个数多,容易资源浪费
四根通信线:SCK(串口时钟),MOSI(主出从入),MISO(主入从出),SS(从机选择)
同步,全双工
支撑总线挂在多设备(一主多从)
SPI没有应答机制的设计
2.硬件电路
所有SPI设备的SCK,MOSI,MISO分别接在一起
主机两外引出多条SS控制线,分别接到各从机的SS引脚
输出引脚配置位推挽输出,输入引脚配置为浮空或上拉输入
从机的引脚为高电平,也就是未选中时,MISO必须切换为高阻态
3.移位示意图
移位寄存器向左移,主机左边移出的数据到从机移位寄存器的右边
波特率发生器产生上升沿时,左移到通信线上,即MOSI和MISO上
产生下降沿时,移位寄存器接收到数据
4.SPI时序基本单元
模式1
CPOL=0:空闲模式时,SCK为低电平
CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据
通信过程中,SS始终保持低电平,结束恢复高电平
SS下降沿后,从机的MISO必须置回高阻态
SCK上升沿时,主机和从机同时移出数据
5.W25Q64简介
W25Qxx系列是一种低成本,小型化,使用简单的非易失性存储器(易失性存储器指SRAM,DRAM,非易失性存储器指E2PROM,FLASH),常应用于数据存储,字库存储,固件程序存储等场景
存储介质:闪存
时钟频率:80MHZ(标准)/160MHZ/320MHZ
存储容量(24位地址):64的是64Mbit/8MByte
6.Flash操作注意事项
写入操作时:
写入操作前,必须先进行写使能
每个数据位只能由1改写为0,不能由0改写为1
写入数据前必须先擦除,擦除后,所有数据位变为1
擦除必须按最小擦除单元进行
连续写入多字节是,最多写入一页数据,超过页尾位置的数据,会回到页首覆盖写入
写入操作结束后,芯片进入忙状态,不响应新的读写操作
读取操作时:
直接调用读取时序,无需使能,无需额外操作,没有页的限制,读取操作结束后不会进入忙状态,但不能在忙状态时读取
7.数据手册重要事项
(1)状态寄存器1,有2个位:
BUSY:正在干活时,忽略进一步的指令
WRITE ENABLE LATCH(WEL):写使能锁存位,一个写使能,只能保证后续一条写指令可以执行
(2)指令集
芯片ID号需要关注
Write Enable 写使能 06h
Read Status Register1 读状态寄存器1 05h
Page Program 页编程(写数据) 02h
Sector Erase(4KB)扇区擦除 20h
JEDEC ID 擦除指令号 9Fh
Read Data 读数据 03h
8.STI外设简介
STM32内部集成了硬件SPI收发电路,可以由硬件自动执行数据收发功能,减轻了CPU的负担
可配置8位/16位的数据帧,高位先行/地位先行
时钟频率:f plck/(2,4,...,256)
支持多主机模型,主或从操作
可精简为半双工/单工通信
支持DMA
兼容I2S协议
9.框图 简化版
TDR和RDR的配合,可以实现连续的数据流
TDR数据整体转入移位寄存器的时刻,置TXE标志位,移位寄存器数据,整体转入RDR的时刻,置RXNE标志位
10.
第一步:开启时钟
第二步:初始化GPIO口,上拉输入
第三步:配置SPI外设
第四步:配置开关控制