Toggle navigation
首页
(current)
问答
文章
话题
商城
登录
注册
合宙Air系列模块外部总线接口常见用法-SPI总线,上
SPI
总线
入门知识
目前合宙Air系列模块外部可用的通用总线接口基本上有UART,I2C,SPI这三种,下面我将结合有限的知识,对这三种总线进行一一介绍,并结合常用外部器件对总线进行实测。 今天首先从SPI总线开始,
## 1)SPI总线简介 SPI接口的全称是"Serial Peripheral Interface",意为串行外围接口,是Motorola首先在其MC68HCXX系列处理器上定义的。 SPI接口是以主从方式工作的,这种模式通常有一个主器件和一个或多个从器件,分为三线式和四线式通讯,其中Air系列物联网模块主要支持4线式,其接口定义如下: (1)接口名:MOSI 模块引脚:SPI_DOUT – 模块输出,从器件数据输入 (2)接口名:MISO 模块引脚:SPI_IN – 模块输入,从器件数据输出 (3)接口名:SCLK 模块引脚:SPI_CLK – 时钟信号,由主器件产生 (4)接口名:/SS 模块引脚:CS – 从器件使能信号,由主器件控制 为了更快的相应数据,不少电路还扩充了终端引脚和一些电路控制引脚,通过模块GPIO来实现,如 INT 模块引脚:任意GPIO -从设备中断信号,通知主器件进行操作 (可选) ![](/static/editormd/php/../uploads/5_46202.jpg) SPI模块允许MCU和外围设备之间的双工,同步,串行通信。 软件可以轮询SPI状态标志,或者通过外部GPIO触发的终端进行控制。 SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,地位在后,数据传输速度可达到几Mbps。 在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。 SPI设备也可以与多个从设备进行数据交换,当对应/SS置为高电平时,未被激活设备的MISO会成为高阻状态,从线路上断开。而只有被选中的设备控制总线的电平变化。 多设备连接示意图如下: ![](/static/editormd/php/../uploads/5_25307.jpg) SPI还有一些突出的优势,因为主时钟是由主机进行同步的,因此在读写的时候主机时序要求宽松,既可以快速也可以慢速,只要时钟和数据位对齐即可,因此采用GPIO用软件模拟低速SPI非常容易,后面我也会在实验中加以测试。 ## 2)SPI的基本时序 在数据交换之前,主控制器和从设备会将存储器数据加载至它们的内部移位寄存器。收到时钟信号后,主控制器先通过 MOSI 线路时钟输出其移位寄存器的 MSB。同时从设备会读取位于 SIMO 的主控器第一位元,将其存储在存储器中,然后通过 SOMI 时钟输出其 MSB。主控制器可读取位于 MISO 的从设备第一位元,并将其存储在存储器中,以便后续处理。整个过程将一直持续到所有位元完成交换,而主控器则可让时钟空闲并通过 /SS 禁用从设备。 ![](/static/editormd/php/../uploads/5_93105.gif) 除设置时钟频率外,主控制器还可根据数据配置时钟极性和相位。这两个分别称为 OPOL 与 CPHA ![](/static/editormd/php/../uploads/5_29084.jpg) CPOL = 0 时,时钟空闲在逻辑 0 位置上: 如果 CPHA = 0,数据在 SCK 的上升沿读取,在下降沿变化。 如果 CPHA = 1,数据在 SCK 的下降沿读取,在上升沿变化。 CPOL = 1 时,时钟在逻辑为高时空闲: 如果 CPHA = 0,数据在 SCK 的下降沿读取,在上升沿变化。 如果 CPHA = 1,数据在 SCK 的上升沿读取,在下降沿变化。 ####通常情况下我们 CPOL 和 CPHA 均置为 0 的场景比较多,下面是简化过的时序图,在时钟的上升沿采样MOSI和MISO两根数据线上的数据,是不是看上去更好懂一些呢 ![](/static/editormd/php/../uploads/5_68168.jpg) ## 3) SPI实际应用 在进行SPI4线式数据读写时,我们经常遇到的是如下这样的时序结构: ![](/static/editormd/php/../uploads/5_90875.jpg) SPI读操作指令由8bit C0-C8构成的首字节上,在MOSI线路传输指令时,同时由MISO传入设备的状态信息 S0-S8 构成首字节,然后更多的数据D0-DXX 附加在首字节后在MISO线上由设备传到模块。 ![](/static/editormd/php/../uploads/5_78238.jpg) SPI写操作指令由8bit C0-C8构成的命令首字节加上D0-DXX的数据构成,在MOSI线路由模块传向设备,同时由MOSI传入设备的状态信息 S0-S8构成返回信息。 ![](/static/editormd/php/../uploads/5_79893.jpg) 为了仅读取状态信息,也可以不发送数据字节,成为NOP操作,时序更为简单。 ## 4) SPI总线的测试方法 对于SPI主设备,最简单的测试方法是打环测试,既将MOSI和MISO直接短接,这样我们可以从读寄存器得到发送信息的副本,当然,也可以将MISO置高,或者置低,那么我们将可以从寄存读取到 0xFF或者0x00 的数值。 此时从 SCK 和 MOSI 上则能读出与输入相匹配的方波信号。 ![](/static/editormd/php/../uploads/5_32417.jpg) --SPI 打环测试 发送 01010101 接收 01010101 --SPI 置低测试(MISO接GND) 发送 XXXXXXXX (X是任意高低电平) 接收 00000000 --SPI 置高测试(MISO接VCC) 发送 XXXXXXXX (X是任意高低电平) 接收 11111111 在下一篇文章,我将结合Air720SL系列模块对SPI总线进行相关测试。 感谢您的耐心阅读,2020鼠您最棒!
发表于 2020-02-06 17:31
阅读 ( 2111 )
分类:
默认分类
0 推荐
收藏
你可能感兴趣的文章
合宙Air系列模块外部总线接口常见用法-SPI总线,中
2290 浏览
用合宙Air720的SPI接口驱动nRF24L01
1668 浏览
lua软件模拟spi
3069 浏览
相关问题
Air720G的SPI问题
0 回答
Air720怎么还没有支持SPI?
1 回答
Air202模块的SPI1管脚(PIN2、3、4、5)的电压域VMMC如何设置?
3 回答
0 条评论
请先
登录
后评论
柴松
技术销售
5 篇文章
作家榜
»
技术销售Delectate
43 文章
陈夏
26 文章
国梁
24 文章
miuser
21 文章
晨旭
20 文章
朱天华
19 文章
金艺
19 文章
杨奉武
18 文章
×
发送私信
发给:
内容:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!