查看: 7989|回复: 4

[其他] USB BULK OUT 模式传输大于64字节如何处理?

[复制链接]

该用户从未签到

1

主题

8

帖子

0

注册会员

Rank: 2

积分
64
最后登录
2016-9-5
发表于 2016-4-1 14:50:56 | 显示全部楼层 |阅读模式
我用KSDK 2.0,在FRDM_K64F板子上调试USB,通过修改 CDC工程,实现了BULK IN 和 BULK OUT功能收发数据,在FULL SPEED下 一包数据最大64字节,当小于64字节收发时功能正常,但一包数据主机发送(BULK OUT)大于64字节时,现在显示timeout error,显示信息如下:
success: device 0471:0111 opened
success: set configuration #1
success: claim_interface #0
success: bulk write 63 bytes
success: bulk read 63 bytes
error writing:
libusb0-dll:err [_usb_reap_async] timeout error


现在请教一下,KSDK 2.0中usb协议栈,如何处理接收大于64字节数据,是自动分包吗?还是说在主机端分包(64字节)发送?
我知道答案 目前已有4人回答
回复

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24903
最后登录
2025-7-22
发表于 2016-4-5 13:18:44 | 显示全部楼层
本帖最后由 小恩GG 于 2016-4-21 11:23 编辑

楼主你好!
这个需要修改代码,你可以在USB_device_descriptor.h中,把packet size定义大些试试。
/* Packet size. */
#define HS_CDC_VCOM_INTERRUPT_IN_PACKET_SIZE (16)
#define FS_CDC_VCOM_INTERRUPT_IN_PACKET_SIZE (16)
#define HS_CDC_VCOM_INTERRUPT_IN_INTERVAL (0x07) /* 2^(7-1) = 8ms */
#define FS_CDC_VCOM_INTERRUPT_IN_INTERVAL (0x08)
#define HS_CDC_VCOM_BULK_IN_PACKET_SIZE (64)
#define FS_CDC_VCOM_BULK_IN_PACKET_SIZE (64)
#define HS_CDC_VCOM_BULK_OUT_PACKET_SIZE (64)
#define FS_CDC_VCOM_BULK_OUT_PACKET_SIZE (64)

这个地方修改下size大小。
如果还有问题,欢迎继续跟帖!
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

8

帖子

0

注册会员

Rank: 2

积分
64
最后登录
2016-9-5
 楼主| 发表于 2016-4-7 19:22:58 | 显示全部楼层
本帖最后由 hoing 于 2016-4-7 19:38 编辑

好像USB FULL SPEED模式就支持64字节,我看了设备HID例程,在回调函数里,对接收响应有一个处理:
       case kUSB_DeviceHidEventRecvResponse:
            if (g_UsbDeviceHidGeneric.attach)
            {
                USB_DeviceHidSend(g_UsbDeviceHidGeneric.hidHandle, 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_DeviceHidRecv(g_UsbDeviceHidGeneric.hidHandle, USB_HID_GENERIC_ENDPOINT_OUT,
                                         (uint8_t *)&g_UsbDeviceHidGeneric.buffer[g_UsbDeviceHidGeneric.bufferIndex][0],
                                         USB_HID_GENERIC_OUT_BUFFER_LENGTH);
            }
            break;
用这个方式接收大于64字节的就没有问题
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2017-1-24 09:50
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    654

    主题

    3262

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    13128
    最后登录
    2019-1-27
    发表于 2016-4-21 11:16:27 | 显示全部楼层
    USB BULK OUT 模式传输大于64字节如何处理
    shili_2_1.jpg
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2016-12-22 15:37
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    10

    主题

    89

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    373
    最后登录
    2022-1-27
    发表于 2016-4-21 11:42:07 | 显示全部楼层
    我也在调试这个虚拟串口,有空交流下,大数据他自动拆分的,我认为!
    111701q0s5tgfggi45jg3i.jpg
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-22 18:58 , Processed in 0.093690 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表