当前位置:文档之家› 基于I2C总线的键盘驱动的设计与实现

基于I2C总线的键盘驱动的设计与实现

基于 I2C 总线的键盘驱动的设计与实现
随着嵌入式系统的飞速发展,嵌入式 PC 在许多领域得到广泛应用。其中
嵌入式键盘作为一种人机交互工具,有着非常重要的作用。通常的键盘设计采
用阵列的设计方式,例如一个含有 9 个键值的键盘需要 6 个通用 I/O 口来实
现通信。键盘的键值越多,需要的通用 I/O 口也越多。
I2C(Inter-Integrated Circuit)总线是一种由 Philips 公司开发的 2 线式串行总线,
用于连接微控制器及其外围设备。I2C 总线最主要的优点是其简单性和有效性。
由于接口直接在组件上,因此 I2C 总线占用的空间非常小。I2C 总线的另一个
优点是,它支持多主控(multimastering),其中任何能够进行发送和接收的设备
都可以成为主总线。一个主控能够控制信号的传输和时钟频率。但在任何时间
点上只能有一个主控。
I2C 的这些特点使得在许多设计中备受青睐,本文所介绍的 MAX7347-7349
系列芯片,即是一款 I2C 兼容芯片。它将键值扫描等一系列操作封装在芯片内
部完成,CPU 只需要通过 I2C 总线与芯片通信,通过向芯片写入一定的命令完
成某些操作。从而简化了键盘驱动的处理。而且由于 I2C 支持多主控,因此不
影响系统其他设备的操作。整个过程只需要 3 个通用 I/O 口与 CPU 通信,可
以处理多达 64 个键值的响应,有效地节省了通用 I/O 口。
2 基本原理
2.1 键盘驱动实现原理
通常的键盘采用矩阵式原理,例如对于一个含 20 个键值的键盘,采用 4×5
的矩阵阵列,即 4 行 5 列。其中行和列直接与 CPU 的 I/O 口相连,4 个 I/O
口作为中断 I/O 口。一旦外部有键按下,就会产生中断,由于键盘被按下后,
该键对应的行和列被连通,因此根据判断各列对应的 I/O 口的电平,可以得
到被按下键的位置,从而采取相应的响应。
本文所采用的 MAX7347-7349 系列芯片内部有一个 FIFO 队列,他在内部完
成按键去抖、扫描键值、按键自动重复,以及某些时刻报警等一系列复杂的操
作,而键盘驱动本身是需要通过发送一系列的命令来得到所需要的某些状态值,
从而进行相应的操作。
2.2 I2C 总线通信原理
I2C 总线是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。
各种被控制电路均并联在这条总线上,每个电路和模块都有惟一的地址。CPU
会发出地址码用来选址,即接通需要控制的电路。所以,各控制电路虽然挂在
同一条总线上,却彼此独立,互不相关。
I2C 总线定义了严格的传输信号来完成一次传输。
开始信号:当 SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数
据。
结束信号:当 SCL 为低电平时,SDA 由低电平向高电平跳变,结束传送数
据。如图 1 所示。
注意:SDA 线上的数据状态仅在 SCL 为低电平的期间才能改变,SCL 为高
电平的期间,SDA 状态的改变会被识别为起始和停止条件。
应答信号:接收数据的 IC 在接收到 8 b 数据后,向发送数据的 IC 发出特定
的低电平脉冲,表示已收到数据。CPU 向受控单元发出 1 个信号后,等待受控
单元发出 1 个应答信号,CPU 接收到应答信号后,根据实际情况做出是否继续
传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。如图 2 所
示。
3 具体实现
3.1 接口电路
如图 3 所示 MAX7347 芯片电路示意图。
其中 11 个脚为键盘阵列输入连接到键盘外设,3 行 8 列,最多可以控制 24
个不同按键。3 个脚与 PXA 270 直接通信,INT 为中断脚,按键按下为低电平,
SCL 为 I2C 兼容串行时钟输入,SDA 为 I2C 兼容串行 I/O 口。tips:感谢大家
的阅读,本文由我司收集整编。仅供参阅!

相关主题