详解S3C2440之I2C总线协议

1、I2C总线的概念

     I2C(Inter-Integrated Circuit,又称IIC)总线是一种由PHILIPS公司开发的串行总线,用于连接微控制器及其外围设备,它具有    如下特点:

(1)、只有两条总线线路:一条串行数据线(SDA),另一条是串行时钟线(SCL);

(2)、每个连接到总线的器件都可以使用软件根据它的唯一地址来识别;

(3)、传输数据的设备间是简单的主 / 从关系;

(4)、主机可以用作主机发送器或主机接收器;

(5)、它是一个真正的多主机总线,两个或多个主机同时发起数据传输时,可以通过冲突检测和仲裁来防止数据被破坏;

(6)、串行的8位双向数据传输,位速率在标准模式下可达100bit / s,在快速模式下可达400bit / s,在高速模式下可达3.4Mbit / s;

(7)、片上的滤波器可以增加抗干扰功能,保证数据的完整;

(8)、连接到同一总线上的IC数据只受到只能总线的最大电容400pF的限制;

2、先说明一些术语:

发送器: 发送数据到总线的器件;

接收器:从总线接收数据的器件;

主机:发起 / 停止数据传输、提供时钟信号的器件;

从机:被主机寻址的器件;

多主机:可以有多个主机试图去控制总线,但是不会破坏数据;

仲裁:当多个主机试图去控制总线时,通过仲裁可以使得只有一个主机获得总线控制权,并且它传输的数据不被破坏;

同步:多个器件同步时钟信号的过程。

3、I2C总线信号类型

I2C总线在传输数据过程中有3种类型信号:开始信号、结束信号和响应信号。

(1)开始信号(S):SCL为高电平,SDA由高电平向低电平跳变,开始传送数据。

(2)停止信号(P):SCL为高电平,SDA由低电平向高电平跳变,结束传送数据。

(3)响应信号(ACK):接收器在接收到8位数据后,接着在第9个时钟周期,拉低SDA电平。

详解S3C2440之I2C总线协议 - 23号的wj - 伟坚的博客
详解S3C2440之I2C总线协议 - 23号的wj - 伟坚的博客
SDA上传输的数据必须在SCL为高电平期间保持稳定,SDA上的数据只能在SCL为低电平期间变,如下图所示
详解S3C2440之I2C总线协议 - 23号的wj - 伟坚的博客
4、I2C总线的数据传输格式
      发送到SDA线上的每个字节必须是8位的,每次传输可以发送的字节数量不受限制。每个字节后必须紧跟一个响应位(ACK,0 or 1),首先传输的数据位是最高位(MSB),这与UART传输是刚好相反的。如果从机要完成一些其他功能后(如:一个内部中断服务程序)才能继续接收或者发送下一个字节,从机可以拉低SCL告诉主机我很忙,迫使主机进入等待状态。当从机准备好接收下一个数据并释放SCL后,数据继续传输。如果主机在传输数据期间也需要完成一些其他功能(如:一个内部中断服务程序),同样也是拉低SCL以占住总线。注意:当释放了IIC,SDA和SCL总线都应该保持高电平。
 
      启动一个传输时,主机先发出一个S信号,然后发出8位数据。其中前7位是从机的地址,第8位表示传输的方向(0表示写操作,1表示读操作)。被选中的从机发出响应信号,紧接着传输一系列字节及响应位。最后,主机发出P信号,结束本次传输。
另外注意:并非传输8位数据后,都会有ACK信号,以下3种例外。
 
(1)、当从机不能响应从机地址时,(如:它正在忙其他事情而无法响应I2C总线的操作,或者这个地址没有对应的从机),在第9个SCL周期内接收器的SDA线没有被拉低(即不会产生ACK信号)。这时,主机发出一个P信号终止传输或者重新发出一个S信号开始新的传输。
 
(2)、如果从机接收器在传输过程中不能接收更多的数据时,它也不会发出ACK信号,这样,主机就可以意识到这一点,从而发出一个P信号终止传输或者重新发出一个S信号开始新的传输。
 
(3)、主机接收器在接收到最后的一个字节,也不会发出ACK信号。于是,从机发送器释放SDA线,以允许主机发出P信号结束传输。
——————————————————————————————————————
下面主要介绍S3C2440D IIC总线控制寄存器。
1、S3C2440 的 I2C接口有4钟工作模式:主机发送器、主机接收器;从机发送器、从机接收器;
    首先我们来了解一下2C控制器的结构款图:
详解S3C2440之I2C总线协议 - 23号的wj - 伟坚的博客
      从上图我们可以知道,S3C2440提供4个寄存器来完成所有的 I2C 操作。发送数据时,SDA线上的数据,从 IICDS 寄存器发出;接收数据时,数据传入  IICDS 寄存器中。 IICADD 寄存器中保存了S3C2440 当作从机时的地址。IICCON、IICSTAT 两个寄存器用来控制或标识各种状态,比如 选择工作模式、发出S信号、P信号,决定是否发出ACK信号,检测是否收到ACK信号。下面我们就来详细看看这几个寄存器的用法:
 
(1)IICCON寄存器(Multi -master IIC -bus control)
        IICCON 寄存器用于控制是否发出ACK信号、设置发送器的时钟、开启 I2C中断,并标识中断是否发生。具体如下所示:
详解S3C2440之I2C总线协议 - 23号的wj - 伟坚的博客
使用 IICCON 寄存器时,有如下注意事项:
详解S3C2440之I2C总线协议 - 23号的wj - 伟坚的博客
 
(2)、 IICSTAT 寄存器 (Multi-master IIC -bus control/status)
         IICSTAT寄存器用于选择 I2C接口的工作模式,发出S信号、P信号,使能接收 / 发送功能,并标识各种状态,比如总线仲裁是否成功、作为从机时是否被寻址、是否接收到0地址、是否接收到ACK信号等。  具体如下图所示:
详解S3C2440之I2C总线协议 - 23号的wj - 伟坚的博客
 
(3)、IICADD 寄存器 (Multi -master IIC-bus address)
        用到  IICADD 寄存器的位 [7:1],表示从机地址。IICADD 寄存器在串行输出使能位 IICSTAT[4]为0时,才可以写入,但是读的时候,可以在任何时间都可以读出,不受 IICSTAT的限制。
详解S3C2440之I2C总线协议 - 23号的wj - 伟坚的博客
(4)、 IICDS 寄存器(Multi - master IIC -bus Tx / Rx data shift)
        用到 IICDS 寄存器的位 [7:0],其中保存的是要发送或者已经接收的数据。  IICDS 寄存器在串行输出使能位 IICSTAT[4]为1时,才可以写入;但是读的时候,可以在任何时间都可以读出,不受 IICSTAT 的限制。
 
(5)IICLC 寄存器(Multi -master  IIC -bus LC)详解S3C2440之I2C总线协议 - 23号的wj - 伟坚的博客
详解S3C2440之I2C总线协议 - 23号的wj - 伟坚的博客
————————————————————————————————————————
     到这里,我们就将S3C2440的 I2C 基本知识讲解完毕了。详解S3C2440之I2C总线协议 - 23号的wj - 伟坚的博客
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值