I2C使用参考

Version 1.1


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”);

}