最后更新:2022-07-18 02:27:10 手机定位技术交流文章
spi是一个由摩托罗拉设计的板间串行通信方法,它使用与IIC相似的场景和比IIC更快的速度。
spi是一个高速、完全双重、同步通信总线,设备连接占有4线,与拖拉和下降相比,最高速度达到40Mbps。

主设备控制,用于选择当前通信的从设备 ,一个 Slave 设备要想能够接收到 Master 发过来的控制信号, 必须在此之前能够被 Master 设备进行访问 (Access),所以, Master 设备必须首先通过 CS对 Slave 设备进行片选, 把想要访问的 Slave 设备选上.
产生由主设备控制的时钟信号
从主设备输入,从设备输出
主要设备输出,从设备输入(MISO和MOSI实现所有双重工作)

spi每一位数据的发送和接收是在时钟信号的边沿完成,根据选择的上升沿/下降沿和时钟信号的高低电平顺序,一共有4种情况。
CPOL表示高低电平顺序,叫做极性;若CPOL = 0,串行同步时钟的空闲状态为低电平;
如果CPOL = 1, 序列同步时钟的闲置状态是高压水平;
CPHA(英语:CPHA)表示第一/第二侧,称为相位。
SPI输出串行同步时钟极度和相位可以根据外部工作要求配置。 SPI 设备间的数据传输又被称为数据交换, 是因为 SPI 协议规定一个 SPI 设备不能在数据通信过程中仅仅只充当一个 "发送者(Transmitter)" 或者 "接收者(Receiver)". 在每个 Clock 周期内, SPI 设备都会发送并接收一个 bit 大小的数据, 相当于该设备有一个 bit 大小的数据被交换了.
有四个不同的情况:
MODE0:CPOL=0,CPHA=0.串行时钟SCLK处于低电平衡状态,而SCLK时钟的数据随采样而上升,随输出而下降;
MODE1:CPOL=0,CPHA=1。 SCLK序列时钟处于闲置状态时,SCLK时钟的数据随采样而减少,随输出而增加;
MODE2:CPOL=1,CPHA=0。 SCLK序列时钟处于闲置状态时,SCLK时钟的数据随采样而减少,随输出而增加;
MODE3:CPOL=1,CPHA=1.当串行时钟SCLK处于闲置状态时,SCLK时钟的数据沿样品采集而上升,沿输出而下降;


SPI使用MOSI和MISO信号传输数据,并使用SCK信号线同步数据。
MOSI和MISO数据线在每个SCK时钟周期中传输一个数据,数据是输入和输出同时。
SPI数据可以每传输8或16位,每传输的单位数目是无限的
原理图:

spi接口的CS连接到了PB14,SCLK,MISO,MOSI分别连接到了PB3 PB4 PB5,这三个IO口具有SPI的复用功能。
(1)使用GPIO接口模拟SPI的时间序列,只要IO接口可用。
(2)使用SPI控制器,只需要配置SPI的通信参数并直接传输,并且接口必须具有SPI重用功能。
添加 spi 的库函数的源代码:

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
GPIO_Init(...); GPIO_AFPinConfig(...);
(3)初始化SPI
(4)使能SPI
SPI_Cmd(...);
(5)使用SPI传输数据
//同时发送和接收空的SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data); uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx);
(6)查询SPI传输状态
CS WP HOLD是低压的,WP和HOLD是连接到VCC的,功能是关闭的,面板选择是低压的。
SPI接口支持0.0和1.1的CPOL和CPHA模式


(2)操作时序
在任何操作之前打开选择,并在操作完成后关闭选择。
1)读设备ID
发送90H ===> 发送24位0地址 ===> 收到厂家ID(0xef)和设备ID(0x17)
*************************************************************************************************************
//用代码实现W25Q128芯片的SPI通信
//功能函数
//头文件声明
本文由 在线网速测试 整理编辑,转载请注明出处。