码迷,mamicode.com
首页 > 移动开发 > 详细

MSM8909+Android5.1.1键盘驱动---sn7326介绍

时间:2016-03-08 18:07:54      阅读:800      评论:0      收藏:0      [点我收藏+]

标签:

MSM8909+Android5.1.1键盘驱动---sn7326介绍

 

1.     Sn7326概述

SN7326是一款带智能自扫描的键盘扩展芯片,支持多达8*8个按键。按下/松开按键的动作被编码成一个字节的数据存入到按键事件寄存器(key event register)中,主控制器可通过I2C串行总线读取按键事件寄存器。

 

SN7326具有去抖动功能,在任何按键按下时中断输出引脚会置低,为降低功耗,在没有按键动作时SN7326自动进入低功耗模式。

 

SN7326的主要特性

(1)   2.4V到5.5V的工作电压

(2)   400kHz的I2C串行接口

(3)   可检测多键同时按下

(4)   低至0.3uA(VDD典型值为3.3V)的待机电流

 

2.     原理图设计

我们设备有qwerty键盘和简易键盘通过SN7326按键扩展芯片,再经过电平转换芯片NLSX4378连接到CPU,如下图

技术分享

图1

SCL---GPIO_11

SDA---GPIO_10

KEY_INT---GPIO_98

KEY_RST---GPIO_2

KEY_UP---GPIO_90

KEY_DOWN---GPIO_91

 

CPU通过KEY_INT引脚知道是否按下按键,然后通过I2C读取SN7326寄存器的值来判断哪个按键按下,最后上报给系统。

 

 

3.     sn7326设备从地址

技术分享

图2

A0为读写标志位,A0=0指示写命令,A0=1指示读命令。我们的设计AD1和AD0连接到VDD,所以AD1=AD0=0,故设备地址为1011000+A0位

 

4.     sn7326寄存器介绍

有配置寄存器和按键状态寄存器。

技术分享

图3

(1)  配置寄存器(0x08)

DE位可用于控制是否使能去抖动功能。

LT位可设置长按键检测延时时间

(2)  按键状态寄存器(0x10)

DN位可判断是一个还是多个按键按下

KS位可知道按键是按下还是松开状态

KM指按键位置编码位,表示多达64个按键的编码,当读取完按键状态寄存器后(DN=0),此寄存器被设置为00000000,且/INT引脚被置高。

 

按键映射表如下:

技术分享

图4

需要重点注意,当中断产生时,一定要读取完按键状态寄存器的值,即读取按键状态寄存器的DN位=0时,停止读取按键状态寄存器的。

 

5.     典型应用

5.1  上电复位

SN7326包含有一个完整上电复位电路可确保在上电时所有寄存器被复位为已知的状态,当VDD>2.4V,上电电路会释放寄存器和I2C接口可正常工作。当VDD<VPOR(2.35V),SN7326复位所有寄存器的内容为默认值。

 

5.2  I2C复位控制

当I2C总线被锁死时,向RST管脚发送一个低电平,可使I2C总线重置得以继续通信,此复位动作不影响中断输出。

 

5.3  待机模式

当总线空闲时,SN7326自动进入待机模式,降低供电电流。

 

5.4  按键自动扫描

SN7326能支持一个8*8矩阵键盘扫描,8个列输入端口(OD端口)需要一个100kΩ,在待机状态时8个行输入端口(PP端口)被拉低。

如果检测到键盘状态变化,键盘会在反弹延时(debounce delay)时间内扫描3次。当捕获到按键按下/松开时,按键事件被编码并写入到按键状态寄存器中,然后通过/INT产生一个中断。按照从最低编码值到最高编码值的顺序读取按键状态寄存器来报告按键事件。

/INT引脚在按键事件被读完之前一直保持为低,一种情况除外,也就是当使能自动清空/INT的功能,如果在编程时间(由08h寄存器的SD位决定)没有读取完所有的按键事件数据,在编程时间到达时/INT引脚变为高电平。但是临时按键状态寄存器将保持不变和按键事件数据可继续读出,直到检测到另一个按键检测到之前。

 

5.5  去抖动(debounce)

当配置寄存器(08h)的SD=0/1和键盘状态改变时,键盘第1次扫描并保存数据到临时寄存器,等待6/3ms进行第2次扫描,再等待8/4ms进行第3次扫描,如果这几次扫描结果一样,按键事件数据就锁存到临时按键状态寄存器并/INT置低,否则,扫描停止和设备返回到待机模式,没有数据存入临时按键状态寄存器和/INT保持高电平。

 

5.6  长按键检测(Long-pressed Key Detect)

当配置寄存器(08h)的LE=1,开启长按键功能。当有按键长按时,芯片会自动重复发送中断信号和扫描按键,知道按键松开,长按键检测的时间间隔由配置寄存器(08h)的LT位决定。

 

5.7  按键事件中断

一旦有按键事件码锁存到临时按键状态寄存器中,向MCU输出一个中断信号,当键盘时间读取完之前,/INT保持为低,且任何键盘状态的改变都被忽略。但一种情况除外:如果使能了/INT自动清除功能,在编程时间到达时/INT引脚变为高电平。但是临时按键状态寄存器将保持不变和按键事件数据可继续读出,直到检测到另一个按键检测到之前。

 

5.8  自动清除INT功能

如果配置寄存器(08h)的ACI=01/10,使能此功能。在产生中断后,就算按键状态寄存器的值没有读取完成,在5/10ms自动置高/INT。当/INT为低电平时,按键状态寄存器的数据不会改变,不管/INT为高还是低,都可以读取阿年状态寄存器的值。但如果有新的按键事件会产生新中断,新数据会写入按键状态寄出去你,旧数据将会丢失,只有新的数据才可被读取。

 

5.9  输入端口滤波器

配置寄出去你的DE=1,使能输入端口滤波功能。当DE=0,输入端口滤波功能关闭,芯片会对输入端口的任何变化应答。当DE=1,任何小于100ns的脉冲都会被过滤掉,如果输入脉冲宽度大于100ns,芯片将会对信号产生应答。

技术分享

图5

 

MSM8909+Android5.1.1键盘驱动---sn7326介绍

标签:

原文地址:http://blog.csdn.net/loongembedded/article/details/50827444

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!