我正在编写一个主机驱动程序、该驱动程序必须将大量数据从网络发送到特定于供应商的全速器件。
我的器件会枚举、我可以使用 DMA 进行批量处理。
我一直在阅读 usbhostenum.c 中的现有错误、并已将其修补以供非 DMA 使用。 它可以正常工作。
不起作用的是输出的 DMA 模式。
下面是我的管道配置代码:
//用于发送数据的输出管道。 DFUInfo.ui32BulkOutPipe = USBHCSDPipeAlloc (0、 USBHCD_PIPLE_BULK_OUT_DMA、psDevice、DFUPipeCallback); //配置管道以与端点4配合使用。 if (DFUInfo.ui32BulkOutPipe!= 0){ int ret = USBHCPDPipeConfig (DFUInfo.ui32BulkOutPipe、 64、// uint32_t ui32MaxPayload -在描述符中观察到。 0、// uint32_t ui32Interval 4 // uint32_t ui32TargetEndpoint ); //确保它正常工作... if (ret!= 0){ USBHCPepeFree (DFUInfo.ui32BulkOutPipe); DFUInfo.ui32BulkOutPipe =-1; }
我看到的是、短写入(32字节)永远不会向总线发送数据。 较长的写入会卡在 USBHCPDPipeWrite()内部的 while (1)循环中、而它"等待状态更改"-这是有道理的、因为符号是 DMA 写入永远不会发生。
的文档
USBHDPipeSchedule()表示它用于输入事务,但代码表示它也会处理输出事务。 这是正确的方法吗?