zoukankan      html  css  js  c++  java
  • PS/2的相关知识

    PS/2接口

     很多微机上采用PS/2口来连接鼠标和键盘。PS/2接口与传统的键盘接口除了在接口外型、引脚有不同外,在数据传送格式上是相同的。现在很多主板用PS/2接口插座连接键盘,传统接口的键盘可以通过PS/2接口转换器连接主板PS/2接口插座。

    1 PS2接口标准的发展过程

    随着计算机工业的发展,作为计算机最常用输入设备的键盘也日新月异。1981IBM推出了IBM PCXT键盘及其接口标准。该标准定义了83键,采用5DIN连接器和简单的串行协议。实际上,第一套键盘扫描码集并没有主机到键盘的命令。为此,1984IBM推出了IBM AT键盘接口标准。该标准定义了84101键,采用5DIN连接器和双向串行通讯协议,此协议依照第二套键盘扫描码集设有8个主机到键盘的命令。到了1987年,IBM又推出了PS2键盘接口标准。该标准仍旧定义了84101键,但是采用6miniDIN连接器,该连接器在封装上更小巧,仍然用双向串行通讯协议并且提供有可选择的第三套键盘扫描码集,同时支持17个主机到键盘的命令。现在,市面上的键盘都和PS2AT键盘兼容,只是功能不同而已。

    2 PS2接口硬件

    21 物理连接器

    一般,具有五脚连接器的键盘称之为AT键盘,而具有六脚miniDIN连接器的键盘则称之为PS2键盘。其实这两种连接器都只有四个脚有意义。它们分别是Clock(时钟脚)、Data�数据脚 、+5V(电源脚)和Ground(电源地)。在PS2键盘与PC机的物理连接上只要保证这四根线一一对应就可以了。PS2键盘靠PCPS2端口提供+5V电源,另外两个脚Clock(时钟脚)和Data�数据脚 都是集电极开路的,所以必须接大阻值的上拉电阻。它们平时保持高电平,有输出时才被拉到低电平,之后自动上浮到高电平。现在比较常用的连接器如图1所示。

    22 电气特性

    PS2通讯协议是一种双向同步串行通讯协议。通讯的两端通过Clock(时钟脚)同步,并通过Data(数据脚)交换数据。任何一方如果想抑制另外一方通讯时,只需要把Clock(时钟脚)拉到低电平。如果是PC机和PS2键盘间的通讯,则PC机必须做主机,也就是说,PC机可以抑制PS2键盘发送数据,而PS2键盘则不会抑制PC机发送数据。一般两设备间传输数据的最大时钟频率是33kHz,大多数PS2设备工作在1020kHz。推荐值在15kHz左右,也就是说,Clock(时钟脚)高、低电平的持续时间都为40μs。每一数据帧包含1112个位,具体含义如表1所列。

    1 数据帧格式说明

    1个起始位 总是逻辑0

    8个数据位 (LSB)低位在前

    1个奇偶校验位 奇校验

    1个停止位 总是逻辑1

    1个应答位 仅用在主机对设备的通讯中

    表中,如果数据位中1的个数为偶数,校验位就为1;如果数据位中1的个数为奇数,校验位就为0;总之,数据位中1的个数加上校验位中1的个数总为奇数,因此总进行奇校验。

    23 PS2设备和PC机的通讯

    PS2设备的Clock(时钟脚)和Data�数据脚 都是集电极开路的,平时都是高电平。当PS2设备等待发送数据时,它首先检查Clock(时钟脚)以确认其是否为高电平。如果是低电平,则认为是PC机抑制了通讯,此时它必须缓冲需要发送的数据直到重新获得总线的控制权(一般PS2键盘有16个字节的缓冲区,而PS2鼠标只有一个缓冲区仅存储最后一个要发送的数据)。如果Clock(时钟脚)为高电平,PS2设备便开始将数据发送到PC机。一般都是由PS2设备产生时钟信号。发送时一般都是按照数据帧格式顺序发送。其中数据位在Clock(时钟脚)为高电平时准备好,在Clock(时钟脚)的下降沿被PC机读入。PS2设备到PC机的通讯时序如图2所示。

    当时钟频率为15kHz时,从Clock(时钟脚)的上升沿到数据位转变时间至少要5μs。数据变化到Clock(时钟脚)下降沿的时间至少也有5 μs,但不能大于25 μs,这是由PS2通讯协议的时序规定的。如果时钟频率是其它值,参数的内容应稍作调整。

    上述讨论中传输的数据是指对特定键盘的编码或者对特定命令的编码。一般采用第二套扫描码集所规定的码值来编码。其中键盘码分为通码(Make)和断码(Break)。通码是按键接通时所发送的编码,用两位十六进制数来表示,断码通常是按键断开时所发送的编码,用四位十六进制数来表示。

    3 PS2接口的嵌入式软件编程方法

    PS2设备主要用于产生同步时钟信号和读写数据。

    31 PS2PC机发送一个字节

    PS2PC机发送一个字节可按照下面的步骤进行:

    (1)检测时钟线电平,如果时钟线为低,则延时50μs

    (2)检测判断时钟信号是否为高,为高,则向下执行,为低,则转到(1)

    (3)检测数据线是否为高,如果为高则继续执行,如果为低,则放弃发送(此时PC机在向PS2设备发送数据,所以PS2设备要转移到接收程序处接收数据);

    (4)延时20μs(如果此时正在发送起始位,则应延时40μs);

    5)输出起始位(0)到数据线上。这里要注意的是:在送出每一位后都要检测时钟线,以确保PC机没有抑制PS2设备,如果有则中止发送;

    6)输出8个数据位到数据线上;

    7)输出校验位;

    8)输出停止位(1);

    9)延时30μs(如果在发送停止位时释放时钟信号则应延时50μs);

    通过以下步骤可发送单个位:

    1)准备数据位(将需要发送的数据位放到数据线上);

    2)延时20μs

    3)把时钟线拉低;

    4)延时40μs

    5)释放时钟线;

    6)延时20μs

    32 PS2设备从PC机接收一个字节

    由于PS2设备能提供串行同步时钟,因此,如果PC机发送数据,则PC机要先把时钟线和数据线置为请求发送的状态。PC机通过下拉时钟线大于100μs来抑制通讯,并且通过下拉数据线发出请求发送数据的信号,然后释放时钟。当PS2设备检测到需要接收的数据时,它会产生时钟信号并记录下面8个数据位和一个停止位。主机此时在时钟线变为低时准备数据到数据线,并在时钟上升沿锁存数据。而PS2设备则要配合PC机才能读到准确的数据。具体连接步骤如下:

    1)等待时钟线为高电平。

    2)判断数据线是否为低,为高则错误退出,否则继续执行。

    3)读地址线上的数据内容,共8bit,每读完一个位,都应检测时钟线是否被PC机拉低,如果被拉低则要中止接收。

    4)读地址线上的校验位内容,1bit

    5)读停止位。

    6)如果数据线上为0(即还是低电平),PS2设备继续产生时钟,直到接收到1且产生出错信号为止(因为停止位是1,如果PS2设备没有读到停止位,则表明此次传输出错)。

    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)释放数据线。

    诚者,君子之所守也。
  • 相关阅读:
    Linux下如何确认磁盘是否为SSD
    Nginx
    求两个Linux文本文件的交集、差集、并集
    DB磁盘满导致Zabbix Server Crash一例
    配置SSH Forward提升安全性
    更新ffmpeg
    linux系统日志__ratelimit: N callbacks suppressed
    servlet本质
    session与cookie的区别与联系
    Leetcode 19——Remove Nth Node From End of List
  • 原文地址:https://www.cnblogs.com/SkystarX/p/12179883.html
Copyright © 2011-2022 走看看