推荐下面的过程发送一个单一字节从仿真键盘/鼠标到主机:
1) 等待Clock = high
2) 延时 50 微秒
3) Clock s 仍旧为 high? No—到第1 步
4) Data = high? No—放弃 (并且从主机读取字节)
5) 延迟 20 毫秒 (=40 微秒 to the time Clock is pulled low in sending the start bit.)
6) 输出起始位 (0) \ 在发送所有这些位的每一位后
7) 输出 8 个数据位 > 测试时钟确认主机是否把它拉低了
8) 输出校验位 / 这说明主机要放弃这次传送
9) 输出停止位 (1)
10) 延迟30 毫秒 (=50 微秒 from the time Clock is released in sending the stop bit)
按如下的过程发送单个位:
1) 设置/复位数据
2) 延迟20 微秒
3) 把时钟拉低
4) 延迟40 微秒
5) 释放时钟
6) 延迟20 微秒
主机必须按下面的步骤发送数据到PS/2 设备:
1) 把时钟线拉低至少100 微秒
2) 把数据线拉低
3) 释放数据线
4) 等待设备把时钟线拉低
5) 设置/复位数据线发送第一个数据位
6) 等待设备把时钟拉高
7) 等待设备把时钟拉低
8) 重复 5-7 步 发送剩下的7 个数据位和校验位
9) 释放数据线
10) 等待设备把数据线拉低
11) 等待设备把时钟线拉低
12) 等待设备释放数据线和时钟线
两个重要的定时条件a 和b: a 在主机最初把书记现拉低后设备开始产生时钟脉
冲的时间必须步大于15ms; b 数据包被发送的时间必须不大于2ms 如果这两个条件不满足主
机将产生一个错误在包收到后主机为了处理数据立刻把时钟线拉低来抑制通讯如果主机发送的命
令要求有一个回应这个回应必须在书籍释放时钟线后20ms 之内被收到如果没有收到则主机产生
一个错误在设备到主机通讯的情况中时钟改变后的5 微秒内不应该发生数据改变的情况
要仿真一个鼠标或键盘我推荐你按如下的过程从主机读入数据:
在你的主程序中至少每10 毫秒检测数据线是否为低
如果数据线已被主机拉低则从主机读取一个字节
1) 等待时钟线为高
2) 数据线仍然为低吗
不有错误发生放弃
3) 读入8 个数据位 \ 在读入这些位后
4) 读入校验位 > 测试时钟线数否被主机拉低
5) 读入停止位 / 这就意味着放弃这次传送
6) 数据线仍旧为0 吗
是保持时钟直到数据1 然后产生一个错误
7) 输出应答位
8) 检查校验位
如果校验位不正确则产生一个错误
9) 延迟45 微秒给主机时间抑制下次的传送
按如下次序读取每位8 个数据位检验位和停止位
1) 延迟 20 微秒
2) 把时钟拉低
3) 延迟 40 微秒
4) 释放时钟
5) 延迟20 微秒
7) 读数据线
按如下次序发送应答位
1) 延迟15 微秒
2) 把数据线拉低
3) 延迟5 微秒
4) 把时钟线拉低
5) 延迟40 微秒
6) 释放时钟线
7) 延迟5 微秒
8) 释放数据线
如果你按了一个键这个键的通码被发送到计算机当你按下并按住这个键则这个键就变成了机打
着就意味着键盘将一直发送这个键的通码直到它被释放或者其他键被按下要想证实这点只要打开一
个文本编辑器并按下A 键当你首先按下这个键字符a 立刻出现在你的屏幕上在一个短暂
的延迟后接着出现一整串的a 直到你释放A 键这里有两个重要的参数机打延时是第一
个和第二个a 之间的延迟机打速率是在机打延时后每秒有多少字符出现你的屏幕上机打延时的
范围可以从0.25 秒到1.00 秒机打速率的范围可以从2.0cps(字符每秒)到30.0cps 你可以用Set
Typematic Rate/Delay 0xF3 命令来改变机打速率和延时
机打的数据不被键盘所缓冲在多个键被按下的情况下只有最后一个按下的键变成机打当这个键被
释放时机打重复就停止了甚至于其他的键依然还按着