最新PS2接口协议解析及应用 精品Word格式文档下载.docx
《最新PS2接口协议解析及应用 精品Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《最新PS2接口协议解析及应用 精品Word格式文档下载.docx(6页珍藏版)》请在冰豆网上搜索。
到了1987年,IBM又推出了PS/2键盘接口标准。
该标准仍旧定义了84~101键,但是采用6脚mini-DIN连接器,该连接器在封装上更小巧,仍然用双向串行通讯协议并且提供有可选择的第三套键盘扫描码集,同时支持17个主机到键盘的命令。
现在,市面上的键盘都和PS/2及AT键盘兼容,只是功能不同而已。
2PS/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个起始位总是逻辑08个数据位低位在前1个奇偶校验位奇校验1个停止位总是逻辑11个应答位仅用在主机对设备的通讯中
表中,如果数据位中1的个数为偶数,校验位就为1;
如果数据位中1的个数为奇数,校验位就为0;
总之,数据位中1的个数加上校验位中1的个数总为奇数,因此总进行奇校验。
2.3PS/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。
通码是按键接通时所发送的编码,用两位十六进制数来表示,断码通常是按键断开时所发送的编码,用四位十六进制数来表示。
3PS/2接口的嵌入式软件编程方法
PS/2设备主要用于产生同步时钟信号和读写数据。
3.1PS/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.2PS/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释放数据线。
4用于工控机的双键盘设计
工控机通常要接标准键盘,但是为了方便操作,常常需要外接一个专用键盘。
此实例介绍了在工控PC机到PS/2总线上再接入一个自制专用键盘的应用方法。
该设计应能保证两个键盘单独工作,而且相互不能影响。
因此,不能直接把专用键盘和标准键盘一起接到工控PC的PS/2口。
鉴于这种情况,本设计使用模拟开关CD4052并通过时分复用工控PC的PS/2口,来使在同一个时刻只有一个键盘有效,从而解决上述问题。
其硬件原理图如图3所示。
其中P2口和P1口用于键盘扫描电路图中未画出,P0.0为数据端,P0.1为时钟端,P0.2为模拟开关选通端。
由于专用键盘不需要接收工控PC机的命令,所以软件中并不需要写这部分相应的代码。
通过软件可在专用键盘复位后把P0.2清0,以使模拟开关CD4052打开相应的通道。
这时工控PC的标准键盘将开始工作。
标准键盘可以完成工控PC刚启动时对外设检测的应答。
复位后的专用键盘不停地扫描有没有按键,如果有键按下则识别按键,并且按照预先的设计进行编码,同时调用发送程序并通过PS/2口发送到工控PC。
此时模拟开关关闭相
应通道将P0.2置1,专用键盘接入工控PCPS/2口的时钟线和数据线而工作,但标准键盘被模拟开关从PS/2的时钟线和数据线中断而不工作,这样,双键盘便可时分复用同一个工控PC机的PS/2口。
相应的发送子程序如下
#defineDATAP00用P0.0做数据线
#defineCLKP01用P0.1做时钟线
#defineINHIBITP02用P0.2做CD4052的INH端
#definePORTRP1用P1口做读入口
#definePORTWP2用P2口做写出口可以实现64个自定义键
voidsenducharx/***functionforsendacharda-ta***/
{
uchari,temp,char_temp;
bitflag_check=1;
INHIBIT=1;
//disablestandardkeyboard
delay_ms3;
temp=x;
fori=0;
i<8;
i++//findthenumberof1inthisucharxisoddornot
char_temp=temp&0x01;
ifchar_temp==0x01
flag_check=!
flag_check;
}
temp=temp>>1;
CLK=1;
//send1toP1thenreadP1
while!
CLK//ifCLKislowwait
;
DATA=1;
ifCLK==1
delay_us30;
//
ifCLK==1&&DATA==1//senddata
DATA=0;
//startbit0
delay_us10;
CLK=0;
delay_us5;
i++//send8bitsLSBfirst
>
DATA=1;
else
//DATA=bittemp&0x01;
//LSB
//sendcheckbit
DATA=flag_check;
delay_us1