目录

1.概述

2.I2C总线通信协议

3.I2C总线的数据传送格式

3.1 单字节数据传送格式

3.2 多字节数据传送格式

4.I2C总线存储器24C02(E2PROM)

4.1  外形与引脚功能说明

4.2 器件地址的设置

4.3 读/写操作

4.3.1 写操作

4.3.2 读操作


1.概述

I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行通信总线,是微电子通信控制领域广泛采用的一种总线标准。

 I2C总线可以将单片机与其他具有I2C总线通信接口的外围设备连接起来,如图1所示,通过串行数据(SDA)线和串行时钟(SCL)线与连接到该双线的器件传递信息。每个I2C器件都有一个唯一的识别地址(I2C总线支持7位和10位地址),而且都可以作为一个发送器或接收器(由器件的功能决定,比如 LCD 驱动器只能作为接收器,而存储器则既可以作为接收器接收数据,也可以用作发送器发送数据)。I2C器件在执行数据传输时也可以看作是主机或从机,主机是初始化总线数据传输并产生允许传输时钟信号的器件,此时任何被寻址的其他I2C器件都被认为是从机。

图1 单片机通过I2C总线连接多个I2C器件

I2C总线有标准(100kbit/s),快速(400kbit/s)和高速(3.4Mbit/s)三种数据传输速度模式,支持高速模式的可以向下支持低速模式。I2C总线连接的I2C器件数量仅受到总线的最大电容400pF限制,总线连接的器件越多,连线越长,分布电容越大。

在图1中,如果单片机需要往I2C器件3写入数据,会先从SDA数据线送出I2C器件3的地址,挂在总线上众多的器件只有I2C器件3与总线接通,单片机再将数据从SDA数据线送出,该数据则被I2C器件3接收。这里的单片机是主机兼发送器,I2C器件3及其他器件均为从机,I2C器件3为接收器。

2.I2C总线通信协议

通信协议是通信各方必须遵守的规则,否则通信无法进行,在编写通信程序时需要了解相应的通信协议。

I2C总线通信协议主要内容有:

总线空闲SCL和SDA线均为高电平

开始信号在SCL为高电平时,SDA出现下降沿,该下降沿即为开始信号

数据传送开始信号出现后,SCL线为高电平时从SDA线读取的电平为数据;SCL线为高电平时,SDA线的电平不允许变化,只有SCL为低电平时才可以改变SDA的电平;SDA线传送数据时,从高位到低位逐位进行,一个SCL脉冲高电平对应1位数据。

停止信号SCL为高电平时,SDA出现上升沿,该上升沿为停止信号,停止信号过后,总线被认为空闲(SCL、SDA均为高电平)。

3.I2C总线的数据传送格式

I2C 总线可以一次传送单字节数据,也可以一次传送多字节数据,不管是传送单字节还是多字节数据,都要在满足协议的前提下进行。

3.1 单字节数据传送格式

I2C总线的单字节数据传送格式如图2所示,传送单字节数据的格式为“开始信号传送的数据(从高位到低位)-应答(ACK)信号-停止信号”

图2 I2C总线的单字节数据传送格式

在传送数据前,SCL、SDA线均为高电平(总线空闲),在需要传送数据时,主机让SDA线由高电平变为低电平,产生一个下降沿(开始信号)去从机,从机准备接收数据,然后主机从 SCL 线逐个输出时钟脉冲信号,同时从SDA线逐位(从高位到低位)输出数据,只有SCL脉冲高电平到从机时,从机才读取 SDA线的电平值(0或1),并将其作为一位数据值,8位数据传送结束后,接收方将SDA线电平拉低,该低电平作为ACK应答信号由SDA线送给发送方,ACK信号之后可以继续传送下一个字节数据,若只传送单字节数据,在SCL线为高电平时,SDA 线由低电平变为高电平形成一个上升沿,该上升沿即为停止信号,本次数据传送结束。

3.2 多字节数据传送格式

为了提高工作效率,I2C总线往往需要一次传送多个字节。图3是典型的I2C总线多字节数据传送格式,该多字节数据的格式为“开始信号-第1个字节数据(7位从机地址+1位读/写设定值)-应答信号-第2个字节数据(8位从机内部单元地址)-应答信号-第3个字节数据(8位数据)-应答信号(或停止应答信号)-停止信号”。

图3 I2C总线的多字节数据传送格式

图3传送了三个字节数据,第1个字节数据为从机的地址和数据读写设定值,由于I2C总线挂接很多从机,传送从机地址用于选中指定的从机进行通信,读写设定值用于确定数据传输方向(是往从机写入数据还是由从机读出数据),第2个字节数据为从机内部单元待读写的单元地址(若传送的数据很多,则为起始单元的地址,数据从起始单元依次读写),第3个字节为8位数据,写入第1、2字节指定的从机单元中。在传送多字节数据时,每传送完一个字节数据,接收方需要往发送方传送一个ACK信号(接收方将SDA线电平拉低),若一个字节传送结束后接收方未向发送方返回 ACK信号,发送方认为返回的是NACK(停止应答)信号,则停止继续传送数据。

4.I2C总线存储器24C02(E2PROM)

24Cxx系列芯片是采用了I2C总线标准的常用E2PROM(电可擦写只读存储器)存储芯片,其中24C02最为常用,24C02存储容量为256×8bit(24C01、24C04、24C08、24C16分别为128×8bit、512×8bit、1024×8bit、2048×8bit),24C02芯片的每个字节可重复擦写100万次,数据保存期大于100年。

4.1  外形与引脚功能说明

24C02的外形与引脚功能如图4所示,引脚功能说明见表1。

图4 24C02的外形与引脚功能

表1 24C02引脚功能说明

4.2 器件地址的设置

当24C02和其他器件挂接在I2C总线时,为了区分它们,需要给每个器件设定一个地址,该地址即为器件地址,挂在同一I2C总线上的器件地址不能相同。24C02有A0、A1、A2三个地址引脚,可以设置8个不同的器件地址,24C02的器件地址为7位,高4位固定为1010,低3位由A0、A1、A2引脚电平值决定。24C02的器件地址设置,如图5所示,当A0、A1、A2引脚都接地时,器件地址设为1010000,当A0、A2引脚接地,A1引脚接电源时,器件地址设为1010010。

图5 24C02器件地址的设置

4.3 读/写操作

4.3.1 写操作

24C02的写操作分为单字节写操作页写操作

(1)单字节写操作

24C02单字节写操作的数据格式如图6所示。主器件发送开始信号后,再发送7位器件地址和1位读写信号(写操作时读写信号为0),被器件地址选中的24C02往主器件发送一个ACK信号,主器件接着发送8位字节地址给24C02选中其内部相应存储单元,24C02往主器件发送一个ACK信号,主器件马上发送一个字节数据给24C02,24C02往主器件发送一个 ACK 信号,当主器件发出停止信号后,24C02开始将主器件发送来的数据写入字节地址选中的存储单元。

图6 24C02单字节写操作的数据格式

        (2)页写操作

页写操作即多字节写操作,24C02可根据需要一次写入2~16个字节数据。24C02页写操作的数据格式(一次写入16个字节数据时)如图7所示。

图7 24C02页写操作的数据格式(一次写入16个字节数据时)

主器件发送开始信号后,再发送7位器件地址和读写信号,被器件地址选中的24C02往主器件发送一个ACK信号,主器件接着发送第1个字节数据的地址给24C02,24C02往主器件发送一个ACK信号,主器件发送第1个字节数据给24C02,24C02往主器件发送一个ACK信号,主器件发送第2个字节数据给24C02,24C02往主器件发送一个ACK信号,当主器件将第16个字节数据发送给24C02,24C02往主器件发送一个ACK信号,待主器件发出停止信号后,24C02开始将主器件发送来的16个字节数据依次写入以第一个字节数据地址为起始地址的连续16个存储单元中。如果在第16个字节数据之后还继续发送第17个字节数据,第17个字节数据将覆盖第1个字节数据写入的第1个字节地址,后续发送字节数据将依次覆盖先前的字节数据。

4.3.2 读操作

24C02的读操作分为立即地址读操作选择读操作连续读操作

(1)立即地址读操作

立即地址读操作是指不发送字节地址而是直接读取上次操作地址 N 之后的地址 N+1的数据,24C02的N值为0~255(00H~FFH),如果上次操作地址N=255,立即地址读操作会跳转读取地址0的数据。24C02立即地址读操作的数据格式如图8所示。

图8 24C02单字节写操作的数据格式

主器件发送开始信号后,再发送7位器件地址和读写信号(读操作时读写位为1),被器件地址选中的24C02首先往主器件发送一个ACK信号,再往主器件发送一个字节数据,主器件无须发出ACK信号应答,但要发出一个停止信号给24C02。

(2)选择读操作

选择读操作是指读取任意地址单元的字节数据。24C02选择读操作的数据格式如图9所示。

图9 24C02选择读操作的数据格式

主器件先发送开始信号和7位器件地址,再发一个低电平读写信号执行伪写操作(以便将后续的n单元字节地址发送给24C02),被器件地址选中的24C02往主器件发送一个ACK信号,主器件接着发送n单元字节地址,从器件回复一个ACK信号,主器件又发送开始信号和7位器件地址,再发一个高电平读写信号执行读操作,从器件回复一个ACK信号,并将n单元的字节数据发送给主器件,主器件无须发出ACK信号应答,但要发出一个停止信号给24C02。

 (3)连续读操作

连续读操作是指从指定单元开始一次连续读取多个字节数据。在进行立即地址读操作或选择读操作时,如果24C02每发送完一个字节数据后,主器件都回复一个ACK信号,24C02就会连续不断将后续单元的数据发送给主器件,直到主器件不回复 ACK 信号,才停止数据的发送,主器件发出停止信号后则结束本次连续读操作。连续读操作由立即地址读操作或选择读操作启动。图10(a)是由立即地址读操作启动的连续读的数据格式,24C02内部有256个字节存储单元,如果24C02将第256个字节单元(地址为FFH)的数据传送给主器件后,主器件继续回复ACK信号,24C02就会从头开始将第1个存储单元(地址为00H)的数据传送给主器件。图10(b)为由选择读操作启动的连续读的数据格式。

图10 24C02连续读操作的数据格式

51单片机——I2C总线相关推荐

  1. 51单片机——I2C总线EEPROM

    我们可以把数据保存在EEPROM中,这样断电数据也不会丢失. 常用的串行总线协议: 目前常用的微机与外设之间进行数据传输的串行总线主要有I2C总线.SPI总线和SCI总线. I2C总线:以同步串行2线 ...

  2. 单片机I2C总线AT24C02读写、扩展keil工程多个实例及Proteus仿真

    1.对I2C总线上挂接多个AT24C02的读写操作源代码如下: //对I2C总线上的2个AT24C02(U2和U3)的读写/*I2C总线系统中器件地址包括固定部分和可编程部分. 可编程部分必须根据A0 ...

  3. 51单片机IIC总线编程

    #include<reg52.h> #define uchar unsigned char sbit sda=P2^0; sbit scl=P2^1;//用单片机的两个I/O口模拟I2C接 ...

  4. 学习51单片机外部总线扩展并口芯片8255

    1.8255A 8255A是一可编程的并行IO接口扩展芯片,可以使单片机扩展出三个8位并行IO口. 扩展IO口有多种模式,可以实现方向控制.询问.应答控制多种功能. 3个可编程的并行I/O口:PA口. ...

  5. linux i2c 多字节读写,基于51单片机i2c多字节的读写

    描述 使用Keil的编译环境下载,确实能够下载,但是入口的地址是如下黄色的那行显示所示,如果单步执行(F11)或全速运行(F5),程序始终在原位置不动(0x1FFF4252),如果强制的将PC指针的值 ...

  6. 最简单DIY基于C#和51单片机上下位机一体化的PCA9685舵机控制程序

    51单片机物联网智能小车系列文章目录 第一篇:最简单DIY的51蓝牙遥控小车设计方案 第二篇:最简单DIY串口蓝牙硬件实现方案 第三篇:最简单DIY蓝牙PS2遥控器控制蓝牙智能小车 第四篇:最简单DI ...

  7. 最简单DIY基于51单片机、PCA9685、IIC、云台的舵机集群控制程序

    51单片机物联网智能小车系列文章目录 第一篇:最简单DIY的51蓝牙遥控小车设计方案 第二篇:最简单DIY串口蓝牙硬件实现方案 第三篇:最简单DIY蓝牙PS2遥控器控制蓝牙智能小车 第四篇:最简单DI ...

  8. 51单片机 | 基于I2C总线的秒表模拟应用

    -------------------------------------------- 参考地址: http://blog.csdn.net/junyeer/article/details/4648 ...

  9. I2C总线原理和应用实例(51单片机和AT24C02的I2C通讯)

    1. I2C简介 I2C(Inter-Integrated Circuit:内部集成电路)总线是由Philips公司开发的一种简单.双向二线制同步串行总线.(来源于百度百科) 总结其主要特点如下: 只 ...

最新文章

  1. 美元加息怎么“剪羊毛”
  2. Nature:初步探索限制饮食如何影响肿瘤生长
  3. 手脱UPX(堆栈平衡原理)
  4. 额尔古纳的俄罗斯女孩
  5. 国家自然科学基金项目经费怎么用有了新规定
  6. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(二)-Hexo参数设置
  7. 设置crontab用vi打开编辑
  8. Q123:PBRT-V3,各种形式的“光传播方程”的推导依据
  9. 自定义事件和jQuery插件
  10. 调查问卷Html5发展综述
  11. python模拟登陆steam
  12. Windows下安装Nutch
  13. 计算机软件的制作过程,迅捷流程图制作软件
  14. openbsd系统可以做什么服务器,OpenBSD 3.8 release 架设FTP服务器
  15. 卖虾滑的鲜美来IPO:水产品预制菜第一股,蹭热度or真有料?
  16. 查看路由器地址是否是公网ip
  17. js-cookie设置token过期时间
  18. WLAN未启用DHCP
  19. 黑龙江职业学院计算机考试,黑龙江2021年9月计算机等级考试考点安排 在哪考试...
  20. 乐山市计算机学校的董事长是,乐山市计算机学校庆祝建校25周年

热门文章

  1. MonoPort翻译解读 ECCV2020
  2. 风山渐:循序渐进;雷泽归妹:永终知敝
  3. 【立创开源】太阳能板充电方案单节3.7v锂电池充电
  4. (学习java)水果超市管理系统
  5. 【自动化】【微信公众号】油猴 - 自动发布文章
  6. 暗黑3发布!又有多少人为之疯狂
  7. swig 转义html,Swig 使用指南
  8. ImageLoader简单使用
  9. openSUSE 15.0 显卡驱动安装
  10. 花样流水灯1:查表显示LED灯(原理图+程序+仿真)