[Android Things] IO和总线

Android Things为它支持的几个硬件封装了统一的访问接口,我们可以用相同的代码去操作不同硬件的IO口,唯一不同的就是IO的名字和数量。
IO口是什么呢?就是输入输出端口(Input/Output)。它可以是一个端口,也可以是一组端口,这个数量根据通信协议的不同来定义。同样的,根据协议定义出来的端口的作用,可以在同一个/组端口上与多个设备通信的端口会被称作为总线。
比较常见的也是我们能在Android Things上遇得到的IO口通常有下面这几种:

端口名称 端口数量 作用
GPIO 1 高低电平的输入输出
PWM 1 脉冲方波输出
I2C 2 同步半双工通信总线,最多可挂在127个从设备
SPI 4+ 同步全双工通信总线,多挂在一个从设备就需要多增加一个端口
UART 2/4 异步全双工通信总线,只能一对一通信
I2S 3 同步单工通信总线,只能一对一通信

我们通过Android Things的API就可以知道你的Pi上有多少总线:

PeripheralManagerService manager = new PeripheralManagerService();

// 获取GPIO端口
List portList = manager.getGpioList();

// 获取PWM端口
List portList = manager.getPwmList();

// 获取I2C总线
List i2cBusList = manager.getI2cBusList();

// 获取SPI总线
List spiBusList = manager.getSpiBusList();

// 获取UART总线
List uartList = manager.getUartDeviceList();

// 获取I2S总线
List i2sList = manager.getI2sDeviceList();

1. GPIO

General Purpose Input/Output - 通用输入输出口是最基本的IO口,作为输出时,可以输出高或者低电平来表示开或者关的状态。当时你可以让它输出n组开或关的组合来表示一些复杂的二进制信息或者脉冲信息。
它作为输入时,可以检测输入电平的高或者低,更能检测到是从低变高、一直都高、一直都低、从高变低四种状态。

在Android Things中对应的类为

Gpio

GPIO详细介绍见 [Android Things] GPIO

2. PWM

Pulse Width Modulation - 脉冲宽度调制输出。它能够按照给定的周期输出指定高电平占比的方波。
周期(Period) - 指定方波的周期/频率。
占比(Duty) - 指定高电平在一个方波周期中占有的时长比例。

PWM

在Android Things中对应的类为

Pwm

PWM详细介绍见 [Android Things] PWM

3. I2C

The Inter-Integrated Circuit (IIC or I2C) bus - 内部集成电路总线是个很老牌的通信总线了,主设备通过地址寻址的方式可以选择和任意一个从设备通信。因为I2C协议规定设备地址为7bit,所以一条I2C总线上最多可以挂载127个从设备。
它用2条线作为通信线路,但实际应用中必须让GND也连接在一起,这样主从设备在使用不同的电源供电时可以获得相同的对地参考电平。

  • SCL - 共享时钟信号
  • SDA - 共享数据信号
  • GND - 公共接地


    I2C接线图

它的通信速度由SCL上时钟信号的快慢来决定,目前大家约定俗成的为I2C规定了三个不同的通信速度:

  • 对于低速设备使用100kbps的标准通信速度
  • 对于高速设备使用400kbps的快速通信速度
  • 对于完全不同把性能放在眼里的高性能设备来说使用3.4Mbps的高速通信速度
    如果主从设备都是你自己定制的,那么通信速度完全可以由你自定义。

在Android Things中对应的类为

I2cDevice

I2C详细介绍见 [Android Things] I2C

4. SPI

Serial Peripheral Interface (SPI) - 串行外设接口是个用于全双工通信的高速总线。它在嵌入式系统里算通信速度很快的了,如果需要高速传送什么东西,但又对通信端口数量有限制,那SPI非它莫属了。
对于一个从设备来说,它需要4根信号线来通信:

  • MISO - (Master in slave out)主设备数据输入,从设备数据输出
  • MOSI - (Master out slave in)主设备数据输出,从设备数据输入
  • SCLK - 时钟信号,由主设备产生
  • CS/SS - 片选信号,由主设备控制
  • GND - 公共接地,提供低电平参考

它同一时间内只与一个从设备通信,在使用一条信号线发送数据(MOSI)的同时可以使用另一条信号线接收数据(MISO),而通信的实际速度取决于时钟信号线(SCLK)上时钟脉冲速度,而时钟脉冲速度就取决于主从设备的内部总线时钟了,所以可以竭尽所能地榨取单片机的性能。
而对于多个从设备通信的情况,所以主从设备的MISO、MOSI、SCLK都是共同的,只有片选信号线(CS/SS)是每个从设备都需要与主设备的一个独立端口相连接的。所以理论上,主设备使用SPI总线与从设备通信所需要的信号线数据是3 + 从设备数量。(当然你可以用串行转并行的模块把多条片选信号线合并为一条串行的片选信号线。)


SPI接线图

图中一个主设备连接了两个从设备,CS1和CS2就是片选信号线。平时不通信时,所有片选信号线都保持高电平,当主设备需要和第一个从设备通信时,CS1被拉低为低电平,第一个从设备就会开始理会数据线和时钟线上的信号。同理,如果主设备要跟第二个从设备通信,就会拉低CS2后开始通信。如果主设备要同时给多个从设备发送数据时,可以同时拉低多个从设备的CS片选信号,但此时有个前提是,从设备不能发送数据给主设备,不然MISO上的数据都是混乱无意义的。

在Android Things中对应的类为

SpiDevice

SPI详细介绍见 [Android Things] SPI

5.UART

Universal Asynchronous Receiver Transmitter (UART) - 通常被直接简称为串口,它是异步的全双工通信端口。和SPI的区别在于,它是全双工的异步的一对一通信端口,而SPI是全双工的同步的一对多通信总线。
正因为它的异步通信特性,所以它的实现都带有一个FIFO(先入先出)缓冲区,但同时也少了一条用于同步的时钟信号线。
它的传输码率、传输码流、数据检验方式、数据同步方式都是可以配置的,只要通信双方约定好就行,所以数据传输的速度在于通信双方约定的配置。
一般UART通信只需要3条线就可以,但因为数据同步方式可以配置多种的,其中的硬件流控方式需要额外的2条流控信号线。

UART3线接线图

  • 3线通信
    • TX(Transmiter) - 数据发送,连接对方的RX
    • RX(Receiver) - 数据接受,连接对方的TX
    • GND - 公共接地,提供共同的低电平参考
UART5线接线图
  • 5线通信
    • TX RX GND
    • RTS(Request to send) - 表示自己要开始发送数据,请求对方用CTS来应答,如果CTS应答,则说明对方可以接收数据
    • CTS(Clear to send) - 被对方的RTS监听,用于告诉对方自己的接受缓冲是否还有空间接受数据,需不需要对方先暂停发送数据

在Android Things中对应的类为

UartDevice

UART详细介绍见 [Android Things] UART

6.I2S

Inter-IC Sound (I2S) - 集成音频总线,用于连接数字音频设备并发送和接受PCM音频数据。它可以作为PCM音频信号输出,也可以作为PCM音频信号输入,也可以同时作为PCM音频信号的输出和输入(当然,这需要多废一根线,因为I2S总线是全双工的)。

I2S总线接线图

上图所示就是个同时连接音频输入设备和音频输出设备的I2S接线法。
总线引脚分别是:

  • BCLK - 位时钟(Bit Clock),由I2S Master Device(I2S主设备)产生,也称为SCLK。对应数字音频的每一位数据,SCLK都有1个脉冲。BCLK的频率 = 2 × 采样频率 × 采样位数
  • LRCLK - 左右声道选择时钟,LRCK的频率等于采样频率,它输出低电平时,SDOUT和SDIN的数据都为左声道数据,它输出高电平时,SDIN和SDIN的数据都为右声道数据。也称为FS(Frame Select)或WS(Word Select)
  • GND - 公共接地,为主从设备提供低电平参考
  • SDOUT - 为PCM数据输出
  • SDIN - 为PCM数据输入
  • MCLK - 在某些比较低级的系统中,主设备还提供从设备的执行时钟以确保更好的数据同步,通常为成为主时钟(Master Clock)或系统时钟(System Clock)。它的频率通常是采样频率的256倍或384倍

如果你只需要音频输入或者只需要音频输出,直接少接SDOUT或SDIN就好了。另外输入和输出都共用BCLK时钟线和LRCLK时钟线,所以主时钟由I2S Master Device(I2S主设备)产生就好了。

在Android Things中对应的类为

I2sDevice

I2S详细介绍见 [Android Things] I2S

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,569评论 25 707
  • ​​​本文主要介绍嵌入式系统的一些基础知识,希望对各位有帮助。 嵌入式系统基础 1、嵌入式系统的定义 (1)定义:...
    OpenJetson阅读 3,250评论 0 13
  • 总线 计算机的各个功能部件通过总线连接在一起构成完整的计算机系统,总线是多个系统功能部件之间进行数据传送的公共通路...
    罗蓁蓁阅读 4,592评论 0 10
  • 我们总希望教会孩子生活技能,让他更快的成长,那到底可以怎么做呢?昨天晚上发生在我家的一个小例子也许可以让我们知道一...
    做更好的父母阅读 179评论 0 0
  • 罗马王子、狼王,罗马的旗帜、领袖退役了!25年的职业生涯,全部献给了同一支球队,这在现代足球史上是极其罕见的,他用...
    谭非凡阅读 273评论 0 0