SPI采用一主一从或一主多从 
起始信号:NSS片选信号没被选中默认高电平,CS信号由高电平转为低电平,
停止信号:NSS片选信号由低转高
同步时钟:SCK,SPI总线是一个同步全双工通信总线,所以SPI的数据传输需要SCK时钟信号严格同步的,SCK一个时钟周期传输一位数据
SPI有四种工作模式:关于在SCK信号空闲时候高低电平和数据采样在时钟第几个时钟沿
CPOL(时钟极性): CPOL=0,SCK空闲状态为低电平。 CPOL=1,SCK空闲状态为高电平。
CPHA(时钟相位):CPHA=0,SCK一个周期内第一个时钟沿对数据线上的数据进行采样。 CPHA=1,SCK第二个时钟沿对数据线上的数据进行采样
SPI通信模式由主机配置,从机例如NRF2401只规定了一种通信模式,SPI模式1.所以主机也需配置为模式1,否则无法与从机通信
SPI通信流程,主机与从机移位寄存器内容的交换,数据交换,同时进行
SPI硬件
SPI_CR1 SPI控制寄存器1的bit 可以配置主从模式,时钟极性,时钟相位
主机的配置,SPI模式和MSB(高位先发)或者LSB(低位先发),主机要遵从从机数据手册进行配置
只接收模式设置为1,只接收,为0,全双工
双向通信数据模式使能:为0使能单线,为1使能双线
Bidirectional data mode enable(双向数据模式)配置下
Tx buffer empty interrupt enable发送缓冲区中断使能
RXNEIE:(Rx buffer not empty interrupt enable)接收缓冲区非中断使能
TXDMAEN为1,使能发送缓冲区DMA,:当TXE标志置1时,即产生DMA请求,
RXDMAEN为1,当RXNE标志置1,即产生DMA请求
硬件连接图
NRF240l芯片Si24r1芯片特性
最高10Mhz四线SPI接口
芯片ACK模式设置
PRIM_RX=1,接收模式,反之,发送模式
配置发送和接收MCU的寄存器地址
发送MCU芯片寄存器的TX_Addr要和接收MCU芯片寄存器RX_Addr一样
接收到数据后,接收MCU的引脚由空闲状态置低电平,RX FIFO连接的引脚配置为外部中断,就可以在RX FIFO里面读取数据,告诉MCU可以来读取数据了
接收完成,接收MCU要发送ACK应答信号,所以发送芯片的RX_Addr和TX_Addr 还有接收芯片的RX_Addr要设置为相同的
接收方发送ACK信号给发送方,发送方接收到ACK信号后, RX FIFO有数据,MCU相应端口电平由高转低,也是外部中断配置,接收到了会产生中断,没有接收到就不会产生中断,会设置有等待应答时间,等待应答时间完后发送方会重发一次数据,cnt计数加1,到达最大重发次数后就不会发了
NRF半双工通信模式(通信双方可发可收,不可同时发,)
发送和接收MCU常态都设置为RX模式,要发送数据的一方,把状态切换为TX,发送完后再切换为接收模式
NRF24l01的配置
TX模式初始化过程
RX模式初始化