|
本帖最后由 Saphire 于 2010-7-27 11:16 编辑
那天粗略了解了一下usb无冲,简单的说,无冲的实现有两个方面。
1、硬件可以区别冲突,可参见以下网页:www<dot>dribin<dot>org/dave/keyboard/one_html/,就是加个二极管,避免幽灵键。
2、软件处理。ps2协议使用事件型报告,usb hid使用状态型报告。
ps2的报告如下:
A按下了(发送A通码)
B按下了(发送B通码)
B抬起了(发送B断码)
A抬起了(发送A断码)
usb的报告如下,Capslock这类状态不在此队列。
当前A和B被按下
当前A和C被按下
usb hid规范中,键盘报告分成两种,
一种是给bios状态下用的,报告描绘符是主机默认,这种按键状态队列是6,就是一次最多6键按下被报告,如果多余六键,应该报告错误。
一种是正常状态下用,需要主机读取键盘的描绘符,我粗略看了,规范的默认实现是6,但是没有硬性规定不能超过6,这主要是基于早期USB带宽有限的考虑。
那么usb无冲我想到可以两种,一种是实现逻辑上的多个键盘,每个6x6。另一种是扩展描绘符,这可能会遇到兼容性问题,比如锁键等。因为主机侧驱动可能会偷懒。当然也可以定制一个主机键盘驱动。
plu的实现我不知是那种,如果有这个键盘,用bus监视工具一看就知道了。我想这个软件部分应该不值200吧?如果不是用那种固定好usb hid规范的芯片,自己用通用usb芯片实现hid规范的还是很容易的。 |
|