本文主要是介绍imx6ull i2c 控制器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
备注:部分知识参考百问网手册
一、overview
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2tmR4ZoA-1632816362802)(E:\u-boot\pic\i2cblock.jpg)]](https://img-blog.csdnimg.cn/5091f603ac9d43dd9442ce89ee74f4a2.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAcmlzY19sdWNr,size_20,color_FFFFFF,t_70,g_se,x_16)
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
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VaSPmshP-1632816362804)(E:\u-boot\pic\I2C enternal signals.jpg)]](https://img-blog.csdnimg.cn/2352695fdb57454fa7d5b2f74c1fdb1d.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAcmlzY19sdWNr,size_20,color_FFFFFF,t_70,g_se,x_16)
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 控制器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!