ICEEPROM读写设计与制作
- 格式:pdf
- 大小:2.11 MB
- 文档页数:33
目录一.设计要求 ............................................................二.设计目的 ............................................................三.器件EEPROM的介绍....................................................1.EEPROM简介........................................................2.EEPROM24XX系列功能概述............................................四.I2C协议的介绍.......................................................1.I2C协议总线特征...................................................2. I2C协议工作原理..................................................3.I2C协议总线基本状态...............................................4.寻址约定..........................................................五.EEPROM读写功能实现..................................................1.写操作............................................................(1)字节写操作...................................................(2)页写入操作...................................................2.确认查询..........................................................3.读操作............................................................(1)当前地址的读操作.............................................(2)随机读操作...................................................(3)连续读操作...................................................六.具体设计过程.........................................................1.程序流程图........................................................2.系统组成模块结构及功能............................................(1)函数定义.....................................................(2)主函数main( )...............................................3.源程序............................................................七.设计心得体会.........................................................八.参考文献 ............................................................基于I2C协议的EEPROM读写功能实现一.设计要求1)通过软件基于I2C协议对EEPROM读写功能的实现。
使用Verilog来实现EEPROM的读写,进行一个简单的I2C实战应用 I2C在芯片的配置中应用还是很多的,比如摄像头、VGA转HDMI转换芯片,之前博主分享过一篇I2C协议的基础学习IIC协议学习笔记,这篇就使用Verilog来实现EEPROM的读写,进行一个简单的I2C实战应用。
EEPROM 我使用的这个芯片是AT24C32,它手册上还有一种AT24C64,其实操作都是一样的,只是内存大小不同,AT24C32是32k(4096x8)AT24C64是64k(8192x8), SCL设置为频率200Khz SCL clk posedge data输入EEPROM SCL clk negedge data输出EEPROM SDA 双向Pin A2,A1,A0 Device Addr default all 0,只操作一片可悬空引脚。
WP 接地正常读写,WP接Vcc写操作被禁止 字节寻址地址,是由12(AT24C32)或13bit(AT24C64)的地址组成,需要操作16位字地址高3或4位忽略即可。
Device Address 8’hA0写器件地址,8’hA1读器件地址 写字节操作 随机读字节操作 我这个芯片是双字节数据地址,所以在写数据地址时要写两次,先是高字节后是低字节。
开始结束标志 这个I2C总线的时序是一致的。
EEPROM应答 输出应答sclk的第九个周期给出,低电平应答。
如果主机没有收到应答,需要重新配置。
数据传输时序 sda数据线在scl时钟的下降沿中间变化,可以避免产生误触开始结束标志。
I2C Design i2c_start为高电平有效,传输完成后会产生一个i2c_done结束标志,表示操作完成。
I2C状态转移图 I2C写操作 (1)产生start位 (2)传送器件地址ID_Address,器件地址的最后一位为数据的传输方向位,R/W,低电平0表示主机往从机写数据(W),1表示主机从从机读数据(R)。
eeprom课程设计一、课程目标知识目标:1. 学生能理解EEPROM的基本概念,掌握其内部结构和工作原理。
2. 学生能描述EEPROM在嵌入式系统中的应用场景和重要性。
3. 学生了解EEPROM与其它类型存储器的区别,并能分析其优缺点。
技能目标:1. 学生能使用编程软件和开发板,完成对EEPROM的读写操作。
2. 学生能够运用所学知识解决实际问题,例如:设计简单的数据存储和读取程序。
3. 学生通过实际操作,培养动手能力,提高问题解决能力。
情感态度价值观目标:1. 学生培养对电子技术的兴趣,激发学习热情,树立科技进步的信心。
2. 学生通过合作学习,培养团队精神,提高沟通能力。
3. 学生认识到科技发展对人类生活的影响,增强社会责任感和创新意识。
课程性质:本课程为电子信息类学科,以实践操作为主,理论联系实际。
学生特点:学生为高中年级,具备一定的电子基础和编程能力,对新技术充满好奇。
教学要求:教师应注重理论与实践相结合,引导学生通过实际操作掌握知识,培养其动手能力和问题解决能力。
在教学过程中,关注学生的个体差异,鼓励团队合作,提高学生的综合素质。
通过本课程的学习,使学生在知识、技能和情感态度价值观方面均取得具体的学习成果。
二、教学内容1. EEPROM基本概念与分类:介绍EEPROM的定义、特点,对比其他类型存储器,分析其应用场景。
教材章节:第一章 存储器概述,第三节 EEPROM存储器2. EEPROM内部结构与工作原理:讲解EEPROM的内部结构,阐述其读写原理及电荷保持特性。
教材章节:第二章 EEPROM存储器内部结构,第一节 EEPROM存储器内部结构及工作原理3. EEPROM编程与操作:介绍编程软件及开发板的使用,讲解EEPROM的读写操作方法。
教材章节:第三章 EEPROM编程与操作,第一节 编程软件的使用;第二节 EEPROM读写操作实例4. EEPROM应用案例分析:分析EEPROM在实际应用中的典型案例,如数据存储、参数设置等。
eeprom读写程序详解EEPROM(Electrically Erasable Programmable Read-Only Memory) 是一种可编程只读存储器,可以在电信号的作用下进行擦写和改写。
它通常用于存储单片机或其他嵌入式系统中的数据、设置参数、配置文件等。
对于 EEPROM 的读写程序,需要考虑以下几个方面:1. 读操作:读操作通常包括以下步骤:- 等待上次读操作完成。
- 获取要读取的数据的单元地址。
- 将 EEPGD 位和 CFGS 位清零。
- 启动读操作控制位 RD。
- 等待本次读操作完成。
- 将该单元地址中对应的数据返回。
在读取 EEPROM 数据时,为了避免芯片在一瞬间无法获取到数据,需要给芯片一定的时间来稳定获取数据。
因此,在读取操作中需要加入等待步骤。
2. 写操作:写操作通常包括以下步骤:- 等待上次写操作完成。
- 获取要写的数据的单元地址。
- 将要写的数据写入 EEPROM 的单元中。
- 将 EEPGD 位和 CFGS 位清零。
- 启动写操作控制位 WP。
- 等待写操作完成。
在写操作中,为了确保数据的可靠性,需要将要写的数据写入EEPROM 的单元中,并等待写操作完成。
同时,在写操作过程中,需要注意避免对无关的单元进行写操作,以免损坏 EEPROM 芯片。
3. 中断处理:在 EEPROM 的读写操作中,通常需要加入中断处理机制,以便在读写过程中及时响应和处理异常情况。
例如,在读取 EEPROM 数据时,如果 EEPROM 芯片出现故障,可能会导致读取失败。
为了避免这种情况,可以在读取操作中加入中断处理机制,在读取失败时及时报警或采取相应的应对措施。
总之,EEPROM 读写程序的实现需要考虑多个方面的因素,包括读操作、写操作、中断处理等。
同时,需要考虑 EEPROM 芯片的特性和限制,以便实现高效、稳定、可靠的 EEPROM 读写操作。
eeprom读写项目课程设计一、课程目标知识目标:1. 理解EEPROM的基本概念、内部结构和存储原理;2. 掌握EEPROM的读写操作流程及相关编程技巧;3. 了解EEPROM在嵌入式系统中的应用场景。
技能目标:1. 能够使用相关开发工具和编程语言对EEPROM进行读写操作;2. 学会分析EEPROM读写过程中可能遇到的问题,并提出相应的解决方案;3. 能够运用所学知识,完成一个简单的EEPROM读写项目。
情感态度价值观目标:1. 培养学生对电子技术及编程的兴趣,激发学习热情;2. 培养学生的团队协作意识和沟通能力,学会共同解决问题;3. 增强学生的自信心,使其认识到自己的潜力和价值。
课程性质:本课程为实践性较强的课程,结合理论知识与实际操作,旨在提高学生的动手能力和编程技能。
学生特点:本课程面向高年级学生,他们已经具备了一定的电子技术基础和编程能力,对实际项目具有强烈的好奇心。
教学要求:教师需结合实际案例,引导学生主动探究,注重理论与实践相结合,确保学生能够将所学知识应用于实际项目中。
在教学过程中,关注学生的个体差异,给予个性化指导,以提高整体教学效果。
通过本课程的学习,使学生达到上述课程目标,为今后的学习和工作打下坚实基础。
二、教学内容1. EEPROM基本概念与原理:- EEPROM定义、特点及应用场景;- EEPROM内部结构、存储单元及工作原理;- EEPROM与其它类型存储器的区别。
2. EEPROM读写操作:- I2C、SPI等通信协议在EEPROM中的应用;- EEPROM编程接口及编程语言选择;- EEPROM读写操作流程及编程技巧。
3. EEPROM应用案例分析:- 简单EEPROM读写项目案例介绍;- 案例中涉及的关键技术及其实现方法;- 分析案例中可能遇到的问题及解决方案。
4. 实践操作与项目实施:- 实践环境搭建,开发工具使用;- 指导学生完成EEPROM读写操作练习;- 分组讨论,协作完成一个简单的EEPROM读写项目。
课程设计题目EEPROM器件读写例程设计学院计算机科学与技术专业计算机科学与技术班级姓名指导教师2011 年 6 月22 日课程设计任务书学生姓名:专业班级:计算机班指导教师:工作单位:计算机科学与技术学院题目: EEPROM器件读写例程设计初始条件:1.课程设计使用ZG211硬件综合实验平台(8051单片机),使用AT24C01接口芯片和辅助芯片以及器件;2.ZG211有程序设计集成开发环境,程序设计语言为C语言;3.ZG211硬件综合实验平台使用说明书;要求完成的主要任务:(包括课程设计工作量及其技术要求,撰写说明书具体要求)1.学习使用ZG211硬件综合实验平台,程序设计集成开发环境;2.根据课程设计题目,进行需求分析,搞清楚课程设计需要设计需求和需要解决的设计内容。
3.查阅和学习课程设计题目需要的接口芯片资料,掌握I2C接口芯片的使用方法和编程要领。
查阅和学习课程设计题目需要的辅助芯片以及器件资料。
4.设计接口芯片和辅助芯片以及器件与8051单片机连接硬件电路原理图。
5.设计与硬件电路原理图对应的C语言程序(或8051汇编语言)。
给出程序流程图。
在集成开发环境中调试程序。
给出程序的详细注释。
能够解释使用程序模拟电路时序信号和数据。
6.撰写课程设计报告,1)详细陈述以上的设计过程;2)详细陈述电路的调试过程。
时间安排:第17周:1.熟悉ZG211硬件综合实验平台,KEILC UVISION2集成开发环境;查阅接口芯片资料,熟悉接口芯片和它的使用方法。
2.设计硬件电路原理图,。
第18周:1.使用C语言或汇编语言设计和调试接口程序。
2.撰写计算机硬件综合设计报告。
指导教师签名:年月日系主任(或责任教师)签名:年月日EEPROM器件读写例程设计1 需求分析1.1设计目的(1)掌握I/O口操作;(2)掌握显示及键盘芯片的应用;(3)掌握I2C总线操作。
1.2实验设备1.2.1 硬件设备(1)PC 机一台;ZG-211 单片机系统实验板一块(2)实验连接线若干(3)并口编程线一根(4)串口通讯线一根(5)配套电源1 个(6)芯片:CH451,89S52,CD4052,AT24C021.2.2 软件平台Keil C51 μVision2软件的使用:设计中使用的软件开发平台为Keil C51 μVision2。
eprom和eeprom的读写过程
EPROM(Erasable Programmable Read-Only Memory)和EEPROM(Electrically Erasable Programmable Read-Only Memory)都是一种非易失性存储器,可以用来存储数据并在需要时进行读取。
两者之间的主要区别在于擦除的方式不同。
1. EPROM的读写过程:
- 写入:EPROM使用特定的设备(EPROM编程器)将数据写入芯片。
设备通过一个特定的电压脉冲将数据编程到存储单元中,并将存储单元的电平状态改变从1变为0,以此来表示数据的存储。
- 读取:EPROM的读取是通过将特定地址的存储单元的电平状态转换为电压信号来完成的。
如果存储单元的电平为1,则读取的电压为低电平;如果存储单元的电平为0,则读取的电压为高电平。
2. EEPROM的读写过程:
- 写入:EEPROM的写入过程与EPROM相比更灵活。
可以通过特定的设备将数据写入EEPROM。
写入时,需要将要写入的地址和写入的数据发送给EEPROM,并将特定的命令信号发送给EEPROM,以启动写入操作。
写入操作完成后,EEPROM中相应地址的存储单元将保存写入的数据。
- 读取:EEPROM的读取过程与EPROM相似,通过将特定地址的存储单元的电平状态转换为电压信号来读取数据。
EEPROM的读取可以直接通过数据总线传输读取命令和地址,不需要额外的编程器。
需要注意的是,在实际操作中使用EPROM和EEPROM时,需要严格按照相关规范和设备说明进行操作,确保正确的读写过程,以免损坏芯片或丢失数据。
四川理工学院课程设计书学院计算机学院专业计算机科学与技术班级2013级 4 班课程嵌入式系统软硬件开发及应用实践题目I2C EEPROM读写设计与制作教师杨维剑学生龚程金黄雨杨坤陈超王俊枭摘要随着计算机系统及电子系统的飞速发展,信息的存储也越来越重要,EEPROM (电可擦写可编程只读存储器)是可用户更改的只读存储器(ROM),其可通过高于普通电压的作用来擦除和重编程(重写),断电后存在其中的数据不会丢失,通常用于存放硬件信息,如mac地址、BIOS芯片等,并在嵌入式ARM系统中应用广泛,IIC作为一种常见的总线技术,其方便扩展外围设备的特性使得其应用广泛,AT24C02是一款性价比超高的IIC接口EEPROM,擦写次数多、稳点不易丢失数据,本文将设计并制作ARM系统,并在Linux中实现I2C EEPROM读写。
关键词:ARM,EEPROM,IIC,AT24C02,Linux目录一、LinuxI2C驱动--概述 (1)1.1 设计任务与要求 (1)1.2 I2C (1)1.3 硬件 (1)1.4 软件 (1)二、硬件电路设计 (2)2.1 电路设计要求 (2)2.2 原理图的绘制 (2)2.2.1电源接口 (2)2.2.2UART接口 (3)2.2.3AT24C02接口 (3)2.3 PCB板的制作 (3)三、LinuxI2C驱动--I2C总线 (5)3.1 I2C总线物理结构 (5)3.2 I2C总线特性 (5)3.3 开始和停止条件 (6)3.4 数据传输格式 (6)3.5 响应 (7)3.6 总线仲裁 (8)四、LinuxI2C驱动--解析EEPROM的读写 (9)4.1 概述 (9)4.2 设备地址 (9)4.3 读eeprom (9)4.4 写eeprom (10)五、LinuxI2C驱动--访问eeprom (10)5.1 通过sysfs文件系统访问I2C设备 (10)5.2 通过devfs访问I2C设备 (11)5.3 总结 (11)六、LinuxI2C驱动--浅谈LinuxI2C驱动架构.. 126.1 I2C体系结构 (13)6.2 I2C重要数据结构 (13)七、LinuxI2C驱动--I2C设备驱动 (14)7.1 eeprom板级设备资源 (14)7.2 AT24C02 EEPROM 的I2C设备驱动 (14)7.2.1 at24_driver (14)7.2.3 at24_bin_read() (15)7.2.4 at24_bin_write() (15)7.3 总结 (15)八、LinuxI2C驱动--I2C总线驱动 (16)8.1 三星S3C2410 i2c适配器的硬件描述 (16)8.2 i2c总线驱动的加载/卸载 (17)8.3 i2c总线驱动的probe (17)8.4 启动i2c传输 (18)8.5 通过中断来推进i2c的传输 (18)课程设计体会 (19)参考文献 (20)附录 A (21)附录 B (29)一、LinuxI2C驱动--概述1.1 设计任务与要求1)通过软件基于I2C协议对EEPROM读写功能的实现。
基于IIC协议的EEPROM 读写功能的实现(一)设计要求能用IIC协议实现对EEPROM的数据储存与读出。
(二)设计目的1. 通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《单片机原理与应用》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了单片机的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性!2. 通过课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。
为后续各门课程的学习和毕业设计打下坚实基础。
3、知道IIC串行总线协议原理与运用,明白EEPROM的存储结构,知道用keil51软件和proteus仿真进行连调,实习单片机开发。
(三) 所用仪器设备电脑、keil51和proteus软件(四) 方案选择由于用IIC串行总线读写EEPROM我们不能直观的观察他们的读写现象,所以我们选择的是用液晶1602进行读写显示,用4*4矩阵键盘进行读写控制和数字的输入,选用AT89C51为主控制器,选用AT24C02进行存储。
所以这个课程设计主要分为三个模块:1、IIC串行总线读写EEPROM模块;2、液晶显示模块;3、矩阵键盘控制模块;(五) 具体的设计过程现将IIC协议与AT24C02的工作原理讲解如下,关于液晶与AT89C51的工作原理这里不再讲解。
一、IIC串行总线的组成与通信原理I2C总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。
I2C总线只有两根双向信号线。
一根是数据线SDA,另一根是时钟线SCL。
I2C总线通过上拉电阻接正电源。
当总线空闲时,两根线均为高电平。
连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。
四川理工学院课程设计书学院计算机学院专业计算机科学与技术班级2013级 4 班课程嵌入式系统软硬件开发及应用实践题目I2C EEPROM读写设计与制作教师杨维剑学生龚程金黄雨杨坤陈超王俊枭摘要随着计算机系统及电子系统的飞速发展,信息的存储也越来越重要,EEPROM (电可擦写可编程只读存储器)是可用户更改的只读存储器(ROM),其可通过高于普通电压的作用来擦除和重编程(重写),断电后存在其中的数据不会丢失,通常用于存放硬件信息,如mac地址、BIOS芯片等,并在嵌入式ARM系统中应用广泛,IIC作为一种常见的总线技术,其方便扩展外围设备的特性使得其应用广泛,AT24C02是一款性价比超高的IIC接口EEPROM,擦写次数多、稳点不易丢失数据,本文将设计并制作ARM系统,并在Linux中实现I2C EEPROM读写。
关键词:ARM,EEPROM,IIC,AT24C02,Linux目录一、LinuxI2C驱动--概述 (1)1.1 设计任务与要求 (1)1.2 I2C (1)1.3 硬件 (1)1.4 软件 (1)二、硬件电路设计 (2)2.1 电路设计要求 (2)2.2 原理图的绘制 (2)2.2.1电源接口 (2)2.2.2UART接口 (3)2.2.3AT24C02接口 (3)2.3 PCB板的制作 (3)三、LinuxI2C驱动--I2C总线 (5)3.1 I2C总线物理结构 (5)3.2 I2C总线特性 (5)3.3 开始和停止条件 (6)3.4 数据传输格式 (6)3.5 响应 (7)3.6 总线仲裁 (8)四、LinuxI2C驱动--解析EEPROM的读写 (9)4.1 概述 (9)4.2 设备地址 (9)4.3 读eeprom (9)4.4 写eeprom (10)五、LinuxI2C驱动--访问eeprom (10)5.1 通过sysfs文件系统访问I2C设备 (10)5.2 通过devfs访问I2C设备 (11)5.3 总结 (11)六、LinuxI2C驱动--浅谈LinuxI2C驱动架构.. 126.1 I2C体系结构 (13)6.2 I2C重要数据结构 (13)七、LinuxI2C驱动--I2C设备驱动 (14)7.1 eeprom板级设备资源 (14)7.2 AT24C02 EEPROM 的I2C设备驱动 (14)7.2.1 at24_driver (14)7.2.3 at24_bin_read() (15)7.2.4 at24_bin_write() (15)7.3 总结 (15)八、LinuxI2C驱动--I2C总线驱动 (16)8.1 三星S3C2410 i2c适配器的硬件描述 (16)8.2 i2c总线驱动的加载/卸载 (17)8.3 i2c总线驱动的probe (17)8.4 启动i2c传输 (18)8.5 通过中断来推进i2c的传输 (18)课程设计体会 (19)参考文献 (20)附录 A (21)附录 B (29)一、LinuxI2C驱动--概述1.1 设计任务与要求1)通过软件基于I2C协议对EEPROM读写功能的实现。
2)需要有EEPROM读写功能的具体实现过程。
linux i2c体系结构的三大组成:i2c核心,i2c总线驱动,i2c设备驱动,通过设计,了解I2C协议的基本原理,并对EEPROM读写功能的实现有个系统的概念,对其实现过程比较清楚。
同时,在设计中,巩固我们所学的理论知识。
1.2 I2CI2C总线是由Philips公司开发的两线式串行总线,这两根线为时钟线(SCL)和双向数据线(SDA)。
由于I2C总线仅需要两根线,因此在电路板上占用的空间更少,带来的问题是带宽较窄。
I2C在标准模式下传输速率最高100Kb/s,在快速模式下最高可达400kb/s。
属于半双工。
在嵌入式系统中,I2C应用非常广泛,大多数微控制器中集成了I2C总线,一般用于和RTC,EEPROM,智能电池电路,传感器,LCD以及其他类似设备之间的通信。
1.3 硬件CPU型号:Samsung S3C2410EEPROM型号:AT24C021.4 软件linux版本:Linux 2.6.35.7I2C总线驱动:drivers/i2c/busses/i2c-s3c2410.ceeprom驱动:drivers/misc/eeprom/at24.c二、硬件电路设计2.1 电路设计要求使用ARM芯片读写EEPROM,本设计中采用的ARM 芯片S3C2410,S3C2410处理器是Samsung公司基于ARM公司的ARM920T处理器核,采用FBGA封装,采用0.18um制造工艺的32位微控制器。
该处理器拥有:3路UART,IIC-BUS 接口等;EEPROM采用的是AT24C02,AT24C02是一个2K位串行CMOS E2PROM,内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。
AT24C02有一个8字节页写缓冲器。
该器件通过IIC总线接口进行操作,有一个专门的写保护功能。
并完成串口设计与JTAG在线调试接口设计。
2.2 原理图的绘制主要分为电源接口部分、UART接口部分、AT24C02接口部分的绘制。
2.2.1电源接口电源部分主要使用LM1117系列和AS1117系列芯片将电源转换为2.5V,3.3V和5V为系统不同器件提供电源,包括复位电路。
如图2.1所示。
图 2. 1电源转换2.2.2UART接口本电路主要使用MAX3232芯片输出RS-232信号,使调试更为方便。
如图2.2所示。
图2.2UART接口2.2.3AT24C02接口本电路主要实现AT24C02器件与IIC总线的连接,如图2.3所示。
图2.3AT24C02接口2.3 PCB板的制作制作PCB板,完成对应引脚封装,最终2D视图如图2.4所示,3D视图如图2.5所示。
图2.4PCB2d视图图2.5PCB3D视图三、LinuxI2C驱动--I2C总线本节分析下I2C总线协议,因为我的开发板是三星S3C2410芯片,所以就以此为例。
3.1 I2C总线物理结构I2C总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。
通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。
在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。
3.2 I2C总线特性每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系来软件设定地址多主机总线,如果两个或者更多的主机同时初始化数据传输,可以通过仲裁防止数据被破坏。
串行8位双向数据传输标准模式传输速率为100kbits/s快速模式传输速率为400kbits/s7位地址模支持主机发、主机收,从机发、从机收3.3 开始和停止条件当SCL是高电平时,SDA线由高电平向低电平切换,表示开始;当SCL是高电平时,SDA线由低电平向高电平切换,表示停止。
如下图所示。
3.4 数据传输格式发送到SDA线上的每个字节必须为8位,每次传输可以发送的字节数不受限制,但是每个字节后面必须跟一个响应位。
3.5 响应数据传输必须带响应,响应时钟脉冲由主机产生,在SCL 的第9个时钟脉冲上,前8个时钟脉冲用来传输8位即1byte 的数据。
当发送端收到响应时钟脉冲的时候就会拉高SDA 从而释放SDA 线,而接收端通过拉低SDA 先来表示收到数据,即SDA 在响应期间保持低电平。
3.6 总线仲裁当两个主机在总线上产生竞争时就需要仲裁。
SDA线低电平的优先级高于高电平。
当一个主机首先产生低电平,而紧接着另一个主机产生高电平,但是由于低电平的优先级高于高电平,所以总线成低电平,也就是发低电平的主机占有总线而发高电平的主机不占有总线。
如果两个主机都是发送低电平,那么继续比较下一个时钟周期的电平来决定谁占有总线,以此类推。
四、LinuxI2C驱动--解析EEPROM的读写4.1 概述AT24C02 的存储大小是1K,页大小是8个字节。
4.2 设备地址7位地址,前四位是1010,后三位由芯片引脚决定,由原理图可知后三位是000,也就是设备地址为0x50,因为数据传输是8位的,最后一位决定是读还是写。
4.3 读eeprom读任意地址eeprom的数据,首先第一个字节得先在SDA上发出eeprom的设备地址,也就是0x50,并且8位数据的最后一位是低电平表示写设备,然后第二个字节是要读的数据在eeprom内的地址,这样以后再产生开始条件,第三个字节在SDA上发出设备地址,此时的最后一位是高电平,表示读设备,第四个字节的数据就是读eeprom的对应地址的数据。
可以看到,读eeprom需要两个开始条件,也就是2条消息,第一条消息写eeprom确定读的位置,大小为2个字节,第二条消息才是真正的读eeprom。
4.4 写eeprom写eeprom就相对简单,只需一个开始条件,第一个字节发出设备地址和置最低位为低电平表示写eeprom,第二个字节发出要读数据在eerpom的地址,第三个字节读到的数据就对应地址在eeprom上的数据五、LinuxI2C驱动--访问eeprom本小节介绍两个在linux应用层访问eeprom的方法,并给出示例代码方便大家理解。
第一个方法是通过sysfs文件系统对eeprom进行访问,第二个方法是通过eeprom的设备文件进行访问。
这两个方法分别对应了i2c设备驱动的两个不同的实现,在后面的小结会详细的分析。
5.1 通过sysfs文件系统访问I2C设备eeprom的设备驱动在/sys/bus/i2c/devices/0-0050/目录下把eeprom设备映射为一个二进制节点,文件名为eeprom。
对这个eeprom文件的读写就是对eeprom进行读写。
我们可以先用cat命令来看下eeprom的内容。
发现里面都是乱码,然后用echo命令把字符串“test”输入给eeprom文件,然后再cat出来。
就会发现字符串test已经存在eeprom里面了,我们知道sysfs文件系统断电后就没了,也无法对数据进行保存,为了验证确实把“test”字符串存储在了eeprom,可以把系统断电重启,然后cat eeprom,会发现test还是存在的,证明确实对eeprom进行了写入操作。
当然,因为eeprom已经映射为一个文件了,我们还可以通过文件I/O写应用程序对其进行简单的访问测试。
比如以下程序对特定地址(0x40)写入特定数据(Hi,this is an eepromtest!),然后再把写入的数据在此地址上读出来。
5.2 通过devfs访问I2C设备linux的i2c驱动会针对每个i2c适配器在/dev/目录下生成一个主设备号为89的设备文件,简单的来说,对于本例的eeprom驱动,/dev/i2c/0就是它的设备文件,因此接下来的eeprom的访问就变为了对此设备文件的访问。