控制/MCU
上篇内容我们介绍了IIC总线通信接口及其协议,这一篇文章我们介绍另一种项目开发中非常常见的通信接口——SPI总线。
SPI(Serial Peripheral Interface,串行外设接口)总线是摩托罗拉公司设计的一种同步串行通信接口。和IIC总线一样,它也分主机和从机,一个主机也可以接多个从机,但从机没有地址之分,它们是通过主机的硬件选择来确定哪个设备与主机通信,每个设备有两个数据端口,即输入、输出端口,通常情况下它包含4根通信引脚,在某些特殊情形下也可以是3线甚至2线,即可以忽略片选信号或某根数据信号,当然具体情况根据威廉希尔官方网站 应用而定!
- SS/CS——片选信号端口
- SCLK——时钟信号端口
- MOSI——主出从入信号端口
- MISO——主入从出信号端口
硬件接线图:
硬件连接图
部分资料或芯片手册中会使用SDO,SDI来定义两数据端口MOSI和MISO,两种说法本质都是一样的
SDO,SDI连线示意
相比于IIC总线,SPI总线协议更为简单,不需要验证地址,也没有校验信号,又因为拥有独立的输入输出端口,所以在信号传递方面它拥有更高的速率。
多机通信威廉希尔官方网站
SPI总线中由于涉及到时钟信号极性(Cpol: Clock Polarity)
和相位(Cpha: Clock Phase)
的影响使得协议分为4种模式。
CPOL:即时钟的极性,通信的整个过程包含空闲状态和工作状态,如果SCLK在空闲状态是高电平,那么CPOL=1,如果是低电平,那么就是CPOL=0。
CPHA:即时钟的相位,在这里就是SCLK的跳变边沿,如果在SCLK信号的第一个跳变沿就开始数据传输则CPHA=0,否则若是在第二个边沿才开始数据传输则CPHA=1。
读起来还是有点拗口,看时序图会更直观一点:
时序图
当然这些不用记忆,你使用的时候根据具体的芯片手册的时序说明进行配置就好了,不要把简单的事情复杂化。心里有个概念就好,假如你是应届毕业生参加面试那保证自己能区分开来这几种模式就可以,很多毕业生连IIC和SPI是什么东西都不知道呢,因为教材里面不一定会介绍这些通信协议,51单片机教材里印象中好像除了串口通信外没有介绍其他的通信方式,即使有类似应用也没使用这些专业名称来说明,其他的很多都得是自己买块板子回来折腾才碰得到的。如果你是在校学生看看教材或者不妨问问你身边的同学试试。
一般情况下作为主机的单片机如果硬件接口具备SPI总线端口编程时直接根据对应寄存器配置为从机可以接受的模式使能该总线功能即可,若是普通不带SPI总线的单片机,那我们也简单,和上一篇中的模拟IIC通信一样,根据需要在程序中模拟出时序就好了。这里再次说明了读芯片数据手册的重要性,有的人或许芯片手册都不看,从网上找一个别人跑得通的代码就copy过去,或许可能刚好能用,也可能搞半天自己的芯片啥数据都读不出来,这是初学者大忌,所以学技术切莫急功近利,每一次的侥幸可能造成日后的大雷。
SPI通信协议的程序使用起来比较灵活,它的应用的场合也比较多,具体的示例程序在后面的实际例子中再做介绍了。结合上一篇IIC的示例程序,今天的SPI协议程序应该脑海里应该也有思路了吧。
全部0条评论
快来发表一下你的评论吧 !