瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。
【公众号】迅为电子
【粉丝群】258811263(加群获取驱动文档+例程)
【视频观看】嵌入式学习之Linux驱动(第十五篇 I2C_全新升级)_基于RK3568
【购买链接】迅为RK3568开发板瑞芯微Linux安卓鸿蒙ARM核心板人工智能AI主板
第166章 初步认识I2C
166.1 I2C总线的由来
在一些复杂的电子设备内部电路中,通常需要使用大量的集成电路(IC)来实现各种功能,包括主控制器以及众多外围设备如PLL合成器、非易失性存储器、音频处理器、视频处理器和屏幕显示器等。这些IC器件之间需要相互传递数据信息,于是就需要使用大量的导线将它们连接起来,如下图所示(本图为电子数字积分计算器ENIAC I,来自维基百科):
这种众多IC器件之间的复杂互连,必然会导致芯片引脚数量庞大、PCB走线错综复杂,以及连接导线数量激增。这不仅会增加IC芯片的体积和功耗,同时也大大提高了制造成本,给IC设计制造厂商带来不利影响。同时,也给IC应用厂商和工程师们带来了极大的不便。
而为了解决这一问题,在1982年,荷兰著名电子公司飞利浦(Philips)公司发明了一种名为I2C(Inter-Integrated Circuit)的集成电路互连通信协议。该协议巧妙地利用仅两条线路就可以实现芯片之间的互连通信,大幅简化了硬件电路设计,提高了硬件资源的利用效率,给芯片设计制造商和应用商带来了极大的好处。
I2C协议的诞生,为复杂电子设备内部集成电路之间的互连通信提供了一种简单高效的解决方案,极大地促进了现代电子技术的发展。
166.2 I2C硬件连接
I2C总线在硬件上的连接非常简单,由SDA、SCL和上拉电阻构成,具体连接如下图所示:
在空闲状态下,SDA和SCL一般被上拉电阻拉高,保持高电平状态,在需要进行数据传输的时候,通过SCL和SDA的高低电平来产生I2C总线所需要的信号进行数据传递。
166.3 I2C基础知识
(1)总线拓扑结构:
I2C总线采用主从式架构,由一个主设备(Master)和一个或多个从设备(Slave)组成。主设备负责发起数据传输,从设备则响应主设备的请求。
(2)物理层接口:
I2C总线使用两根线路进行通信:
- SCL(Serial Clock Line)时钟线,由主设备提供时钟信号。
- SDA(Serial Data Line)数据线,用于双向传输数据。
这两根线通常需要上拉电阻来保持信号的高电平状态。
(3)通信协议:
I2C采用同步串行通信方式,主设备发起通信并提供时钟。主设备首先发送一个"启动"信号,然后发送从设备地址和数据传输方向(读或写)。从设备在收到自己的地址后,会发送应答信号,表示已准备好接收或发送数据。之后主设备和从设备就可以开始传输数据。通信结束时,主设备发送"停止"信号。
(4)时钟频率:
I2C总线支持多种通信速率,常见的有:
- 标准模式(Standard mode):100kbps
- 快速模式(Fast mode):400kbps
- 高速模式(High-speed mode):3.4Mbps
(5)寻址机制:
I2C使用7位地址空间,最多可寻址127个从设备。地址空间的前7位用于指定从设备,最后1位用于表示读/写方向。
每一个12C外设都会对应一个唯一的地址(这个地址可以从I2C外设器件的数据手册中得到),主机和从机之间的通信就是通过这个地址来确定主机要和哪个从机进行通信的。
(6)多主机支持:
I2C总线支持多个主设备共享同一总线,通过仲裁机制避免冲突。当多个主设备同时试图占用总线时,优先级最高的主设备将获得总线控制权。
(7)其他特点:
总线最大电容限制为 400pF。
以字节为单位传输数据。
存在硬件 I2C 和软件 I2C 两种实现方式。
166.4 iTOP-RK3568开发板上的I2C接口
在RK3568数据手册中可以找到关于I2C接口的介绍,具体如下所示:
·支持 6 路 I2C 接口,分别为 I2C0、I2C1、I2C2、I2C3、I2C4、I2C5
·支持 7 位和 10 位地址模式
·软件可编程时钟频率
·I2C 总线上的数据传输速率可达:
标准模式最高 100Kbit/s
快速模式最高 400Kbit/s
快速模式加最高 1Mbit/s
其中这里的6路I2C接口指的是硬件I2C,在SOC上有专用的硬件I2C电路,关于硬件I2C的介绍如下所示:
硬件 I2C:
(1)实现方式:通过专用的硬件 I2C 接口电路来实现 I2C 总线协议。
(2)优点:
CPU 占用低,I2C 总线由硬件电路自动完成。
传输速率高,可以达到 400kbit/s 或 3.4Mbit/s。
更加可靠和稳定,不易受外部干扰。
(3)缺点:
需要专用的硬件 I2C 接口电路支持,成本相对较高。
接口固定,不如软件 I2C 那么灵活。
(4)适用范围:适用于高速、大量数据传输的场合,如 LCD、EEPROM 等外设的连接。
而软件I2C指的是通过GPIO口模拟SCL和SDA信号线,在硬件I2C不够用的情况下,可以通过GPIO来模拟软件I2C,关于软件I2C的介绍如下所示:
软件 I2C:
(1)实现方式:通过软件模拟 I2C 总线协议,使用通用 I/O 口来模拟 SCL 和 SDA 信号线。
(2)优点:
灵活性强,可以在任何 I/O 口上实现 I2C 接口。
成本低,不需要额外的硬件支持。
(3)缺点:
CPU 占用较高,因为需要在软件中模拟 I2C 时序。
传输速率较低,受 CPU 性能限制,一般在 100kbit/s 左右。
(4)适用范围:适用于低速、少量数据传输的场合。
RK3568开发板上的I2C接口具体使用情况如下表所示:
I2C0、I2C1各自只有一组pinctrl,而I2C3、I2C4、I2C5各有两组pinctrl,但某一个硬件I2C只能由一组GPIO复用。在后续的实验中将以mipi显示屏的FT5X06触摸芯片为例,逐步讲解和填充I2C驱动相关的知识,MIPI触摸屏原理图如下所示:
涉及到触摸相关的引脚为23-26,每个引脚对应的功能匹配表格如下所示:
至此,iTOP-RK3568开发板上的I2C接口就介绍完成了,会在下个章节中讲解I2C上拉电阻相关知识。