调试PS2的内容主要分为两个部分:1.设备(如键盘)发送数据给计算机。2.计算机在开机时设别设备。
调试的第一步,应先将设备(以下用键盘来代表设备)发送数据给计算机的通信协议调通,
这一步骤相对来说比较简单,调通后可以确保发送时序没有问题,因为在开机识别键盘时,需要应答计算机的命令。先用其他的好的键盘将你自己用单片机模拟的PS2键盘带入计算机中,然后调试程序,最终使你的PS2键盘能和计算机准确的通信。
调试完第一步,就可以接着调是PS2键盘的开机识别了。
在我们调试时先抓了一帧标准键盘的通信时序:
在上电的开始:
《图片无法上传》
在调试的最开始,我们一直不清楚A段时序是如何产生的,有什么作用,键盘是在什么时候开始发送自检通过命令0xAA(现在也不知道呵呵)。于是尝试着用CLK和DATA的与或运算,来找到发送自检通过的命令,但以失败告终。然后我们在单片机上电加了一段延时,通过调节延时的长短来避开A段,发送0xAA。没想到竟然通过了BIOS的检测,但当将硬盘接上的后,又不能通过检测。分析应该是由于加上硬盘后使A段的时间发生了变化故不能用延时做。
于是将延时去掉,初始化完后直接发送0xAA,(期间调了一段时间的PS2接收函数),竟然收到计算机的命令0x45(协议上每找到该命令),在回了0xFA后竟然通过了BIOS和Windos的检测。
接收函数最后ACK的输出与协议上的有点不同:
读完STOP为后,clk为高,延时,键盘将DATA拉低,在把CLK拉低,clk释放,data释放,键盘把CLK拉低,在拉高(协议上没有这两步)