2.4. I2C
Overview
提供 I2C 应用示例、配置介绍和常见问题。
2.4.1. 应用实例
示例演示:
软件 I2C 读写数据
硬件 I2C 读写数据
example: 具体示例代码详见 apps/common/example/peripheral/iic/main.c
,示例工程实现需在 apps/demo/demo_DevKitBoard/include/demo_config.h
中开启宏 USE_HW_I2C_TEST_DEMO
或 USE_SW_I2C_TEST_DEMO
。
2.4.2. 常见问题
硬件 I2C 和软件 I2C 的如何配置驱动程序?
答:① 硬件 I2C 在 board.c 中配置参数
//1.添加头文件 #include "device/iic.h" #include "asm/iic.h" //2.添加软件IIC硬件配配置信息 HW_IIC0_PLATFORM_DATA_BEGIN(hw_iic1_data) .clk_pin = IO_PORTC_01,//clk .dat_pin = IO_PORTC_02,//sdat .baudrate = 2,//baudrate为lsb_clk时钟的分频系数,越小IIC时钟越快,IIC时钟=lsb_clk/((baudrate+1)*2) + 上拉电阻时间 HW_IIC0_PLATFORM_DATA_END() //3.设备列表添加iic设备 { "iic0", &iic_dev_ops, (void *)&hw_iic1_data },
② 软件 I2C 在 board.c 中配置参数
//1.添加头文件 #include "device/iic.h" //2.添加软件IIC硬件配配置信息 SW_IIC_PLATFORM_DATA_BEGIN(sw_iic0_data) .clk_pin = IO_PORTC_01,//clk .dat_pin = IO_PORTC_02,//sdat .sw_iic_delay = 50,//clk时钟周期(系统的nop时间个数) SW_IIC_PLATFORM_DATA_END() //3设备列表添加iic设备 { "iic0", &iic_dev_ops, (void *)&sw_iic0_data },
baudrate 值太大,则会引起 IIC 读写速度慢,需要留意该值配置。
软件 IIC 可以指定任意引脚,但是硬件 IIC 只能跟随硬件 IO,硬件 IIC 的 IO 详情请查看对应封装的数据手册。
2.4.3. API参考
I2C 的 API 接口说明如下:
Functions
-
void *dev_open(const char *name, void *arg)
dev_open:用于打开一个设备
- Parameters
name – 设备名称
arg – 控制参数,一般为NULL
-
int dev_read(void *device, void *buf, u32 len)
dev_read:用于设备数据的接收。
- Parameters
device – 设备句柄
buf – 要读入的 buffer 缓冲区
len – 要读入的长度
-
int dev_write(void *device, void *buf, u32 len)
dev_write:用于设备数据的发送。
- Parameters
device – 设备句柄
buf – 要写入的 buffer 缓冲区
len – 要写入的长度
-
int dev_ioctl(void *device, int cmd, u32 arg)
dev_ioctl:用于对设备进行控制和参数的修改
- Parameters
device – 设备句柄
cmd – 设备控制命令
arg – 控制参数
-
int dev_close(void *device)
dev_close:用于关闭一个设备
- Parameters
device – 设备句柄