17.1 IIC接口介绍
17.1.1 IIC 总线的概念
I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。
I2C总线特点可以概括如下:
(1)在硬件上,12C总线只需要一根数据线和一根时钟线两根线,总线接口已经集成在芯片内部,不需要特殊的接口电路,而且片上接口电路的滤波器可以滤去总线数据上的毛刺.因此I2C总线简化了硬件电路PCB布线,降低了系统成本,提高了系统可靠性。因为12C芯片除了这两根线和少量中断线,与系统再没有连接的线,用户常用IC可以很容易形成标准化和模块化,便于重复利用。
(2)I2C总线是一个真正的多主机总线,如果两个或多个主机同时初始化数据传输,可以通过冲突检测和仲裁防止数据破坏,每个连接到总线上的器件都有唯一的地址,任何器件既可以作为主机也可以作为从机,但同一时刻只允许有一个主机。数据传输和地址设定由软件设定,非常灵活。总线上的器件增加和删除不影响其他器件正常工作。
(3)I2C总线可以通过外部连线进行在线检测,便于系统故障诊断和调试,故障可以立即被寻址,软件也利于标准化和模块化,缩短开发时问。
(4)连接到相同总线上的IC数量只受总线最大电容的限制,串行的8位双向数据传输位速率在标准模式下可达100Kbit/s,快速模式下可达400Kbit/s,高速模式下可达3.4Mbit/s。
(5)总线具有极低的电流消耗.抗高噪声干扰,增加总线驱动器可以使总线电容扩大10倍,传输距离达到15m;兼容不同电压等级的器件,工作温度范围宽。
17.1.2 IIC 总线术语
术语 |
描述 |
发送器 |
发送数据到总线的器件 |
接收器 |
从总线接收数据的器件 |
主机 |
初始化发送产生时钟信号和终止发送的器件 |
从机 |
被主机寻址的器件 |
多主机 |
同时有多于一个主机尝试控制总线但不破坏报文 |
仲裁 |
是一个在有多个主机同时尝试控制总线但只允许其中一个控制总线并使报文不被破坏的过程 |
同步 |
两个或多个器件同步时钟信号的过程 |
8.1.3 IIC 总线信号类型
IIC 总线信号类型:IIC 总线在传输过程中共有3种类型信号:开始信号、结束信号和响应信号
开始信号(S):SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据
结束信号(P):SCL 为低电平时,SDA 由低电平向高电平跳变,结束传送数据
响应信号(ACK):接收器在接收到 8 位数据后,在第9个时钟周期,拉低 SDA 电平
SDA 上传输的数据必须在 SCL 为高电平期间保持稳定,SDA 上的数据只能在 SCL 为低电平期间变化。如下,IIC 总线的位传输图:
17.1.3 IIC总线的数据传输格式
发送到 SDA 线上的每个字节必须是 8 位的,每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位。
首先传输的是数据的最高位(MSB)。如果从机要完成一些其他功能(例如一个内部中断服务程序)后才能继续接收或发送下一个字节,从机可以拉低 SCL 迫使主机进入等待状态。
当从机准备好接收下一个数据并释放 SCL 后,数据传输继续。如果主机在传输数据期间也需要完成一些其他功能(例如一个内部中断服务程序)也可以拉低 SCL 以占住总线。
启动一个传输时,主机先发送 S 信号,然后发出 8 位数据。这8位数据的前 7 位为从机的地址,第 8 位表示传输方向(0 表示写操作,1 表示读操作)。被选中的从机发出响应信号。紧接着传输一系列字节及其响应位。
最后,主机发出 P 信号结束本次传输。
主机——发送器用10位地址寻址从机——接收器
主机——接收器用 10 位地址寻址从机——发送器
组合格式 主机用 10 位地址寻址从机 然后发送数据到这个从机并向这个从机读数据
组合格式 主机发送数据到两个都有 10 位地址的从机
组合格式 主机发送数据到两个从机 一个用 7 位地址 一个用 10 位地址
17.2 S3C2440 I2C 总线控制器
IIC 接口有4种工作模式:主机发送器、主机接收器、从机发送器和从机接收器
从图种可以知道,S3C2440提供4个寄存器来完成 IIC 的操作。SDA 线上的数据从 IICDS 寄存器发出,或传入 IICDS;IICADD 寄存器中保存 S3C2440 当作从机时的地址;IICCON、IICSTAT 两个寄存器用来控制或标识各种状态,比如选择工作模式,发出 S 信号、P信号,决定是否发出 ACK 信号,检测是否收到 ACK 信号。
寄存器的用法见芯片手册
8.3 程序
JZ2440 没有使用 IIC 接口的器件