![](https://csdnimg.cn/release/download_crawler_static/87270839/bg4.jpg)
SPI 设备不能在数据通信过程中仅仅只充当一个 “发送者(Transmitter)” 或
者 “接收者(Receiver)”。SPI 是全双工通信,所以发送和接收是同时进行的。
在每个 Clock 周期内,SPI 设备都会发送并接收一个 bit 大小的数据(不管主设
备还是从设备),相当于该设备有一个 bit 大小的数据被交换了。一个 Slave 设
备要想能够接收到 Master 发过来的控制信号,必须在此之前能够被 Master 设
备进行访问 (Access)。所以,Master 设备必须首先通过 SS/CS pin 对 Slave 设
备进行片选, 把想要访问的 Slave 设备选上。 在数据传输的过程中,每次接收
到的数据必须在下一次数据传输之前被采样。如果之前接收到的数据没有被读取,
那么这些已经接收完成的数据将有可能会被丢弃,导致 SPI 物理模块最终失效。
因此,在程序中一般都会在 SPI 传输完数据后,去读取 SPI 设备里的数据, 即
使这些数据(Dummy Data)在我们的程序里是无用的(虽然发送后紧接着的读取是
无意义的,但仍然需要从寄存器中读出来)。
所以一般在 SPI 通信中,写数据的时候从机一般会返回一个无效数据。读数
据的时候,主机也需要向从机发送一个无效数据。
(注:没有纯粹的接收数据,比如主机接收数据,但是时钟是主机来产生的,
必须发送数据才会产生时钟,所以就算只是接收数据也必须要主机发送一些数据,
产生时钟)
https://img-blog.csdn.net/20160717223609623?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5u
ZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
3.5 时钟频率
从理论上讲,只有实际可行,时钟速率就可以是你想要的任何速率,当然这
个速率受限于每个系统能提供的系统时钟频率,以及最大的 SPI 传输速率
3.5.1 时钟极性 CKP/Clock Polarity(CPOL)
除了配置串行时钟速率之外,SPI 主设备还需要配置时钟极性和时钟相位
(Clock Phase)