key驱动调试问题总结
2012-12-19 16:01
155 查看
这里的Keypad不是PC上用的编码式的键盘,而是在嵌入式设备中常见的非编码式的键盘。Keypad的常见连接方式有:矩阵扫描式的,直接GPIO检测式的。检测方式上,可以通过GPIO扫描自己实现检测,也有的CPU集成了扫描电路逻辑,可以进行自动检测。
某些键位的键值多数情况下读出来的值为一个恒定的错误值,比如理论上应该为0x20的值,读取出来变成0或0x420等等,而有时在放开的一瞬间又能够读到正确的键值,不同的板子基本上都是相同的一些键存在这样的问题。而某些键永远也不会出现读取错误的问题。
分析
开始认为是键盘的工艺问题,接触不良导致某些交叉点相互串扰造成的
但是仔细分析发现,所有出问题的按键都是处在同一个扫描行上,而且所有该扫描行的按键都有问题,表现出来都是叠加上了下一行同一列的键值。分析认为是在键盘驱动扫描的时候,相邻行之间扫描电平变化过快,硬件上由于有电容等因素存在,扫描电平在读取键值的时候尚未稳定,导致错误的读取了键值。
所以主要矛盾在于我所使用的CPU的SPI口的片选和时钟信号无法与数据线分开独立自由控制。
解决
从硬件上来说,要尽量减少扫描线上的附加电容
从软件上来说,可以增加改变行扫描电压和读取寄存器之间的延迟时间,等待充放电过程的完成。
一个键按下以后,可以检测到多个键值同时发生。
分析
这个问题其实是上一个问题的另一种表现形式,由于充放电过程的干扰,造成阵列扫描过程的误判。
解决
同上。
某些键按下以后,在驱动中可以看到键值已经检测到,但是上层应用从设备节点中却没有读取到相应的值。
分析
这个问题通常是因为没有正确的设置Input子系统中,键盘事件的掩码 input_dev->keybit,如果没有设置对应键值的掩码,input子系统会将相应的事件丢弃,不会向上层应用分发。
解决
正确设置每一个按键的掩码位
某些键位的键值取值出现固定的错误
症状某些键位的键值多数情况下读出来的值为一个恒定的错误值,比如理论上应该为0x20的值,读取出来变成0或0x420等等,而有时在放开的一瞬间又能够读到正确的键值,不同的板子基本上都是相同的一些键存在这样的问题。而某些键永远也不会出现读取错误的问题。
分析
开始认为是键盘的工艺问题,接触不良导致某些交叉点相互串扰造成的
但是仔细分析发现,所有出问题的按键都是处在同一个扫描行上,而且所有该扫描行的按键都有问题,表现出来都是叠加上了下一行同一列的键值。分析认为是在键盘驱动扫描的时候,相邻行之间扫描电平变化过快,硬件上由于有电容等因素存在,扫描电平在读取键值的时候尚未稳定,导致错误的读取了键值。
所以主要矛盾在于我所使用的CPU的SPI口的片选和时钟信号无法与数据线分开独立自由控制。
解决
从硬件上来说,要尽量减少扫描线上的附加电容
从软件上来说,可以增加改变行扫描电压和读取寄存器之间的延迟时间,等待充放电过程的完成。
只按下一个键却读取到多个键值
症状一个键按下以后,可以检测到多个键值同时发生。
分析
这个问题其实是上一个问题的另一种表现形式,由于充放电过程的干扰,造成阵列扫描过程的误判。
解决
同上。
某些键值驱动已经检测到,但上层应用无法读取得到
症状某些键按下以后,在驱动中可以看到键值已经检测到,但是上层应用从设备节点中却没有读取到相应的值。
分析
这个问题通常是因为没有正确的设置Input子系统中,键盘事件的掩码 input_dev->keybit,如果没有设置对应键值的掩码,input子系统会将相应的事件丢弃,不会向上层应用分发。
解决
正确设置每一个按键的掩码位
相关文章推荐
- key驱动调试问题总结
- LCD驱动调试常见问题总结
- lcd驱动调试常见问题总结
- 触摸屏驱动调试常见问题总结
- camera 驱动调试常见问题总结
- lcd驱动调试常见问题总结
- camera 驱动调试常见问题总结
- 触摸屏驱动调试常见问题总结
- CCS3.1调试问题总结(不断更新)37256107249
- 驱动调试常见问题_Camera
- android 动态调试驱动的总结
- spi总线的mmc卡驱动调试总结
- 调试一个奇怪问题的总结
- LCD驱动调试中部分常见问题的分析及解决办法
- LCD驱动调试中部分常见问题的分析及解决办法
- 开发中真机调试遇到的问题总结
- 关于在Helper2416开发板编译内核和驱动的问题总结
- c++开发中,调试排查问题总结
- linux驱动--调试方法总结
- 调试单向链表遇到问题总结