博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
II2C协议
阅读量:3657 次
发布时间:2019-05-21

本文共 1574 字,大约阅读时间需要 5 分钟。

转自

开发板: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信号开始读流程
,也就是我为什么加了一道红线的原因。
你可能感兴趣的文章
kafka搭建与使用
查看>>
docke学习内容之二
查看>>
SpringDataJpa学习一
查看>>
springboot中的日志框架
查看>>
springboot的MVC自动配置
查看>>
Springboot中对mvc进行扩展
查看>>
一文读懂HashMap
查看>>
ConcurrentModifcationException详解
查看>>
史上最全的PHP正则表达式
查看>>
理解Mysql prepare预处理语句
查看>>
预编译语句(Prepared Statements)介绍,以MySQL为例
查看>>
单利模式
查看>>
gdal学习笔记1-读取数据信息
查看>>
python关于print中数据传输的用法
查看>>
sublime text3的快捷键总结
查看>>
gdal学习笔记2-数据读写
查看>>
python中动态生成变量名及赋值
查看>>
python识别数据结构
查看>>
python bisect序列二分法详解
查看>>
python学习笔记字典排序,
查看>>