I2C AT 命令集
AT+DRVI2CINIT: 初始化 I2C Host 驱动
AT+DRVI2CRD: 从 I2C 设备读数据
AT+DRVI2CWRDATA: 写数据到 I2C 设备
AT+DRVI2CWRBYTES: 写入不超过 4 字节的数据到 I2C 设备
AT+DRVI2CINIT: 初始化 I2C Host 驱动
设置命令
命令:
AT+DRVI2CINIT=<num>,<scl_io>,<sda_io>,<clock>
响应:
OK
参数
<num>: I2C 端口号,范围:只能是0。如果未设置后面的参数,AT 将取消初始化该 I2C 端口。
<scl_io>: I2C 时钟引脚。
<sda_io>: I2C 数据传输引脚。
<clock>: I2C Host模式时钟频率,单位:Hz,范围是:100000~400000。
说明
[scl,sda] 可以选择 [PA1,PA4],[PB20,PB19], PA组直接使用对应数字,PB组需要使用名称中的数字加上16,但需要注意,PB20,PB19 通常用作 uart0
频率取值范围 [100000, 400000] HZ
示例
AT+DRVI2CINIT=0,1,4,400000 // i2c 设备 0 使用PA1,PA4 ; 时钟频率为 400KHz
AT+DRVI2CINIT=0,36,35,400000 // i2c 设备 0 使用PB20,PB19 ; 时钟频率为 400KHz
AT+DRVI2CINIT=0 // 取消I2C初始化
AT+DRVI2CRD: 从 I2C 设备读数据
设置命令
命令:
AT+DRVI2CRD=<num>,<address>,<length>
响应:
+DRVI2CRD:<read data>
OK
参数
<num>: I2C 端口号,只能是 0。
<address>: I2C 从设备地址,7 位地址:0 ~ 0x7F;
<length>: I2C 数据长度,范围:1 ~ 2048。
<read data>: I2C 读取数据。
说明
从设备读取数据时,通常需要先写从设备内部偏移地址或者寄存器地址。
示例
AT+DRVI2CRD=0,0x52,1 // 使用 I2C Host 设备0 向地址为 0x52 的从设备读一个字节,需要根据具体设备类型去下命令。
针对 EEPROM,可以先写入要读的偏移地址,再去读,例如:
AT+DRVI2CWRBYTES=0,0x52,1,0x10 // I2C0 向地址为 0x52 的设备写内部偏移地址 0x10
AT+DRVI2CRD=0,0x52,6 // I2C0 从地址为 0x52 的设备,内部偏移为 0x10 的地方读 6 字节
AT+DRVI2CWRDATA: 写入 I2C 数据
设置命令
命令:
AT+DRVI2CWRDATA=<num>,<address>,<length>
响应:
OK
收到上述响应后,输入想写入的数据,当数据达到参数指定长度后,数据传输开始。若数据传输成功,则返回:
OK
若数据传输失败,则返回:
ERROR
参数
<num>: I2C 端口号,只能是 0。
<address>: I2C 从设备地址,7 位地址:0 ~ 0x7F;
<length>: I2C 数据长度,范围:1 ~ 2048。
说明
向设备写数据时,通常需要在数据前面加上从设备内部偏移地址或者寄存器地址。
示例
AT+DRVI2CWRDATA=0,0x52,10 // I2C0 写入 10 字节到从设备
30 31 32 33 34 35 36 37 38 39 //透传模式写入前面10个字节的数据。 注意8位偏移的 EEPROM , 第一个字节 0x30 代表的是写入的偏移地址。
针对 8 位偏移地址的 EEPROM , 写命令的前一个字节会认为是偏移地址,后面才会认为是数据 ,地址和数据不能分成两次写入。16 位偏移地址的 EEPROM,
写数据的前两个字节都会认为是地址。
AT+DRVI2CWRBYTES: 写入不超过 4 字节的 I2C 数据
设置命令
命令:
AT+DRVI2CWRBYTES=<num>,<address>,<length>,<data>
响应:
OK
参数
<num>: I2C 端口号,只能是 0。
<address>: I2C 从设备地址,7 位地址:0 ~ 0x7F;
<length>: 待写入的 I2C 数据长度,范围:1 ~ 4 字节。
<data>: 参数 <length> 指定的数据,范围:0 ~ 0xFFFFFFFF。
说明
无
示例
AT+DRVI2CWRBYTES=0,0x52,3,0x103132 // I2C0 写入 3 字节数据 0x103132 至地址为 0x52 的设备