首先我们来简单介绍一下 SPI,SPI 是串行外设接口(Serial Peripheral Interface) 简单来讲就是它一种高速的,全双工,同步的通信总线 被各种总线搞的晕头转向的人来说就会问了,为什么要弄那么多种总线?太 难了 一会 I2C,一会 SPI;一会内部总线,一会外部总线 碰到总线这样的字眼,千万别急,通过接触你会发现都有各自的特点 通过实践 了你才会真正理解这些总线的用途,那么我们今天就来聊一聊 SPI 下面我们来看一下 SPI 的框图,我们从框图上来介绍 SPI 通信的原理 ![]() 1. SPI 传输需要有一个时钟,因为他是同步通信,所以连接引脚有串行时钟 SCK 2. SPI 以主从方式工作,通常有一个或者多个从设备连接。所以 MOSI,M 是主机 S 就是从机,从机输入,所以叫 MOSI,I 就是 input 输入的意思,那么 MISO 也 是一样的原理 ![]() 3. NSS 就是片选,是 SPI 从设备是否被选中的,只有片选信号为预先规定的使能 信号时(高电位或低电位) 对此 SPI 从设备的操作才有效。如果从机没有被 选中,主机发送数据从机是不会接收的 4. Rx FIFO,Tx FIFO:发送缓冲和接收缓冲,当高速通信的时候 数据来不及 处理就可以放在缓冲区里面,可以节省一定的时间去处理其他事情 5. CRC controller:CRC 校验,是一种数据检测方式 6. Communication controller:SPI 的主控模块,从框图中我们得到一些重点信 息 就是关于寄存器的配置信息。时钟输出波特率受 BR[2:0],这 3 个位来控制 以上就是单片机整个的 SPI 通信的架构,只有这些配合工作才能实现 SPI 通信 单片机 SPI 一般作为主机工作,那么参数配置就需要从机的一些信息了 那么看到这里大家可能觉得这不算讲了 SPI 啊,我还不懂怎么应用啊,没关系 上面只是简单介绍,知道基本信息了再去实现不就容易多了嘛 首先既然有时钟,那么就存在时钟极性的问题,既然有从机, 可以根据从机 的时钟极性来设置主机的,保持一致就好了,相当于相约好规则 SPI 的时钟极性(哪种电平状态是有效的): ![]() CPOL 为 0 的时候,空闲状态(不传输数据的时候)是低电平 CPOL 为 1 的时候, 空闲状态是高电平;两种时钟极性是相反的 |