通信协议二 SPI通信
根据需求不同,SPI一般分为四线SPI和6线SPI,还有8线SPI,我们一般用四线SPI;SPI一般用于高速数据通信,一般用于flash读写,lcd屏刷新等数据量庞大的场景。
三线SPI
我们先从最简单的三线SPI开始,此时对于从设备,我们需要硬件接地以选中。
三线SPI包括:
- SCLK:信号时钟线;
- MOSI:主设备输出,从设备接收信号线,用于主设备向从机发送指令或数据;
- MISO:主设备输入,从设备输出信号线,用于主设备接收从机发送的是数据;
- 另外,在三线SPI中,从设备CS线已经被硬件接地,此时SPI只能挂载一个从设备或通过菊花链以移位寄存器的形式连接。
SPI的通信过程:
主机先通过MOSI向从机发送(可省略)命令或地址–>然后通过通过MOSI向从机写入数据或通过MISO从从机接收数据;
另外为了满足读写的时序要求,可以在主机发送指令后等待指定时序进行从机数据接收。
我们以esp32的spi配置为例:
我们需要配置三个SPI相关结构体,分别是spi_bus_config_t,spi_device_interface_config_t, spi_transaction_t;
//通过spi_bus_config_t对SPI引脚进行配置,并规定最大传输字节数;
typedef struct {
union {
int mosi_io_num; //配置MOSI引脚
int data0_io_num;
};
union {
int miso_io_num; //配置MISO引脚
int data1_io_num;
};
int sclk_io_num; //时钟引脚配置
union {
int quadwp_io_num; //quadWP引脚怕配置,下面类似,不在概述
int data2_io_num;
};
union {
int quadhd_io_num