导言
SPI是串行扩展总线。
串行总线技术可以使系统的硬件设计大大简化、系统的体积减小、可靠性提高。同时系统的更改和扩充极为容易。
常用的串行扩展总线有:I2C(Inter IC Bus)总线、单总线(1-WIRE BUS)、SPI(Serial Peripheral Interface)总线及Microwire/PLUS等。
一、SPI协议
SPI总线是微控制器四线的外部总线。SPI没有明文标准,是一种事实总线,对通信操作的实现由芯片厂商和驱动开发者通过data sheet和application notes沟通实现的细节。SPI是四根信号线协议,如下:
SCLK:Serial Clock(Output from master);
MOSI:Master Output Slave Input(Outpt from Master);
MISO:Master Input Slave Output(Output from Slave);
SS:Slave Select(Active low,Output from Master);
二、 SPI协议通信
SPI是单主设备通信,总线中只有一个设备发起通信,能发起通信的设备称为主设备。当SPI主设备想读/写从设备时,首先拉低对应从设备的SS线(SS是低电平有效);然后发送工作脉冲到时钟线上,在相应的脉冲时间上,主设备把信号发到MOSI实现写,同时可以对MISO线采样实现读。
三、SPI操作模式
SPI有四种操作模式:模式0、模式1、模式2、模式3。
这几个模式之间的区别是定义了在时钟脉冲的哪条边沿转换(toggles)输出信号,哪条边沿采样输入信号,还有时钟脉冲的稳定电平值(即时钟信号无效时是高还是低)。每种模式由两个参数描述,称为时钟极CPOL(clock polarity)与时钟期CPHA(clock phase)。
Mode = Bit[CPOL]Bit[CPHA]
CPOL=0表示 SCK在空闲状态时为0; CPOL=1表示 SCK在空闲状态时为1; CPHA=0表示 在SCK第一个边沿时输入输出数据有效; CPHA=1表示 在SCK第二个边沿时输入输出数据有效;
一般从器件的工作模式是固定的,主机要跟从机采用一样的工作模式,双方才能正常通信。如果有多个从设备,且从设备使用了不同的工作参数,那么主设备与不用的从设备通信时必须重新配置这些参数。
3.1 Mode0
Mode0时,CPOL=0,CPHA=0,SCK空闲状态为低电平,主机数据在每个上升沿被从机采样,数据输出同理。
3.2 Mode1
Mode1时,CPOL=0,CPHA=1,SCK空闲时为低电平,在SCK第二个边沿时数据有效,即SCK下降沿有效。
3.3 Mode2
Mode2时,CPOL=1,CPHA=0,SCK空闲时为高电平,在SCK第一个边沿时数据有效,即SCK下降沿有效。
3.4 Mode3
Mode3时,CPOL=1,CPHA=1,SCK空闲状态为高电平,主机数据在第二个边沿时有效,即每个上升沿被从机采样,数据输出同理。
四、SPI基本时序
SS为低电平时,表示对应的从机设备被使能,在每个SCK周期可以传输1Bit数据,采样时刻取决于器件支持的SPI mode,根据不同SPI器件的控制方法,在进行正式的数据读写操作前,一般需要先写入控制字,然后是寄存器地址和数据。
如下是FM25V05铁电存储器采用SPI模式0的写时序,SS(CS)被拉低,主机数据在每个上升沿被从机采样,Opcode是控制字,控制字采样结束后开始采样数据。
如下是FM25V05铁电存储器采用SPI模式0的读时序:
需要注意的是在SS下降沿和SCLK第一个边沿,或SS上升沿和SCLK最后一个边沿之间要留有一定的延迟时间,一般是0.5个SCLK周期。
参考:
【1】关于SPI协议,看这一篇文章就够了!-面包板社区
【2】总线I2C和SPI,工程师喜欢用哪一个?
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/181639.html原文链接:https://javaforall.cn