1.SPI ( Serial Peripheral Interface )是由 Motorola 公司开发的一种通用数据总线2.四根通信线: SCK ( Serial Clock )、 MOSI ( Master Output Slave Input )、MISO ( Master Input Slave Output )、 SS ( Slave Select )3.同步,全双工4.支持总线挂载多设备(一主多从)
![](https://i-blog.csdnimg.cn/blog_migrate/b304871411544fee900c2ab17153bdb1.png)
SCK(Serial Clock):时钟线
MOSI(Master Output Slave Input):主机接主机输出,从机接从机输入
MISO(Master Input Slave Output):主机接主机输入,从机接从机输出
SS(Slave Select):从机选择线(有X个从机就用X根SS)
SPI没有应答机制。
从机W25Q64上的DI是MOSI,DO是MISO。
硬件电路
SSx:低电平为选择从机
从机的规定(SS为高电平时,从机的MISO一定切换为高阻态(不出任何电平)SS为低电平时,从机的MISO才允许为推挽输出(防止主机的MISO有多个电平冲突))
所有输出:为推挽输出(高低电平都有强大的驱动能力)
移位示意图
来一个时钟信号,移位寄存器向左移动一位(SPI主机移位寄存器左边的数据通过MOSI移到SPI移位寄存器的右边,SPI从机的移位寄存器左边的数据通过MISO移到略(图))
实现字节交换
SPI时序
基本时序单元
相比于模式1(在SCK上升沿之前就要移出一下数据)(应用最多,本次应用)
(SCK产生上升沿)(相关寄存器移出数据)(MOSI和MISO表示主机和从机移出的数据)(然后SCK产生下降沿)(相关寄存器移入数据 ,读MOSI和MISO)
相比于模式0(在SCK取反)
相比于模式1(在SCK取反)
完整时序
不同的硬件外设,波形不同
指令码,指令集不同
Address是先写入的24为的高位(23~16)
W25Q64简介
可以存汉字,在OLED显示屏上显示。
硬件电路
HOLD和WP是低电平有效(都接VSS表示不要用)
电源指示灯 滤波
W25Q64框图
1,上面是内存空间【块(Block)--> 扇区(Sector)--> 页(page) -->】
2,控制逻辑 , 状态寄存器 , 高电压发生器(使存储器发生刻苦铭心的变化,使得掉电不丢失),2个地址锁存计数器(指定地址,可自主加一),256字节页缓存区 RAM->Flash
Flash操作注意事项
写入操作时:
写入操作前,必须先进行写使能。每个数据位只能由 1 改写为 0 ,不能由 0 改写为 1。写入数据前必须先擦除,擦除后,所有数据位变为 1。擦除必须按最小擦除单元进行。(最小擦除单元是 扇区 擦除)连续写入多字节时,最多写入一页的数据,超过页尾位置的数据,会回到页首覆盖写入。写入操作结束后,芯片进入忙状态,不响应新的读写操作。读取操作时:
直接调用读取时序,无需使能,无需额外操作,没有页的限制,读取操作结束后不会进入忙状态,但不能在忙状态时读取。
看W25Q64BV的数据手册
18页有指令集。54页有执行编程的时间。
其他略
软件SPI代码例子
略
硬件SPI通信外设
主线加分支的学习方法:先学习最常用,最简单的主线知识学完,然后在实践中学习分支
STM32 内部集成了硬件 SPI 收发电路,可以由硬件自动执行时钟生成、数据收发等功能,减轻 CPU 的负担可配置 8 位 /16 位数据帧、高位先行 / 低位先行时钟频率: PCLK() / (2, 4, 8, 16, 32, 64, 128, 256)支持多主机模型、主或从操作可精简为半双工 / 单工通信支持 DMA( 帮助搬运大量数据 )兼容 I2S 协议( 用于数字音频信号传输 )(手册23.5有)STM32F103C8T6 硬件 SPI 资源: SPI1 、 SPI2
框图
有数据发送时会进入发送缓冲区(TDR)移位寄存器没数据时 发送缓冲区(TDR)立刻进入移位寄存器,转入时刻会置状态寄存器(TXE)为1 表示发送寄存器空。检查到状态寄存器(TXE)为1时,紧跟着下一个数据就可以到TDR中。实现一个数据发完,下一个跟上不间断连续发送。
移位寄存器把要移出的移出后,会存移入的数据,将这些数据转入接收缓冲区(RDR),这个时刻会置状态寄存器(RXNE)为1,表示接受寄存器非空,然后移出寄存器来。
BR[2:0] 控制分频
LSBFIRST寄存器: MSB是高位的意思 LSB是低位的意思
SPE: 是SPI使能
MSTR:配置主从模式
还有很多寄存器:看手册对应
TXE:移位寄存器到RDR的箭头
RXNE:TDR到移位寄存器的箭头
主模式全双工连续传输
非连续传输
缺点:MOSI输出移动数据时没有将下一个数据与写入TDR等候,会使输出一个字节后(第二个数据还没有送来)要等待一段时间。(SCK频率低时影响不大,频率高了化影响很大)
要实现最高效率用主模式全双工连续传输加上DMA自动转运