一、光环境传感器硬件原理图
二、i.MX6ull I2C控制器介绍
1. Inter IC (I2C)提供标准I2C从机和主机的功能。I2C被设计为兼容标准NXP I2C总线协议。
2. I2C是一种双线双向串行总线,它提供了一种简单有效的数据交换方法,最大限度地减少了设备之间的互连。这种总线适用于需要在许多设备之间偶尔进行短距离通信的应用。灵活的I2C标准允许将其他设备连接到总线上,以进行扩展和系统开
2.1 I2C控制器设计
2.2 Clocks
1. I2C有两个输入时钟(外围时钟:这个时钟用于外围总线寄存器读/写;模块时钟:这是I2C的功能时钟。串行位时钟频率来源于模块时钟。模块时钟与外设时钟是同步的。在Fast模式下,模块时钟的最小频率应为12.8 MHz,以实现400kbps的工作)。
2. I2C的时钟源说明如下表所示。请参阅时钟控制器模块(CCM)时钟设置,配置和门控信息
2.3 Arbitration procedure(仲裁程序)
如果多个设备同时请求总线,总线时钟由一个同步过程确定,其中低周期等于设备中最长的时钟低周期,高周期等于最短的时钟低周期。数据仲裁程序决定了竞争设备的相对优先级。
2.4 Initialization sequence(初始化顺序)
在接口能够传输串行数据之前,必须初始化寄存器,如下所列。
1. 设置数据采样率(I2C_IFDR[IC]),从系统总线时钟获取SCL频率。
2. 更新(I2C_IADR)中的地址以定义其从地址(地址范围从0到0x7f)。
3. 设置I2C使能位(I2C_I2CR[IEN]),使能I2C总线接口系统。
4. 修改I2C_I2CR中的位,使其选择“主从模式”、“收发模式”和“中断使能”。
2.5 Generation of Start(Start的生成)
1. 初始化程序完成后,可以通过选择主传输模式来发送串行数据。在多主总线系统中,需要测试忙碌的总线(I2C_I2SR[IBB])以确定串行总线是否空闲。如果总线是空闲的(IBB = 0),则可以发送起始信号和第一个字节(从机地址)。写入数据寄存器的数据包括所需从机的地址,并且最低有效位指示传输方向
2.停止和下一个开始条件之间的空闲时间内置在生成开始周期的硬件中。根据系统时钟和SCL周期的相对频率,在将调用地址写入数据寄存器(I2C_I2DR)后,可能需要等到I2C不忙,然后再将数据加载到数据寄存器(I2C_I2DR)中
2.6 Generation of Stop(停止的产生)
数据传输结束时,主站发出停止信号,这可能发生在所有数据发送后。对于主接收器终止数据传输,它必须通过不确认最后一个数据字节来通知从站发送器。这是通过在读取倒数第二个字节之前设置传输确认位(I2C_I2CR[TXAK])来完成的。在读取最后一个字节之前,必须生成停止信号
2.7 Generation of Repeated Start(重复启动的产生)
在数据传输之后,如果主站仍然需要总线,它可以发出另一个启动信号,后面跟着另一个从站地址,而不用发出停止信号。
2.8 Post-transfer software response(传输后软件响应)
1.发送或接收一个字节设置数据传输位(I2C_I2SR[ICF]),表示一个字节的通信完成。完成后,中断状态(I2C_I2SR[IIF])也被设置。如果设置了中断使能(I2C_I2CR[IIEN]),则会产生外部中断。软件必须首先清除中断例程中的中断状态(I2C_I2SR[IIF])。
2.数据传输位(I2C_I2SR[ICF])通过在接收模式下从I2C_I2DR读取或在传输模式下写入该寄存器来清除。