2、51单片机——I2C 总线

本文详细介绍了51单片机中I2C总线的工作原理,包括I2C的电路规范、时序结构和数据帧。同时,结合AT24C02存储器,讲解了存储器分类、数据帧格式以及如何通过I2C进行读写操作。内容基于郭天祥C51 TX-1C开发板和江科大自化协的教学视频。
摘要由CSDN通过智能技术生成

本人使用的51开发板为 郭天祥C51 TX-1C开发板 ;
本笔记根据B站up主:江科大自化协的教学视频 整理得到
参照博客 https://zouchanglin.cn/2458978170.html

I2C 总线


I2C 是Inter-Integrated Circuit 的简称,I2C 是由 Philips 公司开发的一种通用数据总线,其中包括两根通信线:串行数据线:SDA,及串行时钟线:SCL。I2C 通信的主要特征是同步、半双工,并且带数据应答。通用的 I2C 总线,可以使各种设备的通信标准统一,对于厂家来说,使用成熟的方案可以缩短芯片设计周期、提高稳定性,对于应用者来说,使用通用的通信协议可以避免学习各种各样的自定义协议,降低了学习和应用的难度。

I2C主要应用场景就是SOC和周边外设间的通信(如:EEPROM,电容触摸芯片,各种Sensor等)。
在这里插入图片描述

I2C 电路规范


所有 I2C 设备的 SCL 连在一起,SDA 连在一起;设备的 SCL 和 SDA 均要配置成开漏输出模式;SCL 和 SDA 各添加一个上拉电阻,阻值一般为 4.7KΩ 左右;开漏输出和上拉电阻的共同作用实现了“线与”的功能,此设计主要是为了解决多机通信互相干扰的问题。下面是 I2C 总线挂接多个设备示意图:
在这里插入图片描述
I2C 总线内部结构图:
在这里插入图片描述
I2C 使用一个 7bit 的设备地址,一组总线最多和 112 个节点通信。最大通信数量受限于地址空间及 400pF 的总线电容。常见的 I2C 总线以传输速率的不同分为不同的模式:标准模式(100Kbit/s)、低速模式(10Kbit/s)、快速模式(400Kbit/s)、高速模式(3.4Mbit/s),时钟频率可以被下降到零,即暂停通信。

该总线是一种多主控总线,即可以在总线上放置多个主设备节点,在停止位(P)发出后,即通讯结束后,主设备节点可以成为从设备节点。主设备节点 就是产生时钟并发起通信的设备节点;从设备节点 就是接收时钟并响应主设备节点寻址的设备节点。

总的来说 I2C 通信的主要特点如下:

1、I2C 通信双方地位不对等,通信由主设备发起,并主导传输过程,从设备按 I2C 协议接收主设备发送的数据,并及时给出响应。

2、主设备、从设备由通信双方决定,既能当主设备,也能当从设备(需要软件进行配置)。

3、主设备负责调度总线,决定某一时刻和哪个从设备通信。在同一时刻,I2C 总线上只能有一对主设备、从设备通信。

4、每个 I2C 从设备在 I2C 总线通讯中有一个 I2C 从设备地址,该地址具有唯一性,是从设备的固有属性,通信中主设备通过从设备地址来找到从设备,可以理解为网卡Mac地址。

I2C 时序结构


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

终止条件:SCL 高电平期间,SDA 从低电平切换到高电平。
在这里插入图片描述

发送一个字节:SCL 低电平期间,主机将数据位依次放到 SDA 线上(高位在前),然后拉高 SCL,从机将在 SCL 高电平期间读取数据位,所以 SCL 高电平期间 SDA 不允许有数据变化,依次循环上述过程 8 次,即可发送一个字节。
在这里插入图片描述
接收一个字节:SCL 低电平期间,从机将数据位依次放到 SDA 线上(高位在前),然后拉高 SCL,主机将在 SCL 高电平期间读取数据位,所以 SCL 高电平期间 SDA 不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放 SDA)。
在这里插入图片描述
发送应答:在接收完一个字节之后,主机在下一个时钟发送一位数据,数据 0 表示应答,数据 1 表示非应答

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

I2C 数据帧


发送一帧数据,解决的问题是向谁发什么:
在这里插入图片描述
接收一帧数据,向谁收什么:
在这里插入图片描述
先发送再接收数据帧(复合格式),解决的问题是向谁收指定的什么:
在这里插入图片描述

C51 的 I2C 操作封装

// I2C.h

#ifndef _I2C_H_
#define _I2C_H_

void I2C_Start(void);
void I2C_Stop(void);
void I2C_SendByte(unsigned char Byte);
unsign
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值