一、定义
SPI 是一个同步的数据总线,也就是说它是用单独的数据线和一个单独的时钟信号来保证发送端和接收端的完美同步。
边沿触发
总线接口 ( 引脚 ) SCK 、 MOSI 、 MISO 、 CS
CS信号线进行从机的选择
遵循一主多从或者一主一从的结构
数据帧长度 8bit 或 1 6bit
数据传输的格式 MSB 或 LSB
MSB表示先发送最高位;LSB表示发送最低位
工作过程
通信总是由主机发起;主机通过MOSI引脚给从机发数据;从机同时通过MISO引脚给主机发送数据;由同一个时钟进行的同步全双工(也可以半双工和单工)
二、通信协议
SPI控制器挂在APB2总线上的
通信过程
主机先将NSS信号拉低,这样保证开始接收数据;
当接收端检测到时钟的边沿信号时,它将立即读取数据线上的信号,这样就得到了一位数据(1 bit);
由于时钟是随数据一起发送的,因此指定数据的传输速度并不重要,尽管设备将具有可以运行的最高速度。
主机发送到从机:主机产生相应的时钟信号,然后数据一位一位地从MOSI信号线上进行发送到从机;
主机接收从机数据:如果从机需要将数据发送回主机,则主机将继续生成预定数量的时钟信号,并且从机会将数据通过MISO信号线发送;
时钟极性
除了配置串行时钟速率(频率)外,SPI主设备还需要配置时钟极性。
时钟极性通常写为CKP或CPOL。
时钟极性和相位共同决定读取数据的方式,比如信号上升沿读取数据还是信号下降沿读取数据;
CKP = 0:时钟空闲 IDLE 为低电平 0;(上升沿触发)
CKP = 1:时钟空闲 IDLE 为高电平 1;(下降沿触发)
时钟相位
除配置串行时钟速率和极性外,SPI主设备还应配置时钟相位(或边沿)。
时钟相位通常写为CKE或CPHA;
时钟相位/边沿,也就是采集数据时是在时钟信号的具体相位或者边沿:
CKE = 0:在时钟信号SCK的第一个跳变沿采样;
CKE = 1:在时钟信号SCK的第二个跳变沿采样;
三、硬件实现
在单片机上选PA4到7
引脚配置
STM32 手册规定 SPI 最大速率是18 MHz