IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 51单片机:I2C通信 -> 正文阅读

[嵌入式]51单片机:I2C通信

前言

51单片机I2C通信,断电存储数据。51芯片与AT24C02通信原理及代码实现


一、IIC简介

I2C是同步通信的两段式串行总线,一根SCL时钟线,一根SDA数据线。
特点: 接口线少,控制方式简单,器件封装形式小,通信速率高,硬件实现简单,可扩展性强。

I2C物理层

在这里插入图片描述
注意:当AT24C02其中任一连接SCL、SDA的为低电平,则总线SDA、SCL上均为低电平。
重点:1、由于总线默认高电平,即当没有设备控制SCL、SDA总线时为高电平; 即如果某个设备占据总线,需要释放总线时,将其SDA、SCL置 1 即可。当某个设备需要占据总线进行通信时,如果有设备占据总线,需要等待总线被释放。

特点:

  1. 支持多主机多从机
  2. 两段式总线,SDA用于数据传输,SCL用于时钟同步(无论同步通信还是异步通信都要时钟同步,区别在于从机时钟由谁控制)。
  3. 连接到总线的设备具有唯一地址,通过地址进行不同设备通信。
  4. 多设备同时占据总线时,通过仲裁方式决定哪个设备占据总线。

I2C协议层

数据有效性规定

1. SCL高电平期间,SDA须保持稳定(即SCL为高电平期间,SDA不能改变)
2. SCL为低电平期间,SDA可以改变电平
在这里插入图片描述

起止信号

在这里插入图片描述
(重点) 起始信号与终止信号均由主机发出,从机只能应答不能j进行通信的起始和终止。
起始信号后,总线就被占用;
终止信号后,总线就被释放,可以被其他主机占用。、

总线寻址

当进行通信时,发送起始信号后,须发送寻址信号。地址也是一种数据,与发送数据时序一样。

I2C总线寻址分为7位和10位寻址。7位寻址位定义如下。
在这里插入图片描述
以AT24C02为例,硬件结构如下:
在这里插入图片描述
在这里插入图片描述
在AT24C02中高四位固定不可更改,通过A0、A1、A2引脚高低电平决定设备地址。在普中51单片机中,A0、A1、A2引脚均接地。即当向从机写数据时,发送的寻址位为:10100000,即0xA0;当读取从机的数据时,主机发送的寻址位为:10100001,即0xA1。

数据传输与应答

根据开头描述,I2C是同步通信的两段式串行总线,SCL为时钟线,一根SDA为数据线。

由同步通信可知,主机通过控制SCL时钟线控制从机的时钟,通过SDA进行数据传输。

与其他通信协议一样,为了保证数据传输的有效性:

  1. 当主机发送完数据后,都需要等待并接收从机的应答信号(让发送端知道是否继续发送数据)
  2. 当从机接收完数据后,都需要向主机发送应答或非应答。(告诉发送端是否继续发送数据,应答信号(特定低电平)则继续发送,非应答信号(特定高电平)则结束发送)
  3. 当从机没有回应(应答或非应答)时,要将SDA置于高电平,释放总线,让主机产生终止信号结束通信。(起始信号和终止信号都是主机产生的 )

主机向从机,数据发送时序图:
在这里插入图片描述
发送数据时,时钟线与时序线均由主机控制。

从机向主机,数据发送时序图
读取数据与发送时序相似。

  1. 因为是同步通信,所以SCL时钟总线始终由主机控制。
  2. 由于是读取数据,所以主机须将SDA总线置高电平,释放SDA总线,SDA总线由从机控制,
  3. 当接收完一个字节后,向从机发送应答或非应答,以确定是否继续发送。(发送完就要等待接收应答,接受完就要发送应答)。
  4. 同样SCL高电平期间保持SDA电平稳定不能更改,SCL电平期间,SDA电平才能变化;一个SCL电平脉冲,接收一个数据。

具体时序图将上面数据发送时序图中左侧,SDA(主机)改为SDA(从机),SDA(从机)改为SDA(主机) 即可

二、AT24C02时序

AT24C02是一种外围数据存储器件,要进行通信,以单片机为例,C51为主机,AT24C02为从机。

当C51要写入数据到AT24C02时(即主机向从机发送数据)
1.主机发送起始信号
2. 主机发送寻址信号(以普中单片机为例,发送0xA0),找到要接收的设备(AT24C02)。
3. 主机发送AT24C02的写入位置地址。
4. 主机发送要写入的数据
5. 发送完成后,主机发送终止信号。

当C51要读取AT24C02中某个地址的数据时:(从机向主机发送数据)

  1. 主机发送起始信号
  2. 主机发送寻址信号(普中单片机中为0xA0)
  3. 主机发送AT24C02中要读取的地址
  4. 主机发送起始信号,重启总线
  5. 主机发送读信号(普中单片机AT24C02中为,0xA1)。为什么为0xA1,总线寻址中有解释。
  6. 读取数据。

总结

IIC通信是一种两段总线式同步通信协议,AT24C02是一种使用IIC协议的,可断电存储的元器件。不要将IIC通信协议和AT24C02混为一谈。

代码文件太多,后续将上传至github中。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 19:03:54  更:2022-07-20 19:06:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:59:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码