接口/总线/驱动
继续更新常用的串口通信协议。本次要介绍的是SPI协议。 (学习这么大的事情,必须要有BGM!) (结合BGM学习效率更加)
3.SPI:
SPI(serial peripheral interface)也是一种同步串行通信协议。这里为啥要说“也”呢,回想上一篇介绍的PS/2不也是同步串行通信协议吗。SPI由一个主设备和 一个或多个从设备组成,主设备启动与从设备的同步通信,从而完成数据的交换。标准的SPI仅仅使用4个引脚,常用于主设备和外设(flash、实时时钟、dsp等器件)的通信。
下面说说这四个引脚分别用来干啥。
1)SSEL:从设备片选使能信号。如果从设备是低电平使能,那么拉低这个引脚,从设备将会被选中,主机和这个被选中的从机进行通信。
2)SCK:时钟信号,由主机产生。
3)MOSI:主机给从机发送指令或者数据的通道。
4)MISO:主机读取从机的状态或者数据的通道。
另外还需要特别介绍两个名词:
1)CPOL:clock polarity,时钟极性。通信整个过程分为空闲时刻和通信时刻,SCK在数据发送前后的空闲状态是高电平,那么CPOL为1,否则为0。
2)CPHA:clock phase,时钟相位。
对CPOL和CPHA进行排列组合的话,会发现SPI会有四种工作模式。
下面介绍这四种模式:
模式0:CPOL = 0, CPHA = 0.
模式1:CPOL = 0, CPHA =1.
模式2: CPOL = 1, CPHA = 0.
模式3: CPOL = 1, CPHA=1.
总结:CPHA=1表示数据输出在第一个时钟周期的第一个沿,数据采样在第二个沿;
CPHA=0表示数据采样在第一个沿,数据输出在第二个沿.
CPOL=1表示第一个沿为下降沿;
CPOL=0表示第一个沿为上升沿.
根据从设备的技术手册可以确定SPI.
下面给出一个SPI控制器模块的实例代码:
(工作在模式0,100MHz分频产生1MHz的SCK时钟)
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !