万能的技术支持们,使用8H8K64U做主芯片,做一个PC HID键盘,碰到以下问题。
一般PC HID键盘在按下和弹起时都会发送数据到PC,使用市场购买的HID键盘,
通过Bus Hound抓数据,按下SHIFT键和弹起是,抓到的数据如下:
红色箭头表示按下时转到的数据,绿色箭头表示弹起时抓到的数据。

按下“1”和弹起时抓到的数据如下:

###################################################
而我做使用STC8H8K64U,按下SHIFT键和弹起时,抓到的数据:

按下“1”键和弹起时,抓到的数据如下:

可以确定是,橙色框第2个数据和绿色框的数据不是代码自己发送的,不清除这些数据哪里来的,并且橙色框第2个数据还是12个字节,好像完全不符合HID报告的要求。
键盘的HID报告描述符使用STC官方的,如下:
char code HIDREPORTDESC[65] =
{
0x05,0x01, // USAGE_PAGE(Generic Desktop); 0x01 代表通用桌面
0x09,0x06, // USAGE(Keyboard); 0x06 代表键盘
0xa1,0x01, // COLLECTION(Application); 0x01 代表集合开始
0x05,0x07, // USAGE_PAGE(Keyboard); 0x07 代表键盘
//第1个自己描述
0x19,0xe0, // USAGE_MINIMUM(224); 定义修饰键的输入报告部分:
0x29,0xe7, // USAGE_MAXIMUM(255);
0x15,0x00, // LOGICAL_MINIMUM(0); 全局逻辑最小值0
0x25,0x01, // LOGICAL_MAXIMUM(1); 全局逻辑最大值1
0x75,0x01, // REPORT_SIZE(1); 全局报告大小1bit
0x95,0x08, // REPORT_COUNT(8); 全局报告数量8
0x81,0x02, // INPUT(Data,Variable,Absolute);
//第2个字节描述
0x75,0x08, // REPORT_SIZE(8);
0x95,0x01, // REPORT_COUNT(1);
0x81,0x01, // INPUT(Constant);
//第3-8字节描述
0x19,0x00, // USAGE_MINIMUM(0);
0x29,0x65, // USAGE_MAXIMUM(101);
0x15,0x00, // LOGICAL_MINIMUM(0);
0x25,0x65, // LOGICAL_MAXIMUM(101);
0x75,0x08, // REPORT_SIZE(8);
0x95,0x06, // REPORT_COUNT(6);
0x81,0x00, // INPUT(Data,Array);
0x05,0x08, // USAGE_PAGE(LEDs);
0x19,0x01, // USAGE_MINIMUM(1);
0x29,0x03, // USAGE_MAXIMUM(3);
0x15,0x00, // LOGICAL_MINIMUM(0);
0x25,0x01, // LOGICAL_MAXIMUM(1);
0x75,0x01, // REPORT_SIZE(1);
0x95,0x03, // REPORT_COUNT(3);
0x91,0x02, // OUTPUT(Data,Variable,Absolute);
0x75,0x05, // REPORT_SIZE(5);
0x95,0x01, // REPORT_COUNT(1);
0x91,0x01, // OUTPUT(Constant);
0xc0, // END_COLLECTION;
};
尝试过使用网上其它的键盘HID报告描述符,也是一样的结果。
STC技术支持是否有什么建议,我尝试下。