II2C协议

转自http://blog.csdn.net/lizuobin2/article/details/51713637


开发板:mini2440

内核  :linux2.6.32.2

参考  :韦东山毕业班I2C视频教程


1、i2c协议简要分析

    i2c中线是一种由 PHILIPS 公司开发的串行总线,用于连接微控制器及其外围设备,它具有以下特点。
        1、只有两条总线线路:一条串行数据线SDA,一条串行时钟线SCL
        2、每个连接到总线的器件都可以使用软件根据它的唯一的地址来确定。
        3、传输数据的设备之间是简单的主从关系
        4、主机可以用作主机发送器或者主机接收器。
        5、它是一个真正的
多主机总线 ,两个或多个主机同时发起数据传输时,可以通过 冲突检测和仲裁 来防止数据被破坏。
        6、
串行的8位双向传输 ,位速在标准模式下可达 100kbit/s,在快速模式下可达400kbit/s,在高速模式下可待3.4Mbit/s。
        7、片上的滤波器可以增加抗干扰能力,保证数据的完整性。

        8、连接到同一总线上的IC数量只受到总线的最大电容400Pf的限制。


    如上图所示,启动一个传输时,主机先发送一个S信号,然后发送8位数据。这8位数据的前7位为从机地址第八位表示传输的方向(0表示写,1表示读),如果有数据则继续发送,最后发出P信号停止。


信号类型:

    注意:正常数据传输时, SDA 在 SCL 为低电平时改变,在 SCL 为高电平时保持稳定。
    开始信号 S 信号:
        SCL 为高电平时,SDA由高电平向低电平跳变,开始传送数据。
    结束信号 P 信号:
        SCL 为高电平时,SDA由低电平向高电平跳变,结束传送数据。
    响应信号 ACK:
        接收器在接收到8位数据后,在第9个时钟周期,拉低 SDA 电平
    注意:在第9个时钟周期,发送器保持SDA为高,如果有ACK,那么第9个时钟周期SDA为低电平,如果没有为高电平,发送器根据电平高低分辨是否有ACK信号。
          如果使能了IIC中断,发送完8bit数据后,主机自动进入中断处理函数,此时SCL被发送器拉低,让接收器被迫等待。恢复传输只需要清除中断挂起。



2、 s3c2440 读写流程


    1、设置传输模式 IICSTAT[7-6],我们做实验与AT24C08通信时,2440作为主机,因此只用到主机发模式和主机收模式。
    2、写入从机地址到 IICDS[7-1],
此时IICDS[7-1]位表示从机地址 ,第0位不关心。如 AT24C08 为 0xA0(最低位写0了,发送到数据线上的7位地址的后边以为才表示收发,这里虽然写0 但并不是根据这里的0来真正发送的)。



    3、写 0xF0(写) 或 0xB0(读)到 IICSTAT 寄存器, 高两位表示 传输模式前边设置过了,设置IICSTAT[5-4] 为 11,使能传输,发送S信号。
    4、IIC控制器自动将第2步中设置的 IICDS[7-1]
再根据 传输模式 补充 IICDS[0]位,发送出去。
    5、进入第9个时钟周期,此时,从机决定是否发出ACK信号,主机进入中断,判断是否收到ACK信号,以及是否继续传输。
    继续发送:
        1、将数据写入 IICDS 
        2、清除中断挂起,SCL时钟恢复,IICDS的数据被自动发送到 SDA 线上,回到第5步。
    停止发送:
        1、写 0xD0(写) 和 0x90(读) 到 IICATAT ,IICATAT[7-6]还是表示的传输模式,IICATAT[5-4] == 0 1,
发送停止信号
        2、清除中断挂起,SCL时钟恢复,发出停止信号
        3、延时,等待停止信号发出



3、 AT24C08 读写分析

    1、写过程


    写过程与2440芯片的里的写流程相一致,按照流程写就OK

    2、读过程


    读过程是由2440芯片里的一个写流程加一个读流程组合而成,其中 写流程结束没有发出P信号,而是直接发出了S信号开始读流程 ,也就是我为什么加了一道红线的原因。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值