首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ARM学习笔记--IIC总线接口(2)

ARM学习笔记--IIC总线接口(2)

5)、
        总线的寻址
             I2C总线协议有明确的规定:采用7位的寻址字节(寻址字节是起始信号后的第一个字节)。
         (1)寻址字节的位定义

             D7~D1位组成从机的地址。D0位是数据传送方向位,为“0”时表示主机向从机写数据,为“1”时表示主机由从机读数据。
        主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,如果相同,则认为自己正被主机寻址,根据R/位将自己确定为发送器或接收器。
        从机的地址由固定部分和可编程部分组成。在一个系统中可能希望接入多个相同的从机,从机地址中可编程部分决定了可接入总线该类器件的最大数目。如一个从机的7位寻址位有4位是固定位,3位是可编程位,这时仅能寻址8个同样的器件,即可以有8个同样的器件接入到该I2C总线系统中。
         (2)寻址字节中的特殊地址
           其中高四位为器件类型识别符(即固定地址编号0000和1111,不同的芯片类型有不同的定义,EEPROM一般应为1010),接着三位为片选,最后一位为读写位,当为1时为读操作,为0时为写操作。

           起始信号后的第一字节的8位为“0000 0000”时,称为通用呼叫地址。通用呼叫地址的用意在第二字节中加以说明。格式为:
   
           第二字节为 06H时,所有能响应通用呼叫地址的从机器件复位,并由硬件装入从机地址的可编程部分。能响应命令的从机器件复位时不拉低SDA和SCL线,以免堵塞总线。
            第二字节为 04H时,所有能响应通用呼叫地址并通过硬件来定义其可编程地址的从机器件将锁定地址中的可编程位,但不进行复位。
             如果第二字节的方向位B为“1”,则这两个字节命令称为硬件通用呼叫命令。
            在这第二字节的高7位说明自己的地址。接在总线上的智能器件,如单片机或其他微处理器能识别这个地址,并与之传送数据。硬件主器件作为从机使用时,也用这个地址作为从机地址。格式为:

             在系统中另一种选择可能是系统复位时硬件主机器件工作在从机接收器方式,这时由系统中的主机先告诉硬件主机器件数据应送往的从机器件地址,当硬件主机器件要发送数据时就可以直接向指定从机器件发送数据了。
        (3)起始字节
            起始字节是提供给没有I2C总线接口的单片机查询I2C总线时使用的特殊字节。
            不具备I2C总线接口的单片机,则必须通过软件不断地检测总线,以便及时地响应总线的请求。单片机的速度与硬件接口器件的速度就出现了较大的差别,为此,I2C总线上的数据传送要由一个较长的起始过程加以引导。  

              引导过程由起始信号、起始字节、应答位、重复起始信号(Sr)组成。
        请求访问总线的主机发出起始信号后,发送起始字节(0000 0001),另一个单片机可以用一个比较低的速率采样SDA线,直到检测到起始字节中的7个“0”中的一个为止。在检测到SDA线上的高电平后,单片机就可以用较高的采样速率,以便寻找作为同步信号使用的第二个起始信号Sr。
        在起始信号后的应答时钟脉冲仅仅是为了和总线所使用的格式一致,并不要求器件在这个脉冲期间作应答。  

        2  80C51单片机I2C串行总线器件的接口
        2.1 总线数据传送的模拟  
           主机可以采用不带I2C总线接口的单片机,如80C51、AT89C2051等单片机,利用软件实现I2C总线的数据传送,即软件与硬件结合的信号模拟。
        一、典型信号模拟
            为了保证数据传送的可靠性,标准的I2C总线的数据传送有严格的时序要求。I2C总线的起始信号、终止信号、发送“0”及发送“1”的模拟时序 :
               

        二、典型信号模拟子程序
        (1)起始信号
        Void T2CStart(void)
        {
       
SomeNop(  );
       
SCL = 1;
       
SomeNop(  );
       
SDA = 0;
       
SomeNop(  );
       
SCL = 0;
       
SomeNop(  );
        }
        (2)终止信号
        void I2cStop(void)
        {
       
SDA = 0;
       
SomeNop(  );
       
SCL = 1;
       
SomeNop(  );
       
SDA = 1;
       
SomeNop(  );
       
SCL = 0;
        }
        2.2 I2C总线器件的扩展
        一、扩展电路
          
        二、串行E2PROM的扩展
          (1)串行E2PROM典型产品
        ATMEL公司的AT24C系列:  
           AT24C01:128字节(128×8位);
           AT24C02:256字节(256×8位);
           AT24C04:512字节(512×8位)AT24C08:1K字节(1K×8位);
           AT24C16:2K字节(2K×8位);
         (2)写入过程
            AT24C系列E2PROM芯片地址的固定部分为1010,A2、A1、A0引脚接高、低电平后得到确定的3位编码。形成的7位编码即为该器件的地址码。
            单片机进行写操作时,首先发送该器件的7位地址码和写方向位“0”(共8位,即一个字节),发送完后释放SDA线并在SCL线上产生第9个时钟信号。被选中的存储器器件在确认是自己的地址后,在SDA线上产生一个应答信号作为相应,单片机收到应答后就可以传送数据了。
            传送数据时,单片机首先发送一个字节的被写入器件的存储区的首地址,收到存储器器件的应答后,单片机就逐个发送各数据字节,但每发送一个字节后都要等待应答。
            AT24C系列器件片内地址在接收到每一个数据字节地址后自动加1,在芯片的“一次装载字节数”(不同芯片字节数不同)限度内,只需输入首地址。装载字节数超过芯片的“一次装载字节数”时,数据地址将“上卷”,前面的数据将被覆盖。
            当要写入的数据传送完后,单片机应发出终止信号以结束写入操作。写入n个字节的数据格式 :

        (3)读出过程
             单片机先发送该器件的7位地址码和写方向位“0”(“伪写”),发送完后释放SDA线并在SCL线上产生第9个时钟信号。被选中的存储器器件在确认是自己的地址后,在SDA线上产生一个应答信号作为相应。
             然后,再发一个字节的要读出器件的存储区的首地址,收到应答后,单片机要重复一次起始信号并发出器件地址和读方向位(“1”),收到器件应答后就可以读出数据字节,每读出一个字节,单片机都要回复应答信号。当最后一个字节数据读完后,单片机应返回以“非应答”(高电平),并发出终止信号以结束读出操作。



3、S3C2440 IIC总线控制器寄存器介绍
        S3C2440的IIC接口有4种工作方式:主机发送器、主机接收器、从机发送器、从机接收器
       
        S3C2440使用4个寄存器来完成所有IIC的操作
        1)IICCON寄存器
                IICCON寄存器用于控制是否发出ACK信号、设置发送器的时钟、开启IIC中断,并标识中断是否发生
       
                使用IICCON寄存器时,应注意
                ①发送模式的时钟频率由位[6]、位[3:0]联合决定。另外,当IICCON[6]=0时,IICCON[3:0]不能取0或1
                ②IIC中断在以下三种情况下发生:当发出地址信息或接收到一个从机地址并且吻合时,当总线仲裁失败时,当发送/接收完一个字节的数据(包括相应位)时
                ③基于SDA、SCL线上时间特性的考虑,要发送数据时,先将数据写入IICDS寄存器,然后再清除中断
                ④如果IICCON[5]=0,IICCON[4]将不能正常工作。所以,即使不使用IIC中断,也要讲IICCON[5]设为1
        2)IICSTAT寄存器
                 IICSTAT寄存器用于选择IIC接口的工作模式,发出S信号、P信号,使能接收/发送功能,并标识各种状态,比如总线仲裁是否成功、作为从机时是否被寻址、是否接收到0地址、是否接收到ACK信号
       
        3)IICADD寄存器
                IICADD寄存器[7:1]表示从机地址,IICADD寄存器在串行输出使能位IICSTAT[4]为0时,才可以写入,在任何时候都可以读取
        4)IICDS寄存器
                IICDS寄存器[7:0],保存要发送或已经接收到的数据,IICDS寄存器在串行输出使能位IICSTAT[4]为1时,才可以写入,在任何时候都可以读取
继承事业,薪火相传
返回列表