1 SPI
1.1 概念
SPI是串行外设接口(Serial Peripheral Interface)的缩写,SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便。SPI的原理以及通信过程不是本文要研究的内容,如有兴趣可以自行查找资料。
1.2 特性
(1)SPI总线是一种同步的串行接口: SPI是属于串行通信的一种,这就意味着SPI依赖于共享的时钟信号来同步设备之间的数据传输。控制时钟信号的设备被称为Master。其它所有连接的外设被认为是Slaves。每个设备连接到同一组数据信号以形成总线。从理论上讲,SPI数据传输率是仅限于Master切换时钟信号的快慢。时钟速度通常在16MHz到25MHz范围。
(2)SPI支持全双工数据传输:全双工数据传输意味着Master和Slave可以同时交换数据。为了支持全双工传输,总线必须提供下列单独的信号,使得SPI最少四线接口:
Master出Slave入(MOSI);
Mater入Slave出(MISO);
共享时钟信号(CLK);
共同的接地参考(GND);
(3)SPI支持同一总线连接多个从设备
在SPI通信中,Slave设备采用硬件寻址方式。每个Slave都需要外部芯片选择信号,来让Master定位特定的设备作为数据传输的目标。如果仅仅使用一个Slave这个信号就不必须。
SPI引脚图:
2 Android Things
2.1 概念
Android Things是谷歌发布的一套帮助开发者在安卓端开发嵌入式设备的开发工具。 Android Things将通信底层过程封装为应用层可以调用的API方法,大大简化了Android平台下开发嵌入式设备的过程。
2.2 特性
(1)单一自启动APP,通常设备会只运行单一的程序,即开发者的APP会自动启动,系统APP不会呈现出来。
(2)显示可选,设备可以没有屏幕,通过按钮、触摸、LED灯、语音或其他形式与用户交互。
(3)提供了通过I/O驱动外设的接口,让开发者可以与传感器和执行器进行通讯交互,支持GPIO、PWM、I2C、SPI和UART。
(4)用户驱动API,用户驱动继承Android Framework Services,允许APP将硬件事件注入到Framework中,使得其他APP可以使用标准的Android API访问。
(5)物联网云,通过Google物联网云平台,开发者可以方便且安全的连接、管理数百万计遍布全球的设备,并从中获取数据。Google物联网云平台和一些其他的Google服务,提供了包括数据采集、处理分析和可视化物联网数据的完整解决方案。
Android Things架构图:
3 Android SPI开发
Android SPI这里指的是调用Android Things的API开发程序。值得注意的是Java中也有一套简称为SPI的机制,全名为Service Provider Interface,Java中的SPI是为某个接口寻找服务的机制,有点类似IOC的思想,将装配的控制权移交给ServiceLoader。与本文所说的SPI完全是两个概念。
3.1 申请权限
使用 Android Things进行开发时需要在Androidmanifest.xml添加如下权限。
<uses-permission android:name="com.google.android.things.permission.USE_PERIPHERAL_IO" />