1. 项目概述与背景
在嵌入式系统和老旧设备改造中,PS/2接口键盘依然占据重要地位。这个104键PS/2键盘驱动项目,本质上是通过C语言实现了一套完整的键盘通信协议解析系统。不同于USB键盘的即插即用特性,PS/2键盘需要开发者精确掌握其底层通信时序和扫描码体系。
我最早接触这个项目是在2015年改造一台工业控制设备时,当时需要为其添加键盘输入功能。市面上的USB转PS/2适配器存在兼容性问题,最终决定直接开发原生PS/2驱动。经过多次迭代,这套驱动已经稳定运行在各种51单片机、STM8和STM32平台上。
2. PS/2协议深度解析
2.1 物理层特性
PS/2接口使用6针Mini-DIN连接器,但实际只用到4个引脚:
- VCC(+5V)
- GND
- DATA(双向数据线)
- CLK(时钟线,由键盘产生)
电气特性上需要注意:
- 采用集电极开路输出,必须外接上拉电阻(典型值4.7kΩ)
- 时钟频率10-16.7kHz,对应位宽60-100μs
- 数据线在空闲时保持高电平
2.2 通信协议细节
数据传输采用同步串行协议,每帧包含:
- 起始位(0)
- 8位数据(LSB先发)
- 奇校验位
- 停止位(1)
通信方向分为两种模式:
- 键盘→主机:键盘主动发送按键事件
- 主机→键盘:用于初始化、LED控制等
关键提示:PS/2是真正的双向协议,DATA线方向会根据通信模式动态切换,这点在硬件设计时必须考虑。
3. 硬件设计要点
3.1 微控制器选型
根据项目需求可选择不同级别的MCU:
| MCU类型 | 优点 | 适用场景 |
|---|---|---|
| 51系列 | 成本低,资源足够 | 简单键盘输入系统 |
| STM8 | 性价比高,低功耗 | 便携式设备 |
| STM32 | 性能强,扩展性好 | 需要复杂处理的系统 |
3.2 电路连接方案
推荐两种接法:
基础接法(无方向控制)
code复制键盘CLK → MCU GPIO(输入,上拉)
键盘DATA → MCU GPIO(开漏输出,上拉)
增强接法(带方向控制)
code复制键盘CLK → 74HC125(三态缓冲器)→ MCU GPIO
键盘DATA → 74HC245(双向收发器)→ MCU GPIO
经验之谈:在工业环境中,建议使用增强接法并添加TVS二极管保护,可有效防止ESD损坏。
