Android Things:外设I/O接口-I2C

一、接口简介


内部集成电路(IIC或者I2C)总线使用小数据负载连接简单的外部设备。传感器和执行器是常见的I2C使用案例,例如包含加速度计,温度计,LCD显示器,和电机驱动。

  1. I2C总线是一种同步的串行接口:这意味着它依赖于共享的时钟信号来同步设备之间的数据传输。控制时钟信号的设备被称为master,其它所有连接的外设被认为是Slaves,每个设备连接到同一组数据信号以形成总线。
  2. I2C设备连接使用3线接口

    • 共享时间信号(SCL);
    • 共享数据线(SDA);
    • 共同的接地参考(GND);

    这里写图片描述

  3. I2C仅支持半双工通信:因为所有的数据都是通过一根线连接。 所有的通信都是由master设备发起的,一旦主master传输完成slave必须响应
  4. I2C支持在同一条总线上连接多个slave设备:不像SPI,slave设备使用I2C软件协议寻址。每个设备编程有一个唯一的地址,并且仅仅响应master发送给地址的信息。每个slave设备必须有一个地址,即时总线仅仅包含一个单一的信号slave。

二、接口使用


1.管理Slave设备连接
public class HomeActivity extends Activity {
   
    // I2C Device Name
    private static final String I2C_DEVICE_NAME = ...;
    // I2C Slave Address
    private static final int I2C_ADDRESS = ...;
    private I2cDevice mDevice;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Attempt to access the I2C device
        try {
            PeripheralManagerService manager = new PeripheralManagerService();
            mDevice = manager.openI2cDevice(I2C_DEVICE_NAME, I2C_ADDRESS);
        } catch (IOException e) {
            Log.w(TAG, "Unable to access I2C device", e);
        }
    }
}
2.与寄存器通信

I2C Slave设备组织内容给可读或者可写的寄存器(单个字节数据由一个地址值引用):

  • 可读寄存器:包含slave想要向master报告的数据,例如传感器值或者状态标识;
  • 可写寄存器:包含master可以控制的配置数据;

一个常见的协议实现被称为System Management Bus(SMBus)存在于I2C顶部,以标准的方式和寄存器通信。SMBus命令由下面的两个I2C事务组成:
这里写图片描述

  • 第一个事务标识代表了要访问的寄存器的地址,第二个是在该地址读或者写的数据。
  • Slave设备的逻辑数据可能经常占用多个字节,从而包含多个寄存器地址。提供给API的地址始终是第一个寄存器的引用;

外设I/O提供了三种类型的SMBus命令来访问寄存器:

  • 字节数据:readRegByte()和writeRegByte()来读或者写一个单独的8位寄存器数据。
  • 字数据:readRegWord()和writeRegWord
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值