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

  • 返回值