i2c¶
作者:吴永 更新时间:2020年8月15日
i2c¶
i2c 操作接口
i2c.setup()¶
打开i2c接口
语法
speed = i2c.setup( id, speed [,slaveaddr] )
参数
参数
释义
取值范围
id
i2c 接口 id
core 0025版本 之前,0、1、2都表示i2c 2core 0025以及之后的版 本,1、2、3分别表示i2c 1、2、3
speed
时钟频率
100000/400000/3500000
slaveaddr
可选,i2c 外设地址 0x00-0x7f
返回值
可以根据返回的频率值判断是否成功打开 i2c
例子
--使用i2c.send和i2c.recv的setup
if i2c.setup(i2cid,100000) ~= 100000 then
print("init fail")
return
end
--使用i2c.write和i2c.read的setup
if i2c.setup(i2cid,100000,i2cslaveaddr) ~= 100000 then
print("init1 fail")
return
end
i2c.send()¶
向从设备写数据
语法
wrote = i2c.send( id,slave, data )
参数
参数
释义
取值范围
id
i2c 接口 id
core 0025版本 之前,0、1、2都表示i2c 2core 0025以及之后的版 本,1、2、3分别表示i2c 1、2、3
slave
i2c 外设地址 0x00-0x7f
data
number / string / tabl e,自动根据参数类型写数据,num 只写 1 个字节,string/table
返回值
传输成功的字节数
例子
local cmd,i = {0x1B,0x00,0x6A,0x01,0x1E,0x20,0x21,0x04,0x1B,0x00,0x1B,0xDA,0x1B,0xDA}
for i=1,#cmd,2 do
--向从设备i2cslaveaddr发送寄存器地址cmd[i]
i2c.send(i2cid,i2cslaveaddr,cmd[i])
--向从设备i2cslaveaddr发送要写入从设备寄存器内的数据cmd[i+1]
i2c.send(i2cid,i2cslaveaddr,cmd[i+1])
end
i2c.recv()¶
向从设备读取数据
语法
i2c.recv( id, slave,size )
参数
参数
释义
取值范围
id
i2c 接口 id
core 0025版本 之前,0、1、2都表示i2c 2core 0025以及之后的版 本,1、2、3分别表示i2c 1、2、3
slave
i2c 外设地址 0x00-0x7f
size
读取数据字节数
返回值
返回读取的数据,二进制数据会包含非可见字符,请使用 string.byte 打印数据流
例子
--向从设备i2cslaveaddr发送寄存器地址cmd[i]
i2c.send(i2cid,i2cslaveaddr,cmd[i])
--读取从设备i2cslaveaddr寄存器内的1个字节的数据,并且打印出来
print("testI2c.init",string.format("%02X",cmd[i]),string.toHex(i2c.recv(i2cid,i2cslaveaddr,1)))
i2c.write()¶
往指定的寄存器地址 reg 传输数据
语法
wrote = i2c.write( id, reg, data )
参数
参数
释义
取值范围
id
i2c 接口 id
core 0025版本 之前,0、1、2都表示i2c 2core 0025以及之后的版 本,1、2、3分别表示i2c 1、2、3
reg
写入 i2c 从设备的寄存器起始地址
data
number / string / tabl e,自动根据参数类型写数据,num 只写 1 个字节,string/table
返回值
传输成功的字节数
例子
local cmd,i = {0x1B,0x00,0x6A,0x01,0x1E,0x20,0x21,0x04,0x1B,0x00,0x1B,0xDA,0x1B,0xDA}
for i=1,#cmd,2 do
--向从设备的寄存器地址cmd[i]中写1字节的数据cmd[i+1]
i2c.write(i2cid,cmd[i],cmd[i+1])
end
i2c.read()¶
读取指定寄存器地址 reg 的数据内容
语法
data = i2c.read( id, reg, num )
参数
参数
释义
取值范围
id
i2c 接口 id
core 0025版本 之前,0、1、2都表示i2c 2core 0025以及之后的版 本,1、2、3分别表示i2c 1、2、3
reg
读取 i2c 从设备的寄存器起始地址
num
读取数据字节数
返回值
返回读取的数据,二进制数据会包含非可见字符,请使用 string.byte 打印数据流
例子
--从从设备的寄存器地址cmd[i]中读1字节的数据,并且打印出来
local cmd,i = {0x1B,0x00,0x6A,0x01,0x1E,0x20,0x21,0x04,0x1B,0x00,0x1B,0xDA,0x1B,0xDA}
for i=1,#cmd,2 do
--向从设备的寄存器地址cmd[i]中写1字节的数据cmd[i+1]
i2c.write(i2cid,cmd[i],cmd[i+1])
--从从设备的寄存器地址cmd[i]中读1字节的数据,并且打印出来
print("testI2c.init1",string.format("%02X",cmd[i]),string.toHex(i2c.read(i2cid,cmd[i],1)))
end
i2c.close()¶
关闭 I2C 接口
语法
speed = i2c.close( id )
参数
参数
释义
取值范围
id
i2c 接口 id
core 0025版本 之前,0、1、2都表示i2c 2core 0025以及之后的版 本,1、2、3分别表示i2c 1、2、3
返回值
无