IIC-EEPROM实验

news2025/1/13 13:48:01

IIC

  • I2C介绍
    • I2C物理层(内部结构)
    • I2C协议层
      • 数据有效性
      • 起始和结束信号
      • 应答响应
      • 时序图
    • 数据传输
    • 软件模拟IIC
    • 使用方法
      • 产生IIC起始信号
      • 产生IIC停止信号
      • 产生ACK应答
      • 产生nack非应答
      • 等待应答信号到来
      • IIC发送一个字节
      • IIC读一个字节
  • AT24C02介绍
  • 硬件设计
  • 软件设计
  • 实验现象
  • 面试问题

硬件资源:使用51单片机的IO口模拟I2C时序,并实现与AT24C02(EEPROM)之间的双向通信。
实现功能:系统运行时,数码管右三位显示0,按K1键将数据写入到EEPROM内保存,按K2键读取EEPROM内保存的数据,按K3键显示数据加1,按卡键显示数据清0,最大能写入的数据是255。

I2C介绍

I2C(Inter-Integrated Circuit)总线两线式串行总线,用于连接微控制器及外围设备。
总线:只有两根双向信号线,一根是数据线SDA,另一根是时钟线SCL。
优点:接口线少,控制方式简单,器件封装形式小,通信速率较高,管脚少,硬件实现简单,可扩展性强。
使用场景:集成芯片内

I2C物理层(内部结构)

I2C协议层

数据有效性

I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
在这里插入图片描述

起始和结束信号

SCL线为高电平时,SDA线由高电平向低电平的变化表示起始信号;
SCL线为高电平时,SDA线由低电平向高电平的变化表示终止信号。
在这里插入图片描述
起始和终止信号都是由主机发出的,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态。

应答响应

应答时序图:
在这里插入图片描述
每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)

时序图

I2C总线时序如下图所示:
在这里插入图片描述
在这里插入图片描述

数据传输

软件模拟IIC

由于51单片机没有硬件IIC接口,即使有硬件接口我们通常还是采用软件模拟I2C。主要原因时硬件IIC设计比较复杂,而且稳定性不怎么好,程序移植比较麻烦,而用软件模拟IIC,最大的好处就是移植方便,同一个代码兼容所有单片机,任何一个单片机只要有IO口(不需要特定IO),都可以很快的移植过去。

使用方法

要进行I2C通信,需要编写起始信号、停止信号、应答和非应答信号,I2C编写字节的函数。
这些信号中,起始信号是必须的,结束信号和应答信号都可以不要。

产生IIC起始信号

void iic_start(void)
{
	IIC_SCL = 1;
	IIC_SDA = 1;
	delay_10us(1);
	IIC_SDA = 0;		//当SCL为高电平时,SDA由高变为低
	delay_10us(1);
	IIC_SCL = 0;		//钳住I2C总线,准备发送或接收数据
}

产生IIC停止信号

void iic_stop(void)
{
	IIC_SCL = 1;
	IIC_SDA = 0;
	delay_10us(1);
	IIC_SDA = 1;		//当SCL为高电平时,SDA由低变为高
	delay_10us(1);
}

产生ACK应答

void iic_ack(void)
{
	IIC_SCL = 0;
	IIC_SDA = 0;
	delay_10us(1);
	IIC_SCL = 1;
	delay_10us(1);
	IIC_SCL = 0;
}

产生nack非应答

void iic_nack(void)
{
	IIC_SCL = 0;
	IIC_SDA = 1;		//SDA为高电平
	delay_10us(1);
	IIC_SCL = 1;
	delay_10us(1);
	IIC_SCL = 0;
}

等待应答信号到来

u8 iic_wait_ack(void)
{
	u8 time_temp = 0;
	IIC_SCL = 1;
	delay_10us(1);
	while(IIC_SDA)			//等待SDA为低电平
	{
		time_temp++;
		if (time_temp > 100)	//超时则强制结束IIC通信
		{
			iic_stop();
			return 1;
		}
	}
	IIC_SCL = 0;
	return 0;
}

IIC发送一个字节

void iic_write_byte(u8 dat)
{
	u8 i = 0;
	IIC_SCL = 0;
	for (i = 0; i < 8; i++)			//循环8次将一个字节传出,先传高再传低位
	{
		if ((data & 0x80) > 0)
		{
			IIC_SDA = 1;
		}
		else
		{
			IIC_SDA = 0;
		}

		dat <<= 1;
		delay_10us(1);
		IIC_SCL = 1;
		delay_10us(1);
		IIC_SCL = 0
		delay_10us(1);				//传入这1干什么,延迟很短,也有延迟的必要性吗?
	}
}

IIC读一个字节

u8 iic_read_byte(u8 ack)
{
	u8 i = 0,receive = 0;
	
	for ( i = 0; i < 8; i++)		//循环8次将一个字节读出,先读高再传低位
	{
		IIC_SCL = 0;
		delay_10us(1);
		IIC_SCL = 1;
		receive<<=1;

		if (IIC_SDA)
		{
			receive++;
		}
		delay_10us(1);
	}
	if (!ack)
	{
		iic_nack();
	}
	else
	{
		iic_ack();
	}
	
	return receive;
}

AT24C02介绍

硬件设计

软件设计

实验现象

面试问题

1、IIC的特点。
2、IIC的优缺点。
3、数据有效性
4、三种信号
5、IIC工作速率
6、画IIC时序图
7、数据传输的流程
8、IIC如何进行读写操作
9、IIC总线怎么实现?
10、IIC总线仲裁机制是怎么样的?
11、为什么要上拉?
12、怎么用IO口模拟IIC?
13、主设备3.3v从设备1.8v,不使用电平转换如何通过搭电路实现通信

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/557957.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能Python-python_if_非

Python中的if非语句在SEO中的重要性 在Python编程中&#xff0c;if非语句是必不可少的一部分。它让程序员能够编写条件语句&#xff0c;根据不同的条件执行不同的代码。但你知道吗&#xff1f;if非语句也可以对SEO&#xff08;搜索引擎优化&#xff09;产生深远的影响。 什么…

cannot read system data from XML file

最近在使用ccs进行debug仿真时&#xff0c;不知道为什么一直报错&#xff0c;或者偶尔能够正常下载程序。一些报错情况如下&#xff1a; One or more sections of your program falls into a memory region that is not writable. Invalid Target Configuration file 有可能…

【容器化应用程序设计和开发】2.7 云原生开发工具和框架

2.7 云原生开发工具和框架 今天我们就简单来讲一下云原生下用到的开发工具和一些基本的框架。云原生开发工具和框架是为了支持现代化的应用程序开发&#xff0c;能够简化云原生应用程序的构建、部署、管理和维护。下面是一些常见的云原生开发工具和框架&#xff1a; Kubernetes…

给初学者的Vue.js项目搭建教程

部分数据来源&#xff1a;ChatGPT 1. 环境准备 在开始创建 Vue.js 项目前&#xff0c;需要保证已经安装了 Node.js&#xff08;建议版本12&#xff09;和 NPM&#xff08;Node.js 自带的包管理工具&#xff09;。 可以执行以下命令确认是否已经安装&#xff1a; node -v np…

数字孪生智慧灯杆,“多杆合一”降本增效

随着智慧城市建设的不断深入&#xff0c;智慧灯杆作为城市基础设施的重要组成部分&#xff0c;正在成为城市智能化和绿色化的重要手段之一。 图扑智慧灯杆系统在城市道路照明领域引入信息化手段&#xff0c;通过构建路灯物联网&#xff0c;实现了现代化的路灯按需维修和按需照…

【1】安装与配置tensorflow

常见深度学习框架市场占有率 1.创建虚拟环境 打开菜单栏里的 点击creat创建 2.激活虚拟环境 打开命令提示符&#xff0c;输入activate tensorflow 可以看到进入tensorflow环境&#xff1a; 3.更换源 为提高下载速度&#xff0c;执行以下命令&#xff1a; pip config set g…

SpringCloud Ribbon和OpenFeign组件的使用加示意图和详细讲解

目录 SpringCloud Ribbon Ribbon 介绍 LB(Load Balance) LB 分类 1. 集中式LB 2. 进程内LB 实例-前面member-consumer 轮询负载访问10000/10002 底层就是Ribbon 默认的轮询负载算法 Ribbon 架构图&机制 Ribbon 机制 Ribbon 常见负载算法 替换负载均衡算法-应用实…

CCS新建工程教程

1.先点击ccs软件&#xff0c;打开一个工作台&#xff1a; 2.点击“Project”菜单&#xff0c;选择“New CCS Project”项目&#xff0c;新建 CCS 工 程 3. ①&#xff1a;我们开发板上使用的 DSP 芯片是 TMS320F28335&#xff0c;所以这里我们选择 TMS320F28335。 ②&#xff…

一文读懂Vite和Webpack的区别?

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、webpack是什么&#xff1f;二、webpack如何工作&#xff1f;三、Vite是什么&#xff1f;Vite和Webpack的区别&#xff1f; 提示&#xff1a;以下是本篇文章正文…

【Nginx】负载均衡

文章目录 负载均衡概述负载均衡的原理及处理流程负载均衡常用的处理方式方式一:用户手动选择方式二:DNS轮询方式方式三:四/七层负载均衡 Nginx七层负载均衡的指令upstream指令server指令 Nginx七层负载均衡的实现流程负载均衡状态负载均衡策略负载均衡案例案例一&#xff1a;对…

“多杆合一”降本增效——数字孪生智慧灯杆

随着智慧城市建设的不断深入&#xff0c;智慧灯杆作为城市基础设施的重要组成部分&#xff0c;正在成为城市智能化和绿色化的重要手段之一。 图扑智慧灯杆系统在城市道路照明领域引入信息化手段&#xff0c;通过构建路灯物联网&#xff0c;实现了现代化的路灯按需维修和按需照…

Windows与Linux系统实现文件互传(通俗易懂)

SCP指令可以实Windows系统与Linux系统之间的文件互传 引言Windows系统文件传输到Linux系统上&#xff08;先操作&#xff09;Windows系统文件传输到Linux系统上&#xff08;再细聊&#xff09;Linux系统文件传输到Windows系统上&#xff08;先操作&#xff09;Linux系统文件传输…

【PCIE702-1】基于Kintex UltraScale系列FPGA的高性能PCIe总线数据预处理载板

板卡概述 PCIE702-1是一款基于PCIE总线架构的高性能数据预处理FMC载板&#xff0c;板卡采用Xilinx的高性能Kintex UltraScale系列FPGA作为实时处理器&#xff0c;实现各个接口之间的互联。板卡具有1个FMC&#xff08;HPC&#xff09;接口&#xff0c;1路PCIe x8主机接口&#x…

【首发】全道科技轻地图数据闭环解决方案

近日&#xff0c;全道科技执行董事王闯在WGDC 2023进行了《从‘重感知、轻地图’看城市NOA解决方案创新与发展》的主题演讲&#xff0c;不仅从高精地图自动化量产技术服务商角度&#xff0c;以更加专业的视角阐释了自动驾驶实现“轻地图”的路径&#xff0c;同时发布了基于此趋…

域名所有权验证教程

申请域名型证书&#xff0c;可以通过以下方式验证域名的所有权&#xff1a;1. 文件验证&#xff08;云建站主机请选择dns方式&#xff09;2. 手动DNS验证 3. 自动DNS验证 申请域名型证书&#xff0c;可以通过以下方式验证域名的所有权&#xff1a; 1. 文件验证 根据提示需要创…

数字化军港管理:智慧可视化的力量

随着科技的不断发展和军事需求的日益增长&#xff0c;智慧军港可视化技术成为军事领域中备受瞩目的创新应用。以数据可视化为核心&#xff0c;智慧军港可视化将军港运营管理提升到一个全新的水平&#xff0c;为军事力量的部署、维护和战备提供了前所未有的支持和优势。 山海鲸 …

全面SOA化,详解华为iDVP数字底座

交流群 | 进“传感器群/滑板底盘群/汽车基础软件群/域控制器群”请扫描文末二维码&#xff0c;添加九章小助手&#xff0c;务必备注交流群名称 真实姓名 公司 职位&#xff08;不备注无法通过好友验证&#xff09; 作者 | 张萌宇 在汽车产业向智能化转型的过程中&#xff0c…

WindowManager 1.1.0-beta01 新功能详解

作者 / 技术撰稿人兼软件工程师 Jon Eckenrode Jetpack WindowManager 库的 1.1.0-beta01 版本正继续有条不紊地推进 1.1.0 稳定版本的发布。Beta 版增加多个新特性和功能&#xff0c;欢迎您即刻进行测试、抢先体验&#xff01; 我们需要您的反馈以优化 WindowManager 的功能&a…

丁凯博士在CCIG:文档图像处理「新未来」

文章目录 ⭐️ CCIG大会简介⭐️ 合合信息 与 丁凯博士⭐️ 领先世界的智能文档处理技术&#x1f31f; 智能图像处理&#xff1a;为文字识别 "增质提效" 筑基✨ 切边增强 - 提升文档图像质量✨ 弯曲矫正 - 解决图像畸变问题✨ 去摩尔纹 - 保证图像信息完整 &#x1f…

各行业防雷工程和防雷接地的应用方案

随着现代电气、电子设备的广泛应用&#xff0c;防雷措施也越来越受到重视。特别是在单位、家庭建筑物中&#xff0c;为了保障人们的生命财产安全&#xff0c;必须采取严格的防雷措施。 一、防雷举措 接地系统 接地系统是防雷措施的基础&#xff0c;其目的是将建筑物内部的电…