一:HID的基础知识分享
HID类设备的定义和分类
HID类(Human Interface Device)是USB(UniversalSerialBus)规范中定义的一种设备类别,专门用于与用户进行交互的输入输出设备。这类设备包括键盘、鼠标、游戏控制、触摸屏、力反馈设备等。HID设备主要为人类用户提供直接的交互体验,因此它们的设计更注重于简单性、直观性和易用性。
HID设备的分类可以根据其功能属性来进行,大致可分为输入设备、输出设备和复合设备三类。输入设备主要指那些仅负责向计算机系统发送数据的设备,如键盘和鼠标。输出设备通常是指能够向用户提供反馈的设备,例如有压力反馈的游戏控制器。复合设备则能够同时执行输入和输出功能,例如某些带有LED灯的键盘,不仅能够接收按键输入,还可以通过LED灯显示状态。
HID报告描述符的结构与意义
HID报告描述符是HID协议的核心组成部分,它定义了一个HID设备如何向主机报告数据。报告描述符包含了关于设备输入、输出、特征等信息的详细说明,以及这些信息如何在数据包中被编排和传输。报告描述符由一系列的项目组成,每个项目代表了设备的一个功能或数据字段。每个项目都有一个特定的数据类型,例如按钮、值(例如滑动条或旋钮的值)、数组(例如一组开关或按键)等。这些项目以树状结构组织,可以被主机软件解析,从而确定如何读取和解释来自设备的数据。
数据包结构的设计遵循了设备和主机之间的交互协议。主机通过读取HID报告描述符来理解设备的通信需求,从而确保数据传输的准确性和同步性。设备和主机之间的交互过程和数据包的传输机制将在下一节详细介绍。
二:AI8051的USB知识分享:
Ai8051U系列单片机内部集成USB2.0/USB1.1兼容全速USB,6个双向端点,支持4种端点传输模式(控制传输、中断传输、批量传输和同步传输),每个端点拥有64字节的缓冲区。
USB模块共有1280字节的FIFO,结构如下:

三:相关寄存器:
3,1 USB相关的寄存器

四:软件代码:
4.1 USB初始化代码:
void usb_init()
{
P3M0 &= ~0x03;
P3M1 |= 0x03;
IRC48MCR = 0x80;
while (!(IRC48MCR & 0x01));
USBCLK = 0x00;
USBCON = 0x90;
usb_write_reg(FADDR, 0x00);
usb_write_reg(POWER, 0x09);
usb_write_reg(INTRIN1E, 0x3f);
usb_write_reg(INTROUT1E, 0x3f);
usb_write_reg(INTRUSBE, 0x07);
usb_write_reg(POWER, 0x01);
DeviceState = DEVSTATE_DEFAULT;
Ep0State.bState = EPSTATE_IDLE;
InEpState = 0x00;
OutEpState = 0x00;
EUSB = 1;
}4.2 USB读取,写入函数
BYTE usb_read_fifo(BYTE fifo, BYTE *pdat)
{
BYTE cnt;
BYTE ret;
ret = cnt = usb_read_reg(COUNT0);
while (cnt--)
{
*pdat++ = usb_read_reg(fifo);
}
return ret;
}
void usb_write_fifo(BYTE fifo, BYTE *pdat, BYTE cnt)
{
while (cnt--)
{
usb_write_reg(fifo, *pdat++);
}
}五:实物测试图片如下所示:
5.1 USB开发注意事项:
每个USB产品都必须有自己唯一的VID&PID组合,才能被电脑正确识别。若两个不同的USB产品对应的VID&PID组合相同,则可能出现电脑对USB产品的识别出现异常,从而无法正常使用USB产品。为避免出现这种情况,VID和PID均需通过正规途径进行统一规划和分配。
目前已通过USB-IF组织取得了专用USB设备的VID编号13503(十六进制:34BF)。客户使用USB芯片开发自己的USB产品时,若您已通过其它途径获取了您自己的VID,则相应的PID可自行规划。若您的USB产品需要使用官方VID,则产品的PID务必请STC公司申请。
使用USB工具查看一下,VID和PID;测试功能正常。

使用USB的HID模式进行的数据回传显示如下所示:

我要赚赏金
