none
关于USB通信协议中读取数据最小单位的问题,满足USB bulk transfer 收取不是最小单位数据

    问题

  • 最近写了一个USB读取数据的程序,规定了读取数据的最小单位为1024个字节。但是接收小于1024个字节的数据又不能收到到,比如16个字节的数据,一次发送过来,是无法收到这样的数据,要填满1024个字节才能在PC端的代码中收到数据。1024个字节是用来收大批量的数据的数据包长度,16个字节是硬件配置信息的确认帧。请问用什么样的方式,才能满足既能快速收到大批量的数据包,又能收到16个字节的硬件配置确认帧。

    其实也想过一种方案,把16个字节的数据填满1024个字节,再发送给PC端读USB设备数据的代码。但是又考虑到硬件软件运算速率,这个方案暂时阁下,所以请高手帮我想想这个办法该如何解决?在此谢过了。。。。

    2016年11月29日 7:24

全部回复

  • 可否在数据前加上长度信息,比如字符串i am a programmer

    可以这样编码 <Length>16</Length><i am a programmer>,一共是16个长度。

    解析时先取出长度信息,构造数据子节长度。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2016年11月29日 8:27
  • Hi 董雄铧 ,
    >>” 但是接收小于1024个字节的数据又不能收到到,比如16个字节的数据,一次发送过来,是无法收到这样的数据  ”

    据我知道的。USB有以下几种传输模式。
    1. Bulk Transfer
    2. Interrupt Transfer
    3. Isochronous Transfer
    4. Control Transfer

    在interrupt transfer 模式下面是支持8, 16, 32, 64字节传输在full speed模式下面, 512字节是在high speed模式下面。所以说USB是支持16字节的数据。
    可能是你的USB驱动没有支持这样功能,你可能需要改写驱动。

    如果你使用的是windows平台驱动,client驱动最少会有以下功能。
    1. 得到transfer的buffer
    2. 发送一个framework 的请求到USB驱动栈
    3. 实现一个完整的路径为了得到通知,当USB驱动得到完整的请求

    这儿有一个bulk transfer 请求的example. 当framework发送请求到client驱动,将会接收下面3个参数。
    1. WDFQUEUE 是管理framework请求队列
    2. WDFREQUEST每个请求的队列
    3. Transfer length的长度, 这个应该是可以支持16字节的。

    关于更详细的内容看MSDN 文档的记载
    Best Regards,
    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2016年11月30日 3:31
    版主