i2c === 作者:吴永 更新时间:2020年8月15日 .. _i2c-1: 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 - 例子 .. code:: lua --使用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 | | +-----------+--------------------------------+-------------------------+ - 返回值 传输成功的字节数 - 例子 .. code:: lua 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 打印数据流 - 例子 .. code:: lua --向从设备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 | | +-----------+--------------------------------+-------------------------+ - 返回值 传输成功的字节数 - 例子 .. code:: lua 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 打印数据流 - 例子 .. code:: lua --从从设备的寄存器地址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 | +-----------+--------------------------------+-------------------------+ - 返回值 无 --------------