一. I2C实验
I2C时钟选择与传输速率
1. IMX6ULL的 I2C频率标准模式 100kbit/S,快速模式为 400Kbit/S
2. 时钟源选择 perclk_clk_root=ipg_clk_root=66MHz(由之前的时钟实验章节可以知道是 66MHz)。
二. I2C 寄存器配置
I2Cx_IFDR寄存器:分频寄存器。
I2Cx_IFDR寄存器设置 I2C频率,bit5:0位是设置频分值。
假如,我们现在需要 100kbit 的速率,那么,66000000/100000=660。可以通过查找与 660接近的数值,经过查找IC位设置位 0X38或 0X15时,为 640分频,66000000/640=103.125Kbit。
分频值与寄存器所设置的值对应表,如下所示(在《IMX6ULL参考手册》中的 I2C章节):
bit7 为I2C使能位,置1使能I2C。
bit5 为主从模式选择位,为0表示从机,为1表示主机。
Bit4 为发送/接收设置位,为0的时候是接收,为1的时候是发送。
I2SR寄存器:
bit7:传输完成位,为 0 表示正在发送,为 1 表示发送完成。
Bit5:I2C忙闲位,为0表示 I2C总线空闲,为 1表示 I2C总线忙。
Bit0:是读确认位,也就是ACK信号
I2DR寄存器: 数据寄存器。
三. AP3216C 传感器
AP3216C传感器的手册在 " 阿尔法Linux开发板(A盘)-基础资料\硬件资料\芯片资料" 目录下。
参考 "AP3216C.pdf " 文档。可以了解传感器的如下信息:
AP3216C传感器 是一个三合一的环境光传感器,ALS+PS+IRLED。
ALS是环境光,PS是接近传感器,IR是红外LED灯。I2C接口最高400Kbit/S的频率。
AP3216C有如下特点:
(1) AP3216C的从机地址位 0X1E。
(2) ALS(环境光)是16位输出。PS(接近传感器)是 10-bit输出。IR(红外LED灯)也是10-bit
(3) 0X0A是IR Ddata low。Bit7为0的时候表示IR和PS数据有效,为1的时候IR和PS数据无效。Bit1:0是IR的低2位。0X0B是 IR Data high,bit7:0是高字节。与0X0A一起组成 10bit的数据。
(4) 0X0C和 0X0D分别为 ALS的低 8位和高 8位。
(5) 0X0E是 PS 的 bit3:0是低4位数据,0X0F的 bit5:0 是高6位数据。也就是10位。
(6) 0X00 是系统配置寄存器。bit2:0设置 AP3216C开启哪些传感器。
我们需要设置为 011,也就是0x3,表示开始ALS+PS+IR。
系统配置寄存器设置为 011后的每个传感器的参数如下:
如果写代码读取 AP3216C的传感器参数值时,我们就是定时去读取。从以上参数可以看出,我们读取参数的时间周期肯定是要大于 112.5ms。