产品新知 您所在的位置:电子展览网 > 行业资讯 > 产品新知

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




关键词:

1 引 言

随着嵌入式系统的飞速发展,嵌入式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口。

当有键按下时,连接到键盘的11个脚会有电平的变化,芯片会根据电平的变化得到按下键的键值,然后存放在芯片内部的FIFO中,同时把INT脚下拉为低电平。此时键盘驱动在检测到INT变低之后会通过SDA向芯片发送一系列命令,芯片通过SDA传回给驱动相应的状态及值。SCL和SDA的电平变化严格遵循2.2节介绍的I2C总线通信信号规律。

分享到:
收藏 打印
相关新闻
  • 没有相关信息!