I2C使用参考
1. 概述¶
IKAYAKI系列芯片支持2组I2C,详细的I2C引脚复用padmux可查看硬件资料HW Checklist。
I2C源码路径:rtk/proj/sc/driver/sysdriver/i2c
2. 配置¶
2.1. mak配置¶
在相应的product config中修改mak文件的配置,需要启用选项CONFIG_I2C_SUPPORT = TRUE
编译I2C驱动。
2.2. sysdesc配置¶
需要确认当前使用的product config是使用的何种sysdesc文件,可在rtk/proj/mak/product
中找到当前工程的配置,打开配置搜索CONFIG_SYSDESC_SELECT
确认当前使用的sysdesc文件。例如,当前工程使用pioneer3_ssc020a_64_freertos_smp_isw_usbdev
,其对应的sysdesc文件为CONFIG_SYSDESC_SELECT = "pioneer3-ssc020a-s01b.sys"
,那么就去修改这个文件。
sysdesc配置文件路径:rtk/proj/sc/driver/sysdriver/sysdesc/hal/pioneer3/pub/
配置示例:
如上图,<i2cmX>
表示I2C栏目,X的值为0和1,例如<i2cm0>
表示I2C0,<i2cm1>
表示I2C1。
这个栏目下均有[i2cm_padmux_u8]
,表示padmux值。例如<i2cm1>
下[i2cm_padmux_u8] 6;
,表示I2C1被复用成mode 6。
3. 使用I2C demo¶
I2C测试代码路径:rtk/proj/sc/driver/sysdriver/i2c/drv/src/i2c_test.c
可参考测试代码或如下的使用方法。
3.1. 写I2C¶
#include “cam_drv_i2c.h” extern s32 i2c_transfer(u8 u8Port, tI2cMsg *pmsg, s32 length); char buf[2] = {0xf3, 0x8f}; struct i2c_msg msg; msg.addr = 0x21; msg.buf = buf; msg.len = 2; msg.flags = 0; if(i2c_transfer(1, &msg, 1) < 0) { CamOsPrintf(“write failed\n”); }
3.2. 读I2C¶
#include “cam_drv_i2c.h” extern s32 i2c_transfer(u8 u8Port, tI2cMsg *pmsg, s32 length); char buf[4] = { 0xf3 }; struct i2c_msg msg; msg.addr = 0x21; msg.buf = buf; msg.len = 1; msg.flags = 1; if(i2c_transfer(1, &msg, 1) < 0) { CamOsPrintf(“read failed\n”); }