I2C EEPROM读写设计与制作.pdf

上传人:飞****9 文档编号:134118635 上传时间:2020-06-02 格式:PDF 页数:33 大小:1.89MB
返回 下载 相关 举报
I2C EEPROM读写设计与制作.pdf_第1页
第1页 / 共33页
I2C EEPROM读写设计与制作.pdf_第2页
第2页 / 共33页
I2C EEPROM读写设计与制作.pdf_第3页
第3页 / 共33页
I2C EEPROM读写设计与制作.pdf_第4页
第4页 / 共33页
I2C EEPROM读写设计与制作.pdf_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《I2C EEPROM读写设计与制作.pdf》由会员分享,可在线阅读,更多相关《I2C EEPROM读写设计与制作.pdf(33页珍藏版)》请在金锄头文库上搜索。

1、 四四 川川 理理 工工 学学 院院 课 程 设 计 书 学学 院院 计算机学院计算机学院 专专 业业 计算机科学与技术计算机科学与技术 班班 级级 2013 级级 4 班班 课课 程程 嵌入式嵌入式系统软硬件开发及系统软硬件开发及应用应用实践实践 题题 目目 I2C EEPROM 读写设计与制作读写设计与制作 教教 师师 杨维剑杨维剑 学学 生生 龚龚程金程金 黄雨黄雨 杨坤杨坤 陈超陈超 王王俊俊枭枭 摘 要 随着计算机系统及电子系统的飞速发展 信息的存储也越来越重要 EEPROM 电可擦写可编程只读存储器 是可用户更改的只读存储器 ROM 其可通过高 于普通电压的作用来擦除和重编程 重写

2、 断电后存在其中的数据不会丢失 通常用于存放硬件信息 如 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

3、2 1 电路设计要求 2 2 2 原理图的绘制 2 电源接口 2 接口 3 AT24C02 接口 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

4、设备 10 5 2 通过 devfs 访问 I2C 设备 11 5 3 总结 11 六 LinuxI2C 驱动 浅谈 LinuxI2C 驱动架构 12 6 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 三星

5、 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 1 一 LinuxI2C 驱动 概述 1 1 设计任务与要求 1 通过软件基于 I2C 协议对 EEPROM 读写功能的实现 2 需要有 EEPROM 读写功能的具体实现过程 linux i2c 体系结构的三大组成 i2c 核心 i2c 总线驱动 i2c 设备驱动 通过设计 了解 I2C 协议的基本原理 并

6、对 EEPROM 读写功能的实现有个系统的 概念 对其实现过程比较清楚 同时 在设计中 巩固我们所学的理论知识 1 2 I2C I2C 总线是由 Philips 公司开发的两线式串行总线 这两根线为 时钟线 SCL 和双向数据线 SDA 由于 I2C 总线仅需要两根线 因此在电路板 上占用的空间更少 带来的问题是带宽较窄 I2C 在标准模式下传输速率最高 100Kb s 在快速模式下最高可达 400kb s 属于半双工 在嵌入式系统中 I2C 应用非常广泛 大多数微控制器中集成了 I2C 总线 一般用于和 RTC EEPROM 智能电池电路 传感器 LCD 以及其他类似设备之间 的通信 1 3

7、 硬件 CPU 型号 Samsung S3C2410 EEPROM 型号 AT24C02 1 4 软件 linux 版本 Linux 2 6 35 7 I2C 总线驱动 drivers i2c busses i2c s3c2410 c eeprom 驱动 drivers misc eeprom at24 c 2 二 硬件电路设计 2 1 电路设计要求 使用 ARM 芯片读写 EEPROM 本设计中采用的 ARM 芯片 S3C2410 S3C2410 处理器是 Samsung 公司基于 ARM 公司的 ARM920T 处理器核 采用 FBGA 封装 采 用 0 18um 制造工艺的 32 位微控

8、制器 该处理器拥有 3 路 UART IIC BUS 接口 等 EEPROM 采用的是 AT24C02 AT24C02 是一个 2K 位串行 CMOS E2PROM 内部 含有 256 个 8 位字节 CATALYST 公司的先进 CMOS 技术实质上减少了器件的功耗 AT24C02 有一个 8 字节页写缓冲器 该器件通过 IIC 总线接口进行操作 有一个 专门的写保护功能 并完成串口设计与 在线调试接口设计 2 2 原理图的绘制 主要分为电源接口部分 UART 接口部分 AT24C02 接口部分的绘制 电源接口 电源部分主要使用 系列和 系列芯片将电源转换 为 和 为系统不同器件提供电源 包

9、括复位电路 如图 所示 图 2 1 电源转换 3 接口 本电路主要使用 芯片输出 RS 232 信号 使调试更为方便 如图 所示 图 接口 AT24C02 接口 本电路主要实现 AT24C02 器件与 总线的连接 如图 所示 图 接口 2 3 PCB 板的制作 4 制作 板 完成对应引脚封装 最终 视图如图 所示 视 图如图 所示 图 2 视图 图 2 视图 5 三 LinuxI2C 驱动 I2C 总线 本节分析下 I2C 总线协议 因为我的开发板是三星 S3C2410 芯片 所以就以 此为例 3 1 I2C 总线物理结构 I2C 总线在物理连接上非常简单 分别由 SDA 串行数据线 和 SC

10、L 串行时钟 线 及上拉电阻组成 通信原理是通过对 SCL 和 SDA 线高低电平时序的控制 来 产生 I2C 总线协议所需要的信号进行数据的传递 在总线空闲状态时 这两根线 一般被上面所接的上拉电阻拉高 保持着高电平 3 2 I2C 总线特性 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机 从 机关系来软件设定地址 多主机总线 如果两个或者更多的主机同时初始化数据传输 可以通过仲裁 防止数据被破坏 6 串行 8 位双向数据传输 标准模式传输速率为 100kbits s 快速模式传输速率为 400kbits s 7 位地址模 支持主机发 主机收 从机发 从机收 3 3 开始和停

11、止条件 当 SCL 是高电平时 SDA 线由高电平向低电平切换 表示开始 当 SCL 是高 电平时 SDA 线由低电平向高电平切换 表示停止 如下图所示 3 4 数据传输格式 发送到 SDA 线上的每个字节必须为 8 位 每次传输可以发送的字节数不受限 制 但是每个字节后面必须跟一个响应位 7 3 5 响应 数据传输必须带响应 响应时钟脉冲由主机产生 在 SCL 的第 9 个时钟脉冲 上 前 8 个时钟脉冲用来传输 8 位即 1byte 的数据 当发送端收到响应时钟脉冲的时候就会拉高 SDA 从而释放 SDA 线 而接收端 通过拉低 SDA 先来表示收到数据 即 SDA 在响应期间保持低电平

12、8 3 6 总线仲裁 当两个主机在总线上产生竞争时就需要仲裁 SDA 线低电平的优先级高于高电平 当一个主机首先产生低电平 而紧接着 另一个主机产生高电平 但是由于低电平的优先级高于高电平 所以总线成低电 平 也就是发低电平的主机占有总线而发高电平的主机不占有总线 如果两个主 机都是发送低电平 那么继续比较下一个时钟周期的电平来决定谁占有总线 以 此类推 9 四 LinuxI2C 驱动 解析 EEPROM 的读写 4 1 概述 AT24C02 的存储大小是 1K 页大小是 8 个字节 4 2 设备地址 7 位地址 前四位是 1010 后三位由芯片引脚决定 由原理图可知后三位是 000 也就是设

13、备地址为 0 x50 因为数据传输是 8 位的 最后一位决定是读还是 写 4 3 读 eeprom 10 读任意地址 eeprom 的数据 首先第一个字节得先在 SDA 上发出 eeprom 的设 备地址 也就是 0 x50 并且 8 位数据的最后一位是低电平表示写设备 然后第 二个字节是要读的数据在 eeprom 内的地址 这样以后再产生开始条件 第三个 字节在 SDA 上发出设备地址 此时的最后一位是高电平 表示读设备 第四个字 节的数据就是读 eeprom 的对应地址的数据 可以看到 读 eeprom 需要两个开始条件 也就是 2 条消息 第一条消息写 eeprom 确定读的位置 大小为

14、 2 个字节 第二条消息才是真正的读 eeprom 4 4 写 eeprom 写 eeprom 就相对简单 只需一个开始条件 第一个字节发出设备地址和置 最低位为低电平表示写 eeprom 第二个字节发出要读数据在 eerpom 的地址 第 三个字节读到的数据就对应地址在 eeprom 上的数据 五 LinuxI2C 驱动 访问 eeprom 本小节介绍两个在 linux 应用层访问 eeprom 的方法 并给出示例代码方便 大家理解 第一个方法是通过 sysfs 文件系统对 eeprom 进行访问 第二个方法 是通过 eeprom 的设备文件进行访问 这两个方法分别对应了 i2c 设备驱动的

15、两 个不同的实现 在后面的小结会详细的分析 5 1 通过 sysfs 文件系统访问 I2C 设备 eeprom 的设备驱动在 sys bus i2c devices 0 0050 目录下把 eeprom设备 映射为一个二进制节点 文件名为 eeprom 对这个 eeprom 文件的读写就是对 eeprom 进行读写 我们可以先用 cat 命令来看下 eeprom 的内容 发现里面都是乱码 然后用echo命令把字符串 test 输入给eeprom文件 然后再 cat 出来 11 就会发现字符串 test 已经存在 eeprom 里面了 我们知道 sysfs 文件系统断 电后就没了 也无法对数据进

16、行保存 为了验证确实把 test 字符串存储在了 eeprom 可以把系统断电重启 然后 cat eeprom 会发现 test 还是存在的 证 明确实对 eeprom 进行了写入操作 当然 因为 eeprom 已经映射为一个文件了 我们还可以通过文件 I O 写应 用程序对其进行简单的访问测试 比如以下程序对特定地址 0 x40 写入特定数 据 Hi this is an eepromtest 然后再把写入的数据在此地址上读出来 5 2 通过 devfs 访问 I2C 设备 linux 的 i2c 驱动会针对每个 i2c 适配器在 dev 目录下生成一个主设备号 为 89 的设备文件 简单的来说 对于本例的 eeprom 驱动 dev i2c 0 就是它 的设备文件 因此接下来的 eeprom 的访问就变为了对此设备文件的访问 我们需要用到两个结构体 i2cmsg 和 i2crdwrioctldata 5 3 总结 本小节介绍了两种在 linux 应用层访问 eeprom 的方法 通过 sysfs 文件系 统访问 eeprom 操作简单 无需了解 eeprom 的硬件特性以及访问时序

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 管理论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号