本文主要是介绍imx6ull i2c 控制器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
备注:部分知识参考百问网手册
一、overview
1.1 特性
① 兼容标准I2C总线,多主机运行。
② 64种不同的串行时钟频率之一的软件可编程性。
③ 软件可选择的应答位。
④ 中断驱动,逐字节数据传输。
⑤ 仲裁丢失中断与自动模式切换从主到从。
⑥ 启动和停止信号生成/检测。
⑦ 重复启动信号生成。
⑧ 应答位生成和检测。
⑨ 总线忙检测。
1.2 模式和操作
支持两种模式:标准模式和快速模式,标准模式下I2C数据传输速率最高是100Kbits/s,在快速模式下数据传输速率最高为400Kbits/s。
两种模式配置上没有区别只是数据传输速率不同来区分。
1.3 外部引脚
当相应的PADs被设置为I2C功能后,I2Cn_SCL 和 I2Cn_SDA 的输入需要通过设置 IOMUX里面的SION bit 来使能。
可查看对应寄存器了解:IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO02
1.4 时钟
I2C 时钟频率 = (PERCLK_ROOT frequency)/(division factor corresponding to IFDR),默认情况下,IPG_CLK_ROOT 和 PERCLK_ROOT被设置为49.5Mhz,选择从PLL2 的PFD2作为根时钟源,时钟路径计算如下(时钟路径可参考CCM章节):
PLL2 = 528 MHz
PLL2_PFD2 = 528 MHz * 18 / 24 = 396 MHz
IPG_CLK_ROOT = (PLL2_PFD2 / ahb_podf )/ ipg_podf = (396 MHz/4)/2 = 49.5MHz
PER_CLK_ROOT = IPG_CLK_ROOT/perclk_podf = 49.5 MHz/1 = 49.5 MHz
要设置I2C的波特率为100K, I2C分频值 = 49500000/100000 = 495,参考I2Cx_IFDR寄存器对应的表格可知 该寄存器设为0x37比较接近。
二、I2C 寄存器
2.1 I2C Address Register (I2Cx_IADR)
位域 | 名 | 读写 | 描述 |
---|---|---|---|
[15:8] | reserved | R | 总是为0 |
[7:1] | ADR | R/W | 作为I2C从设备时的地址;使用软件复位时,这个寄存器不受影响 |
[0] | reserved | R | 总是为0 |
2.2 I2C Frequency Divider Register (I2Cx_IFDR)
位域 | 名 | 读写 | 描述 |
---|---|---|---|
[15:6] | reserved | R | 总是为0 |
[5:0] | IC | R/W | I2C clock rate,用来设置SCL时钟,IC值对应的分频系数要查表。在数据传输过程中,IC值不能改变;但是在发出S信号之前ÿ |
这篇关于imx6ull i2c 控制器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!