1. 概述
原生Android系统并没有提供接口函数访问i2c总线,为了调试方便,用户开发app更简单,AmLink平台增加了java层的 I2C API 接口, 以.aar /.so形式提供给用户调用,用户不需要写jni,用户移植只需要参考demo code里的libs/, jnilibs/, build.gradle等几个地方的内容即可。
2. API
接口的实现在I2cPort 类里,主要方法如下:
int open(int busId,int addr);
该函数设置初始化i2c。其中:
budId: 取值0-3,分别对应m100模块上i2c0-i2c3 4组i2c总线。
addr: i2c 外设的slave地址,7位。
byte[] readBytes(int len);
该函数实现i2c 写操作,其中:
len: 存放准备读取i2c外设的数据长度,单位字节,1表示读1个字节,以此类推,最大是7。
返回值是byte[]数组,如果为null,表示读取失败
int writeBytes(byte[] buf, int len);
该函数实现i2c 写操作,其中:
buf[]: 存放准备写入i2c外设的数据
len: 参数的长度,单位字节,1表示1个字节,以此类推,最大是7。
返回值0表示写入成功,非0值是错误代码。
int close();
释放对该i2c外设的控制。
**
目前有2点限制:
暂时不支持带restart信号的传输
每次传输的最大长度是7
改进中,很快就会支持。
3. 使用方法
我们会提供对应的.aar和.so库文件及对应的demo例程,请发邮件到 support@temolin.com
模块的固件需升级到r9130之后(不包括r9130)的版本。
4. 命令行调试方法
项目调试初期,可以先用adb命令读写i2c协助定位问题,如:
adb shell "i2ctransfer -y -f 2 w2@0x6b 0x4 0x0"
》上述命令表示往i2c总线2,7位地址是0x6b的器件写入2个字节:0x4 0x0
adb shell "i2ctransfer -y -f 2 w1@0x6b 0x4 && i2ctransfer -y -f 2 r1@0x6b"
》上述命令表示读取i2c总线2,7位地址是0x6b的器件的寄存器0x4一个字节