PS/2接口协议解析及应用
PS/2接口协议解析及应用/摘要:文中详细介绍了PS/2接口协议的内容、电气特性和标准键盘的第二套键盘扫描码集。给出了基于嵌入式系统的PS/2接口的软、硬件实现方法,并介绍了工控PC外接双键盘的解决方案。
1 PS/2连连接口标准的发展过程
--计算机数值数值工业的发展,作为计算机数值数值常用写入设备的键盘也日新月异。1981年IBM推出了IBMPC/XT键盘及其连连接口标准。该标准定义了83键,应用5脚DIN连接器和简便的串行协议。实际上,第一套键盘扫描码集并没有主机到键盘的命令。为此,1984年IBM推出了IBMAT键盘连连接口标准。该标准定义了84~101键,应用5脚DIN连接器和双向串行通讯协议,此协议依照第二套键盘扫描码集设定有8个主机到键盘的命令。到了1987年,IBM又推出了PS/2键盘连连接口标准。该标准仍旧定义了84~101键,但是应用6脚mini-DIN连接器,该连接器在封装上更小巧,仍然用双向串行通讯协议并而而且提供有可选用的第三套键盘扫描码集,同时支持17个主机到键盘的命令。现在,市面上的键盘全部和PS/2及AT键盘兼容,只是功能不一样而已。
2 PS/2连连接口硬件
2.1 物理连接器
一般,设定有五脚连接器的键盘称之为AT键盘,而设定有六脚mini-DIN连接器的键盘则称之为PS/2键盘。其实这两种连接器全部只有四个脚有意义。它们分别是Clock(时钟脚)、Data?数值脚 、+5V(电源脚)和Ground(电源地)。在PS/2键盘与PC机的物理连接上只要保证这四根线一一对应就可以了。PS/2键盘靠PC的PS/2端口提供+5V电源,另外两个脚Clock(时钟脚)和Data?数值脚 全部是集电极开路的,所以必须接大阻值的上拉电阻。它们平时保持高电平,有输出时才被拉到低电平,之后自动上浮到高电平。现在对比常用的连接器如图1所示。
2.2 电气特性
PS/2通讯协议是一种双向同步串行通讯协议。通讯的两端经过Clock(时钟脚)同步,并经过Data(数值脚)交换数值。任何一方如果想抑制另外一方通讯时,只需要把Clock(时钟脚)拉到低电平。如果是PC机和PS/2键盘间的通讯,则PC机必须做主机,也就是说,PC机可以抑制PS/2键盘发送数值,而PS/2键盘则不会抑制PC机发送数值。一般两设备间传输数值的大时钟频率是33kHz,大多数PS/2设备作业在10~20kHz。推荐值在15kHz左右,也就是说,Clock(时钟脚)高、低电平的持续时间全部为40μs。每一数值帧含有11~12个位,具体含义如表1所列。
表1 数值帧格式说明
1个起始位 总是逻辑0
8个数值位 (LSB)低位在前
1个奇偶校验位 奇校验
1个停止位 总是逻辑1
1个应答位 仅用在主机对设备的通讯中
表中,如果数值位中1的个数为偶数,校验位就为1;如果数值位中1的个数为奇数,校验位就为0;--数值位中1的个数加上校验位中1的个数总为奇数,因此总实行奇校验。
2.3 PS/2设备和PC机的通讯
PS/2设备的Clock(时钟脚)和Data?数值脚 全部是集电极开路的,平时全部是高电平。当PS/2设备等待发送数值时,它首先查验Clock(时钟脚)以确认其是否为高电平。如果是低电平,则认为是PC机抑制了通讯,此时它必须缓冲需要发送的数值直到重新获取总线的控制权(一般PS/2键盘有16个字节的缓冲区,而PS/2鼠标只有一个缓冲区仅存储后一个要发送的数值)。如果Clock(时钟脚)为高电平,PS/2设备便开始将数值发送到PC机。一般全部是由PS/2设备产生时钟信号。发送时一般全部是按照数值帧格式顺序发送。其中数值位在Clock(时钟脚)为高电平时准备好,在Clock(时钟脚)的下降沿被PC机读入。PS/2设备到PC机的通讯时序如图2所示。
当时钟频率为15kHz时,从Clock(时钟脚)的上升沿到数值位转变时间至少要5μs。数值改变到Clock(时钟脚)下降沿的时间至少也有5 μs,但不能大于25 μs,这是由PS/2通讯协议的时序规定的。如果时钟频率是其它值,功能数值的内容应稍作调动。
上述讨论中传输的数值是指对特定键盘的编码或者对特定命令的编码。一般应用第二套扫描码集所规定的码值来编码。其中键盘码分为通码(Make)和断码(Break)。通码是按键接通时所发送的编码,用两位十六进制数来表示,断码通常是按键断开时所发送的编码,用四位十六进制数来表示。
3 PS/2连连接口的嵌入式系统编程方法
PS/2设备主要用来产生同步时钟信号和读写数值。
3.1 PS/2向PC机发送一个字节
从PS/2向PC机发送一个字节可按照下面的步骤实行:
(1)检验测量试验时钟线电平,如果时钟线为低,则延时50μs;
(2)检验测量试验判别时钟信号是否为高,为高,则向下执行,为低,则转到(1);
(3)检验测量试验数值线是否为高,如果为高则继续执行,如果为低,则放弃发送(此时PC机在向PS/2设备发送数值,所以PS/2设备要转移到接收程序处接收数值);
(4)延时20μs(如果此时正在发送起始位,则应延时40μs);
(5)输出起始位(0)到数值线上。这里要注意的是:在送出每一位后全部要检验测量试验时钟线,以保证PC机没有抑制PS/2设备,如果有则中止发送;
(6)输出8个数值位到数值线上;
(7)输出校验位;
(8)输出停止位(1);
(9)延时30μs(如果在发送停止位时释放时钟信号则应延时50μs);
经过以下步骤可发送单个位:
(1)准备数值位(将需要发送的数值位放到数值线上);
(2)延时20μs;
(3)把时钟线拉低;
(4)延时40μs;
(5)释放时钟线;
(6)延时20μs。
3.2 PS/2设备从PC机接收一个字节
由于PS/2设备能提供串行同步时钟,--如果PC机发送数值,则PC机要先把时钟线和数值线置为请求发送的状态。PC机经过下拉时钟线大于100μs来抑制通讯,并而而且经过下拉数值线发出请求发送数值的信号,然后释放时钟。当PS/2设备检验测量试验到需要接收的数值时,它会产生时钟信号并记录下面8个数值位和一个停止位。主机此时在时钟线变为低时准备数值到数值线,可以在时钟上升沿锁存数值。而PS/2设备则要协作PC机才能读到准确的数值。具体连接步骤如下:
(1)等待时钟线为高电平。
(2)判别数值线是否为低,为高则错误退出,否则继续执行。
(3)读地址线上的数值内容,共8个bit,每读完一个位,全部应检验测量试验时钟线是否被PC机拉低,如果被拉低则要中止接收。
(4)读地址线上的校验位内容,1个bit。
(5)读停止位。
(6)如果数值线上为0(即还是低电平),PS/2设备继续产生时钟,直到接收到1而而且产生出错信号为止(因为停止位是1,如果PS/2设备没有读到停止位,则表明此次传输出错)。
(7 输出应答位。
(8) 检验测量试验奇偶校验位,如果校验失败,则产生错误信号以表明此次传输出现错误。
(9)延时45 μs,以便PC机实行下一次传输。
读数值线的步骤如下:
(1)延时20μs;
(2)把时钟线拉低?
(3)延时40μs?
(4)释放时钟线?
(5)延时20μs?
(6)读数值线。
下面的步骤可用来发出应答位;
(1)延时15μs;
(2)把数值线拉低;
(3)延时5μs;
(4)把时钟线拉低;
(5)延时40μs;
(6)释放时钟线;
(7)延时5μs;
(8)释放数值线。
--计算机数值数值工业的发展,作为计算机数值数值常用写入设备的键盘也日新月异。1981年IBM推出了IBMPC/XT键盘及其连连接口标准。该标准定义了83键,应用5脚DIN连接器和简便的串行协议。实际上,第一套键盘扫描码集并没有主机到键盘的命令。为此,1984年IBM推出了IBMAT键盘连连接口标准。该标准定义了84~101键,应用5脚DIN连接器和双向串行通讯协议,此协议依照第二套键盘扫描码集设定有8个主机到键盘的命令。到了1987年,IBM又推出了PS/2键盘连连接口标准。该标准仍旧定义了84~101键,但是应用6脚mini-DIN连接器,该连接器在封装上更小巧,仍然用双向串行通讯协议并而而且提供有可选用的第三套键盘扫描码集,同时支持17个主机到键盘的命令。现在,市面上的键盘全部和PS/2及AT键盘兼容,只是功能不一样而已。
2 PS/2连连接口硬件
2.1 物理连接器
一般,设定有五脚连接器的键盘称之为AT键盘,而设定有六脚mini-DIN连接器的键盘则称之为PS/2键盘。其实这两种连接器全部只有四个脚有意义。它们分别是Clock(时钟脚)、Data?数值脚 、+5V(电源脚)和Ground(电源地)。在PS/2键盘与PC机的物理连接上只要保证这四根线一一对应就可以了。PS/2键盘靠PC的PS/2端口提供+5V电源,另外两个脚Clock(时钟脚)和Data?数值脚 全部是集电极开路的,所以必须接大阻值的上拉电阻。它们平时保持高电平,有输出时才被拉到低电平,之后自动上浮到高电平。现在对比常用的连接器如图1所示。
2.2 电气特性
PS/2通讯协议是一种双向同步串行通讯协议。通讯的两端经过Clock(时钟脚)同步,并经过Data(数值脚)交换数值。任何一方如果想抑制另外一方通讯时,只需要把Clock(时钟脚)拉到低电平。如果是PC机和PS/2键盘间的通讯,则PC机必须做主机,也就是说,PC机可以抑制PS/2键盘发送数值,而PS/2键盘则不会抑制PC机发送数值。一般两设备间传输数值的大时钟频率是33kHz,大多数PS/2设备作业在10~20kHz。推荐值在15kHz左右,也就是说,Clock(时钟脚)高、低电平的持续时间全部为40μs。每一数值帧含有11~12个位,具体含义如表1所列。
表1 数值帧格式说明
1个起始位 总是逻辑0
8个数值位 (LSB)低位在前
1个奇偶校验位 奇校验
1个停止位 总是逻辑1
1个应答位 仅用在主机对设备的通讯中
表中,如果数值位中1的个数为偶数,校验位就为1;如果数值位中1的个数为奇数,校验位就为0;--数值位中1的个数加上校验位中1的个数总为奇数,因此总实行奇校验。
2.3 PS/2设备和PC机的通讯
PS/2设备的Clock(时钟脚)和Data?数值脚 全部是集电极开路的,平时全部是高电平。当PS/2设备等待发送数值时,它首先查验Clock(时钟脚)以确认其是否为高电平。如果是低电平,则认为是PC机抑制了通讯,此时它必须缓冲需要发送的数值直到重新获取总线的控制权(一般PS/2键盘有16个字节的缓冲区,而PS/2鼠标只有一个缓冲区仅存储后一个要发送的数值)。如果Clock(时钟脚)为高电平,PS/2设备便开始将数值发送到PC机。一般全部是由PS/2设备产生时钟信号。发送时一般全部是按照数值帧格式顺序发送。其中数值位在Clock(时钟脚)为高电平时准备好,在Clock(时钟脚)的下降沿被PC机读入。PS/2设备到PC机的通讯时序如图2所示。
当时钟频率为15kHz时,从Clock(时钟脚)的上升沿到数值位转变时间至少要5μs。数值改变到Clock(时钟脚)下降沿的时间至少也有5 μs,但不能大于25 μs,这是由PS/2通讯协议的时序规定的。如果时钟频率是其它值,功能数值的内容应稍作调动。
上述讨论中传输的数值是指对特定键盘的编码或者对特定命令的编码。一般应用第二套扫描码集所规定的码值来编码。其中键盘码分为通码(Make)和断码(Break)。通码是按键接通时所发送的编码,用两位十六进制数来表示,断码通常是按键断开时所发送的编码,用四位十六进制数来表示。
3 PS/2连连接口的嵌入式系统编程方法
PS/2设备主要用来产生同步时钟信号和读写数值。
3.1 PS/2向PC机发送一个字节
从PS/2向PC机发送一个字节可按照下面的步骤实行:
(1)检验测量试验时钟线电平,如果时钟线为低,则延时50μs;
(2)检验测量试验判别时钟信号是否为高,为高,则向下执行,为低,则转到(1);
(3)检验测量试验数值线是否为高,如果为高则继续执行,如果为低,则放弃发送(此时PC机在向PS/2设备发送数值,所以PS/2设备要转移到接收程序处接收数值);
(4)延时20μs(如果此时正在发送起始位,则应延时40μs);
(5)输出起始位(0)到数值线上。这里要注意的是:在送出每一位后全部要检验测量试验时钟线,以保证PC机没有抑制PS/2设备,如果有则中止发送;
(6)输出8个数值位到数值线上;
(7)输出校验位;
(8)输出停止位(1);
(9)延时30μs(如果在发送停止位时释放时钟信号则应延时50μs);
经过以下步骤可发送单个位:
(1)准备数值位(将需要发送的数值位放到数值线上);
(2)延时20μs;
(3)把时钟线拉低;
(4)延时40μs;
(5)释放时钟线;
(6)延时20μs。
3.2 PS/2设备从PC机接收一个字节
由于PS/2设备能提供串行同步时钟,--如果PC机发送数值,则PC机要先把时钟线和数值线置为请求发送的状态。PC机经过下拉时钟线大于100μs来抑制通讯,并而而且经过下拉数值线发出请求发送数值的信号,然后释放时钟。当PS/2设备检验测量试验到需要接收的数值时,它会产生时钟信号并记录下面8个数值位和一个停止位。主机此时在时钟线变为低时准备数值到数值线,可以在时钟上升沿锁存数值。而PS/2设备则要协作PC机才能读到准确的数值。具体连接步骤如下:
(1)等待时钟线为高电平。
(2)判别数值线是否为低,为高则错误退出,否则继续执行。
(3)读地址线上的数值内容,共8个bit,每读完一个位,全部应检验测量试验时钟线是否被PC机拉低,如果被拉低则要中止接收。
(4)读地址线上的校验位内容,1个bit。
(5)读停止位。
(6)如果数值线上为0(即还是低电平),PS/2设备继续产生时钟,直到接收到1而而且产生出错信号为止(因为停止位是1,如果PS/2设备没有读到停止位,则表明此次传输出错)。
(7 输出应答位。
(8) 检验测量试验奇偶校验位,如果校验失败,则产生错误信号以表明此次传输出现错误。
(9)延时45 μs,以便PC机实行下一次传输。
读数值线的步骤如下:
(1)延时20μs;
(2)把时钟线拉低?
(3)延时40μs?
(4)释放时钟线?
(5)延时20μs?
(6)读数值线。
下面的步骤可用来发出应答位;
(1)延时15μs;
(2)把数值线拉低;
(3)延时5μs;
(4)把时钟线拉低;
(5)延时40μs;
(6)释放时钟线;
(7)延时5μs;
(8)释放数值线。