内部集成电路,I2C或称双线接口,是一种多主同步串行数据链路标准,由菲利普斯发明。I2C仅使用两条双向开漏管:

  • SCL:串行时钟(从主机输出)

  • SDA:串行数据线(双向)。

I2C总线可以使用单个主设备,也可以使用多达256个设备,只要它们都具有不同的设备地址。API提供了更改目标的函数。

ConnectCore 8X具有多个I2C (Inter Integrated Circuits)接口,可以使用该协议与其他I2C设备进行通信。看到ConnectCore 8X硬件参考手册获取可用I2C接口的信息。

Digi为Android添加了一个API来管理这些I2C接口。您可以配置从地址、写入和读取等等。在Digi APIx javadoc,您可以在此API中找到可用方法的完整列表。

除非特别说明,否则所有I2C API方法都需要com.digi.android.permission.I2C许可。

如果您的应用程序没有com.digi.android.permission.I2C权限,则无法访问任何I2C业务功能。

首先,一个新的I2CManager对象必须通过传递Android应用程序上下文来实例化。

实例化I2CManager
进口android.app.Activity;进口android.os.Bundle;进口com.digi.android.i2c.I2CManager;公共I2CSampleActivity扩展活动{I2CManager I2CManager;[…]@Override公共无效onCreate(Bundle savedInstanceState) {超级onCreate(savedInstanceState);//实例化I2C管理器对象。i2cManager =I2CManager ();[…]} [...] }

实例化I2C接口

I2CManager允许您创建I2C对象表示物理模块的I2C接口。使用该对象,您可以向接口写入并从中读取。如果你不知道设备中有多少接口可用,你可以列出它们。

方法 描述

createI2C (int)

创建并返回一个带有给定接口号的I2C对象

listInterfaces ()

列出设备中所有可用的I2C接口编号

createI2C (int)方法如果提供的索引为0或低于0,则可能失败,并抛出IllegalArgumentException

获取I2C接口
进口com.digi.android.i2c.I2C;进口com.digi.android.i2c.I2CManager;[…]I2CManageri2cManager = ...;//为每个可用的I2C接口创建一个I2C对象int[] nInterfaces = i2cManager。listInterfaces();I2C[] interface =I2C [nInterfaces。长度];int我=0;i < nInterfaces。长度;i++) interfaces[i] = i2cManager。createI2C(nInterfaces[我]);[…]

管理I2C接口

下一步是打开I2C接口。要做到这一点,只需要调用open ()方法。在打开接口之前,您可以获取接口编号并检查其当前状态(打开或关闭)。当你用完接口后,你必须关闭它。所有这些管理都可以使用以下方法执行。

方法 描述

getInterfaceNumber ()

获取I2C接口编号

isInterfaceOpen ()

检索接口是否打开

open ()

打开I2C接口

close ()

试图关闭I2C接口

open ()方法可能失败,如果要打开的接口编号不存在,则抛出NoSuchInterfaceException或者如果访问接口时出现IO问题,则抛出IOException

close ()方法访问接口时如果出现问题,则可能失败IOException

获取I2C接口
进口com.digi.android.i2c.I2C;进口com.digi.android.i2c.I2CManager;[…]I2CManageri2cManager = ...; I2C i2cInterface = ...;//打印接口编号。系统。println“创建I2C接口”+ i2cInterface。getInterfaceNumber());[…]//检查接口是否打开,否则打开。如果(! i2cInterface。isInterfaceOpen()) i2cInterface。开放();[…]//关闭I2C接口。i2cInterface。关闭();

与I2C接口通信

成功打开I2C接口后,可以执行以下操作:

读取数据

使用I2C接口可以做的最常见的事情之一是从特定设备从地址读取一个或多个字节。在所有的读方法中,第一个参数对应于这个从地址。

方法 描述

读(int, int)

从给定的从设备地址读取给定数量的字节

readByte (int)

从给定的从设备地址读取一个字节

上述所有方法都可能失败,原因如下:

  • 提供的从地址低于0抛出错误IllegalArgumentException

  • 接口已关闭或访问接口时发生错误,并抛出IOException

此外,readByte (int, int)方法如果要读取的字节数为0或小于0,则可能失败,并抛出IllegalArgumentException

从I2C接口读取数据
进口com.digi.android.i2c.I2C;进口com.digi.android.i2c.I2CManager;[…]I2CManageri2cManager = ...; I2C i2cInterface = ...; [...]字节[] readData =字节8];//从地址0中读取8字节(一个字节一个字节)。int我=0;i < readData。长度;i++) readData[i] = i2cInterface。readByte0);//从地址0中读取8个字节。readData = i2cInterface。08);[…]
完成I2C接口后,需要通过调用close ()方法。

写入数据

I2C API还允许您在I2C设备的从地址中写入数据。在这种情况下,您可以一个字节一个字节地写入数据,也可以写入字节数组。

方法 描述

写(int,字节)

在给定的从属设备地址中写入给定的字节

写(int, byte [])

在给定的从设备地址中写入给定的字节数组

上述所有方法都可能失败,原因如下:

  • 提供的从地址低于0抛出错误IllegalArgumentException

  • 接口已关闭或访问接口时发生错误,并抛出IOException

此外,写(int, byte [])方法可能会失败,如果要写入的数据是扔……NullPointerException

向I2C接口写入数据
进口com.digi.android.i2c.I2C;进口com.digi.android.i2c.I2CManager;[…]I2CManageri2cManager = ...; I2C i2cInterface = ...;字节[] data =“abcdefgh”;[…]//写入数据中包含的字节(一个字节一个字节)。int我=0;I < data。长度;我+ +)i2cInterface。0(我)、数据);//写入数据中包含的字节。i2cInterface。0、数据);[…]
完成I2C接口后,需要通过调用close ()方法。

传输数据

最后,I2C接口使您可以在一次操作中同时读取和写入数据。与前面的方法一样,第一个参数对应于I2C设备的从地址。

方法 描述

Transfer (int, byte[], int)

同时在给定的从设备地址中写入给定的字节数组,并读取给定数量的字节

Transfer (int, byte, int)

同时在给定的从设备地址中写入给定的字节,并读取给定数量的字节

所有这些方法都可能失败,原因如下:

  • 提供的从地址小于0,或者如果要传输的字节数小于1,则抛出一个IllegalArgumentException

  • 接口已关闭或访问接口时发生错误,并抛出IOException

此外,Transfer (int, byte[], int)方法可能失败,如果要传输的数据是扔一个NullPointerException

向I2C接口传输数据
进口com.digi.android.i2c.I2C;进口com.digi.android.i2c.I2CManager;[…]I2CManageri2cManager = ...; I2C i2cInterface = ...;字节[] data =“abcdefgh”;字节[] readData;[…]//写入数据中包含的字节数,并在从地址0中读取相同字节数(8)。readData = i2cInterface。转移0,数据,数据。长度);//写入一个字节('a'),从地址0中读取8个字节。readData = i2cInterface。转移0, (字节“一个”8);[…]
完成I2C接口后,需要通过调用close ()方法。

I2C的例子

例如:I2C

I2C示例应用程序演示了I2C API的用法。在本例中,您可以访问和控制外部I2C EEPROM存储器。应用程序可以执行读、写和擦除操作,以十六进制列表视图显示结果。

您可以使用Digi的Android Studio插件导入示例。有关更多信息,请参见导入Digi示例应用程序.要查看应用程序源代码,请转到GitHub库