当前位置:文档之家› IIC总线驱动

IIC总线驱动

题目:I2C总线驱动
一、设计目的
1、理解IIC总线协议的内容。

2、根据IIC协议编制驱动程序,使用LED数码管显示24LC02某地址存储的
数据。

3、有按键,可设置存储的数据。

二、设计要求
1、根据IIC协议编制驱动程序,使用LED数码管显示24LC02某地址存储的数据。

2、有按键,可设置存储的数据。

三、方案设计与论证
I2C总线特征
I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。

所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。

图1IIC总线规范
I2C总线起始与停止条件
I2C总线在传送数据过程中信号类型:
开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。

结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

图2 起始和停止条件
I2C总线的数据传输
每一个字节必须保证是8位长度,每次传输可发送的字节数量不受限制。

数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。

图3 数据传输时序图
AT24C02简介
AT24C02是美国ATMEL公司的低功耗CMOS串行EEPROM,它是内含256
×8位存储空间,具有工作电压宽(2.5~5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。

AT24C02中带有片内寻址寄存器。

每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的操作。

所有字节都以单一操作方式读取。

为降低总的写入时间,一次操作可写入多达8字节的数据。

图6为AT24C系列芯片的封装图。

各引脚功能如下:
图4 A T24C02及其外围电路
SCL:串行时钟。

在该引脚的上升沿时,系统将数据输入到每个EEPROM器件,在下降沿时输出。

SDA:串行数据。

该引脚为开漏极驱动,可双向传送数据。

A0、A1、A2:器件/页面寻址。

为器件地址输入端。

WP:硬件写保护。

当该引脚为高电平时禁止写入,当为低电平时可正常读写数据。

VCC:电源。

一般输入+5V电压。

VSS:接地。

I2C总线驱动
I2C 总线驱动主要包括I2C 适配器结构i2c_adapter 和I2C 适配器的algorithm
数据结构。

通过I2C 总线驱动的代码,可控制I2C 适配器以主控方式产生开始位、停止
位、读写周期,以及以从设备方式被读写、产生ACK等。

I2C设备驱动
I2C 设备驱动是对I2C 设备端的实现,设备一般挂接在受CPU控制的I2C
适配器上,通过I2C 适配器与CPU交换数据。

I2C 设备驱动主要包括数据结构 i2c_driver 和i2c_client。

整体架构
我们通过对上述四个数据结构的描述和之间的关联的探讨来阐述i2c 驱动的整体架构。

i2c_adapter和i2c_algorithm
i2c_adapter 对应于物理上的一个适配器,i2c_algorithm 则对应一套通信方法。

一个i2c
适配器需要i2c_algorithm 中提供的通信函数来控制适配器上产生特定的访问周期。

缺少i2c_algorithm 的i2c_adapter 什么也做不了,因此i2c_adapter 中包含其使用的i2c_algorithm的指针。

i2c_algorithm中的函数master_xfer()用于产生I2c 访问周期需要的信号。

i2c_driver和i2c_client
i2c_driver 对应一套驱动方法,是纯粹的用于辅助作用的数据结构,它不对应任何物理实体。

i2c_client 对应于具体的物理设备。

i2c_driver 与i2c_client 在前者的attach_adapter函数被调用时会探测物理设备,当确定
一个client存在时,把该client使用的i2c_client 结构的adapter指针指向对应的i2c_adapter,并调用i2c_adapter 的client_register()函数。

i2c_adapter和i2c_client
i2c_adapter 和i2c_client 的关系与I2C硬件体系中适配器和设备的关系一致,即i2c_client依附于i2c_adapter。

一个适配器可以连接多个I2C 设备。

i2c_adapter 中包含i2c_client 的链表。

总结
内核关于I2C 驱动的体系结构关系图如下所示:
图5 关系图
方案一:
将数据“0x0f”写入AT24C02再读出送P1口显示
方案二:
将按键次数写入AT24C02再读出送LED数码管显示。

对按键进行软件消抖处理,通过编程,在按再下键S时,将计数变量加1,然后将计数变量的值写入AT24C02芯片并读出送LED数码管显示。

四、设计原理和电路图如下
(1)IIC驱动电路
设计原理:
AT24C02 的TEST脚为测试端系统中可接地处理 A2 A1 A0可任接因引I2C 总线上可连接多达 8 片总容量为 8*256*8=2048*8 由于片内子地址采用 8 位地址指针寻址超过256*8 时要占用引脚地址如果使用 CAT24WC04 则A0作为子地址软件寻址位使用CAT24WC08 CAT24WC16 时A1 A2 也分别作为子地址的软件寻址位这时相应的外部 A0 A1 A2无效。

AT24CXX 的数据操作格式
在I2C 总线中对CAT24WC02 内部存储单元读写时除了要寻址该器件的节点地址外还须指定存储读写的子地址SUBADR按照CAT24WC02 的器件手册读写N个字节的数据操作格式如下:
器件选择
在I2C 总线接口的通用外围电路中有可实现 LED 驱动控制的 SAA1064 接口芯片该器件可静态驱动 2 位LED 动态驱动 4 位LED 只有一个地址引脚 ADR 但可选择 4 种电平状态故一个 I2C 总线上最多只能挂接 4 个SAA1064 最多可扩展
16 位LED 显示SAA1064 中有动态驱动控制电路不须外部动态驱动管理故在外
部仍呈现出静态LED驱动特性。

电路设计
图3 对A T24C02读写的电路
图驱动LED显示电路
五、元件清单
表1 元件清单
元件序号型号主要参数元件序号型号主要参数
R2 金属膜,0.25w 10K R6 金属膜,0.25w 10K
R3 金属膜,0.25w 10K R7 金属膜,0.25w 10K
R4 金属膜,0.25w 10K R8 金属膜,0.25w 10K
R5 金属膜,0.25w 10K R9 金属膜,0.25w 10K
U1 AT89C51 S 按钮
U2 AT24C02 7SEG 数码管
六、设计总结
I2C总线具有十分完善的总线协议可构成多主系统在协议软件支持下,可自动处理
总线上任何可能的运行状态I2C 总线为双向同步串行总线因此I2C 总线接口内部为双向传输电路,如图2所示。

总线端口输出为开漏结构,故总线上必须有上拉电阻Rp 上拉电阻与电源电压VDD SDA/SCL总线串接电阻Rs 有关可参考有关数据手册选择通常可选5-10k
七、参考文献
[1]《单片机C语言应用100例》,王东峰、王会良等编,电子工业出版社,2009.3
[2]《新概念51单片机C语言教程》,郭天祥编,2007年
[3]《单片机原理及应用(C51语言)》,邓立新主编,清华大学出版社,2012年
[4]《单片机系统设计与开发》,张齐,朱宁西编著,机械工业出版社,2008.8
[5]中国知网
[6]百度网站
[7]电子发烧友
附录1 总体电路。

相关主题