I2C通讯接口AT24C02存储器理论与实现-江科协学习记录笔记

本文介绍了使用STC89C52单片机和AT24C02存储器模块通过I2C接口进行通信的过程,包括I2C总线的概念、电路规范、数据发送与接收、时序结构以及如何精确发送至特定从机和寄存器。作者以通俗易懂的方式阐述了I2C协议的应用和实现。
摘要由CSDN通过智能技术生成

本文利用单片机STC89C52的AT24C02存储器模块,独立按键,LCD显示屏模块学习I2C接口协议。从江科协学习并记录下自己对I2C总线的理解。看到很多没见过的词语一脸懵逼,加入一点白话希望能帮助理解。

        本代码目的在于练手及分享和复盘,作者水平有限,偏向入门级;如文中有错误以及更高效率的实现方法,欢迎讨论。


        1,I2C总线概述

        I2C总线(Inter IC BUS)是由Philips公司开发的一种通用数据总线
        两根通信线:SCL(Serial Clock)、SDA(Serial Data)
        同步、半双工,带数据应答
        通用的I2C总线,可以使各种设备的通信标准统一,对于厂家来说,使用成熟的方案可以缩短芯片设计周期、提高稳定性,对于应用者来说,使用通用的通信协议可以避免学习各种各样的自定义协议,降低了学习和应用的难度

        I2C电路规范

        所有I2C设备的SCL连在一起,SDA连在一起
        设备的SCL和SDA均要配置成开漏输出模式
        SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右
        开漏输出和上拉电阻的共同作用实现了“线与”的功能,此设计主要是为了解决多机通信互相干扰的问题

由上图可以大概了解到中央处理器通过俩跟通讯线,SCL、SDA就能控制数据输入和输出。可以由一个主机同时控制多个从机(从机指的是其他被CPU相连的部件),CPU就是主机。再在俩条通讯线各接上一个上拉电阻,他们所构成的通讯线路协议就是I2C总线。

那么中央处理器是如何通过这俩跟线对多个从机进行数据输入和输出的呢?

从机又是如何接收主机发送过来的数据的呢?

首先是学会如何发送数据,再学如何发送到从机

I2C时序结构

起始条件:SCL高电平期间,SDA从高电平切换到低电平
终止条件:SCL高电平期间,SDA从低电平切换到高电平

发送一个bit

SCL低电平期间,主机将数据位依次放到SDA线上(高位在前),然后拉高SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节

接收一个bit

SCL低电平期间,从机将数据位依次放到SDA线上(高位在前),然后拉高SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)关于释放SDA的解释后续讲

发送/接收应答:主机在发送数据之后,需要从机返回应答给主机,主机才能知道发送对从机位置。

发送应答:在接收完一个字节之后,主机在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答
接收应答:在发送完一个字节之后,主机在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)

        相当于名字叫主机从机的俩个人玩着一个游戏,俩个人手里必须紧紧握着一条叫做SDA的线,他们用往上往下的动作告诉对方自己要表达的信息。

        这个游戏有一个规则约定,在时钟信号SCL置于1时是他们的有效交流时间,相当于一个闹钟,约定了这个时间双方就能知道对方什么时候想要交流信息;当SDA线不置于0时,自动返回1;同时主机的力气比从机大。

        即当时钟信号SCL是1时,主机(从机)“举起”SDA线为发出信号逻辑“1”;主机(从机)“放下”SDA线为发出信号逻辑“0”。

        因为主机力气比从机大,因此主机想要发送逻辑0时,只需要将SDA往下拉,从机即可从SDA线知道时逻辑0,发送逻辑1放开手即可;然而因为力气比主机小,从机想要发送给主机逻辑0,必须先让主机失去SDA的控制权,即释放SDA(SDA置1),从而让从机获得SDA的控制权,由从机控制SDA逻辑0和1。主机从SDA线能获得从机发来的信息。因此SDA也称为数据线。

 知道了如何发送一个字节的数据,主机连接着很多的从机

那么如何有效精准地发送到精确的从机和寄存器字地址上呢

协议定义发送到某一个从机的数据的数据帧的规范

由图以及结合之前学到的知识就可以知道,发送的顺序,如何发送一窜数据给从机;发送START-发送一个字节(从机地址+读/写模式)-主机接收应答(从从机发送过来的应答)(确定没发送错从机)-发送一个字节(字地址)-主机接收应答(从寄存器发送过来的应答)-发送一个字节(想要发送的数据,只有一个byte)-主机接收应答-发送STOP信号

通过I2C接口通讯,结合AT24C02,可以放入256个字节的数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值