PS/2接口通信协议解析

Download Report

Transcript PS/2接口通信协议解析

PS/2接口通信协议分析
1
PS/2 键盘通信原理


PS/2设备履行一种双向同步串行协议
PS/2键盘的通信可分为:



键盘——〉主机
主机——〉键盘
主机可以是计算机、实验板等,这里我们特
指FPGA实验板。
2
键盘各针的定义






1、数据输入、输出
2、未定义
3、地
4、电源(+5V)
5、键盘时钟
6、未定义
3
PS/2键盘接口协议分析

每按一个键会产生如下数据




按下产生一组串行数据;
松开产生两组串行数据
每组串行数据11-12位,从低位开始传输;
每组数据包括



1位起始位,低电平;
8位数据位(即扫描码),从低位开始传输;
1位奇偶校验位





如果扫描码中1的个数为奇数,该位取0;
如果扫描码中1的个数为偶数,该位取1。
1位结束位,高电平;
1位回执位(仅用于主机到键盘通信);
本次实验只用到键盘到主机的通信。
4
PS/2键盘接口协议分析 (续)
扫描码



扫描码分为通码和断码,一般用16进制表示
通码和断码
 当一个键被按下就发送通码(Make)
 当一个键被释放就发送断码(Break)
 每个按键被分配了唯一的通码和断码,这样
主机通过查找唯一的扫描码就可以测定是按
下哪个键
扫描码包含在每组串行数据中
5
键盘扫描码
6
PS/2键盘接口协议分析 (续)
一次按键过程产生的数据分析
 举例:按下和松开一次“A”键时产生的数据,
注意低位在前



第1组:00011100001(按下,扫描码1C )
第2组:00000111111(松开前一组,扫描码F0)
第3组:00011100001(松开后一组,扫描码1C )
7
用数字示波器记录
键盘时钟及键盘数
据信号
8
松开A键时记录的串行数据波形
键盘时钟
串行数据
低位在前
9
PS/2键盘接口程序模块分析
PS/2键盘接口程序分为两个主要模块:
 模块1:键盘数据接收及分析


滤波:键盘产生的数据具有毛刺,需要滤波
接收数据




接收11个串行数据,串并转换。
奇偶校验
提取其中8位扫描码
模块2:键盘数据译码及输出

译码



对接收来的数据注意区分是通码还是断码
对0到9等数字以及符号键进行译码
输出:将译码得到的字符输出
10
PS/2键盘接口程序片段(滤除毛刺)
entity PS2 is
port(
in_data
:in std_logic;
in_clk :in std_logic;
--键盘读入数据
--键盘时钟
………
end PS2;
);
architecture behave of PS2 is
signal ps_data,d
:std_logic;
--滤波后的键盘数据
signal ps_clk,c
:std_logic;
--滤波后的键盘时钟
signal clock
:std_logic;
--5M
begin
PROCESS(clock)
BEGIN
IF clock‘event and clock=’1‘ THEN
--滤除键盘信号中的毛刺
ps_clk<= in_clk;
ps_data<= in_data;
END IF;
END PROCESS;

思考一下,以上程序为何可滤除信号中毛刺?

根据PS/2原理,如何设计键盘数据读取、串并转换、扫描码译码等程序?