目前合宙Air系列模块外部可用的通用总线接口基本上有UART、I2C、SPI这三种,为方便大家了解和使用,近期将陆续对这三种总线进行一一介绍,并结合常用外部器件对总线进行实测。
今天,我们先从SPI总线开始。
1
为了更快的响应数据,不少电路还扩充了中断引脚和一些电路控制引脚,通过模块GPIO来实现,如:
INT 模块引脚:任意GPIO -从设备中断信号,通知主器件进行操作 (可选)
SPI还有一些突出的优势,因为主时钟是由主机进行同步的,因此在读写的时候主机时序要求宽松,既可以快速也可以慢速,只要时钟和数据位对齐即可,因此采用GPIO用软件模拟低速SPI非常容易,后面也会在实验中加以测试。
2
在数据交换之前,主控制器和从设备会将存储器数据加载至它们的内部移位寄存器。
收到时钟信号后,主控制器先通过 MOSI 线路时钟输出其移位寄存器的 MSB。同时从设备会读取位于 SIMO 的主控器第一位元,将其存储在存储器中,然后通过 SOMI 时钟输出其 MSB。主控制器可读取位于 MISO 的从设备第一位元,并将其存储在存储器中,以便后续处理。
整个过程将一直持续到所有位元完成交换,而主控器则可让时钟空闲并通过 /SS 禁用从设备。
除设置时钟频率外,主控制器还可根据数据配置时钟极性和相位。这两个分别称为 OPOL 与 CPHA:
CPOL = 0 时,时钟空闲在逻辑 0 位置上:
如果 CPHA = 0,数据在 SCK 的上升沿读取,在下降沿变化。
如果 CPHA = 1,数据在 SCK 的下降沿读取,在上升沿变化。
CPOL = 1 时,时钟在逻辑为高时空闲:
如果 CPHA = 0,数据在 SCK 的下降沿读取,在上升沿变化。
如果 CPHA = 1,数据在 SCK 的上升沿读取,在下降沿变化。
3
在进行SPI4线式数据读写时,我们经常遇到的是如下这样的时序结构:
SPI读操作指令由8bit C0-C8的首字节构成,在MOSI线路传输指令时,同时由MISO传入设备的状态信息 S0-S8 构成首字节,然后其余的数据D0-DXX 附加在首字节后在MISO线上由设备传到模块。
SPI写操作指令由8bit C0-C8命令首字节加上D0-DXX的数据构成,在MOSI线路由模块传向设备,同时由MISO传入设备的状态信息 S0-S8构成返回信息。
为了仅读取状态信息,也可以不发送数据字节,成为NOP操作,时序更为简单。
4
SPI 打环测试:
发送 01010101
接收 01010101
--SPI 置低测试(MISO接GND)
发送 XXXXXXXX (X是任意高低电平)
接收 00000000
--SPI 置高测试(MISO接VCC)
发送 XXXXXXXX (X是任意高低电平)
接收 11111111
下一篇文章,我们将结合Air720SL系列模块对SPI总线进行相关测试,敬请关注。
感谢阅览本期内容
欢迎文末留言互动
本期文末最先留言的五位同学
— 将获得合宙商城五折券一张 —
五折券有效期至2月29日
点击公众号菜单“合宙商城”即可使用
2月1日起合宙商城已恢复正常发货
- 粉丝专有福利 -
- DIY无线电话机 -
- 往期官方教程 -
点亮在看,和更多人一起了解物联网
↓↓↓