协议篇-SPI3和SPI4

        SPI通信分三线(SCLK、CS、DIO)和四线(SCLK、CS、MOSI、MISO),常见的四线居多,如下表所示为信号定义:

                                                                表1 4线SPI信号定义

名称

接口方向(主设备方向)

描述

SCLK

out

 时钟信号,由主设备产生

CS

out

从设备片选信号,由主设备控制,通常低电平有效

MOSI

out

主设备输出的数据

MISO

in

向主设备输入的数据

        标准4线SPI有4种工作模式,如下表所示:

                                                                表2 SPI模式

SPI模式

CPOL

CPHA

采样时刻

0

0

0

SCLK默认低电平,第一个上升沿

1

0

1

SCLK默认低电平,第一个下降沿

2

1

0

SCLK默认高电平,第一个下降沿

3

1

1

SCLK默认高电平,第一个上升沿

        如下图所示为SPI时序图:

                                                       图1 SPI时序图

        从上图可以总结如下:

        1、SCLK如果上升沿采集数据,那么下降沿新数据输出,相反下降沿采集数据,那么上升沿触发新数据输出。

        2、CS下降沿之前可以准备好第一个bit数据;

        3、传输完数据后时钟SCLK返回默认状态。

        需要注意的是SPI协议DATA的内容可以是大端传输,也可以是小端传输,没有指定必须用大端。另外SPI有标准模式,但是协议格式内容和传输数据长度等可自由定义。

        例如以BMP581传感器为主,如下图所示为SPI写的时序图:

                                                           图2 BMP581 SPI写时序图

        从图中可以看出该传感器可用模式0和模式3,第一个bit位写0代表写寄存器操作,2~8bit代表寄存器地址,9~16代表寄存器地址的值。

        如下图所示代表SPI读时许图:

        

                                                           图3 BMP581 SPI读时序图

        如上图所示第一个bit位写1代表写寄存器操作,2~8bit代表要读的寄存器地址,从设备(BMP581)MISO输出寄存器值D7~D0位。

        SPI3线和SPI4线类似,不同的是共用一根数据线,这里数据线在编写代码时要设置为三态门电路即inout接口,主设备写数据时设置为输出状态,写完毕后释放数据总线(设置为高阻态)然后从端会通过该总线输出数据给主设备。

        设计中为了节省接口,SPI通常有两种接法分别是多从机模式和菊花链模式。

        多从机接法如下图所示:

        

                                                        图4 SPI 多从机模式

        该模式很好理解,一个主机多个从机,优点是减少IO接口资源。但需要注意以下几点:

        1、因为主模块一个引脚需要同时驱动多个从机模块,工作时间长之后容易把芯片引脚烧坏,解决办法是硬件需要添加BUFFER芯片作为驱动使用,防止芯片IO烧坏;

        2、此接法MISO是inout接口,默认状态下主机和从机的MISO都作为高阻态输入,只有从端需要返回数据的时候做输出,输出完毕后切换回高阻态。只有这样才可以防止一条总线(MISO)上同时有多个设备在输出。

        菊花链接法模式以ADC芯片为例(型号LTC2376 16位ADC),如下图所示:

                                                        图5 SPI菊花链数据传输

        大多传感器SPI协议使用菊花链传输,该方法优点依然是可以有效节省IO接口,如下图所示为该ADC菊花链接法时序图:

                                               图6 ADC芯片LTC2376菊花链接法时序图

        从上图可以看出CNV作为CS片选信号,SCK作为时钟,SDOB作为MISO输出数据给主设备,输出的数据内容D15B~D0B代表设备B的ADC数据,D15A~D0A代表设备A的ADC采集数据。

        busy信号是芯片忙碌状态标志,该状态为1时,主设备不允许输出时钟。

        SPI协议篇讲到这里,如有疑问可留言。

        以上SPI驱动代码后面实战篇会提供,尽情期待。

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值