linux GPIO模拟PS2 键盘驱动

本文介绍如何在Linux下使用GPIO模拟PS2键盘驱动,包括PS2协议、键码处理,以及通过input子系统上报按键事件。详细阐述了初始化input设备、设置GPIO中断、定时器处理以及中断采集数据的步骤。
摘要由CSDN通过智能技术生成

背景:公司有一个PS2键盘驱动的项目,没有控制器,需要模拟PS2协议,检测按键并通过input子系统将按键时间上报

一、准备:

        1、PS2协议:

                PS2有两个控制线,时钟线和数据线。当按键按下或抬起,设备会向主机发送键码。时钟由设备产生,主机需要在下降沿去数据线采集一位数据。按键码由多个11位数据组成:0 (起始)+ 8位(数据)+1/0(奇偶校验位)+1(结束位)。数据位是先发的低位!

             PS2接口是以前台式电脑后边留的圆形接口,6个引脚,主要用VCC,GND,clk,data。与AT(5脚)一样

        2、键码:

                PS2键码大致分为两类:

                   第1类按键 通码为一个字节,断码为0xF0+通码形式。如A键,其通码为0x1C;断码为0xF0 0x1C。

                   第2类按键 通码为两字节0xE0+0xXX形式,断码为0xE0+0xF0+0xXX形式。如Right Ctrl键,其通码为0xE0 0x14;断码为0xE0 0xF0 0x14。

                    通码为按下,段码为抬起

        3、input 子系统下的PS2键盘驱动(因为没有驱动器,没有使用这个框架):

               1,Linux X86 PS/2 键盘驱动框架流程(以下均已Intel 8042键盘控制器为例): 
               1.1 设备初始化注册流程: 
                    键盘控制器硬件驱动(i8042.c) -> 串口驱动核心(serio.c) -> 串口驱动(atkbd.c) 
                    -> 输入驱动核心(input.c) -> 输入事件驱动程序(keyboard.c) -> 虚拟控制台驱动模块;

                    注册流程: 
                    1.1.1,键盘控制器硬件驱动(i8042.c): 

                    1)、首先键盘硬件驱动程序读写键盘硬件控制器寄存器,配置寄存器并获取相控制器硬件信息(PS/2键盘控制器一共有三个寄存器加一个命令端口,命令数量也不多,下载地址:https://download.csdn.net/download/a372048518/9835565) 

               注意:Intel8042键盘控制器内部已经实现了PS/2时序协议,硬件驱动程序只需要读写相关寄存器即可;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值