在线时间1312 小时
UID3124330
注册时间2015-11-26
NXP金币2828
TA的每日心情 | 开心 2019-3-5 08:47 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
金牌会员
 
- 积分
- 9002
- 最后登录
- 2025-7-17
|
板载有基于type-c 的Full Speed USB接口,在设备使用时这也是常用的外设,正常通讯还是用的到的。原理图如图1所示:
图1
连接图如图2所示:
图2
这部分依然参照官方的SDK例程,找到HID例程部分,如图3所示:
图3
读完代码以后,发现例程设置的数据为一帧8个字节,接收到数据以后将数据发送出去。这个在描述符文件中也可以看到。
为了便于测试,将一帧8个字节修改为一帧64个字节,同时接收和发送数据缓存也修改为64个字节,如下代码所示:
- uint8_t g_UsbDeviceHidGenericReportDescriptor[] = {
- 0x05U, 0x81U, /* Usage Page (Vendor defined)*/
- 0x09U, 0x82U, /* Usage (Vendor defined) */
- 0xA1U, 0x01U, /* Collection (Application) */
- 0x09U, 0x83U, /* Usage (Vendor defined) */
- 0x09U, 0x84U, /* Usage (Vendor defined) */
- 0x15U, 0x80U, /* Logical Minimum (-128) */
- 0x25U, 0x7FU, /* Logical Maximum (127) */
- 0x75U, 0x08U, /* Report Size (8U) */
- 0x95U, 0x40U, /* Report Count (8U),0x08 */
- 0x81U, 0x02U, /* Input(Data, Variable, Absolute) */
- 0x09U, 0x84U, /* Usage (Vendor defined) */
- 0x15U, 0x80U, /* Logical Minimum (-128) */
- 0x25U, 0x7FU, /* Logical Maximum (127) */
- 0x75U, 0x08U, /* Report Size (8U) */
- 0x95U, 0x40U, /* Report Count (8U) ,原值为0x08*/
- 0x91U, 0x02U, /* Output(Data, Variable, Absolute) */
- 0xC0U, /* End collection */
- };
复制代码- #define USB_HID_GENERIC_IN_BUFFER_LENGTH (64U) //(8U)
- #define USB_HID_GENERIC_OUT_BUFFER_LENGTH (64U) //(8U)
复制代码
例程里有一个很有意思的代码如下所示:
- USB_DeviceSendRequest(g_UsbDeviceHidGeneric.deviceHandle, USB_HID_GENERIC_ENDPOINT_IN,
- (uint8_t *)&g_UsbDeviceHidGeneric.buffer[g_UsbDeviceHidGeneric.bufferIndex][0],
- USB_HID_GENERIC_OUT_BUFFER_LENGTH);
- g_UsbDeviceHidGeneric.bufferIndex ^= 1U;
- return USB_DeviceRecvRequest(g_UsbDeviceHidGeneric.deviceHandle, USB_HID_GENERIC_ENDPOINT_OUT,
- (uint8_t *)&g_UsbDeviceHidGeneric.buffer[g_UsbDeviceHidGeneric.bufferIndex][0],
- USB_HID_GENERIC_OUT_BUFFER_LENGTH);
复制代码
这里其使用了一个双缓冲切换,用于提高数据处理效率。
实际的测试效果如图4所示:
图4
|
|