This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320C6748: TMS320C6748:使用硬件USB,使用CPPI DMA发送长数据,通过串口调试助手可以明显看到数据发送的时间会逐渐变长,可能导致此现象的原因都有哪些??????

Part Number: TMS320C6748

大家好:

       如题,现在在做USB的驱动开发,主要是基于STARTWARE中的例子USB_DEV_SERIAL,将USB注册成CDC总线,发送端将DMA配置成Linux CDC模式,通过指令进行1M数据的发送,经过多次指令测试会明显发现在串口调试助手端会出现发送数据时间变成,从而导致在代码中在使能和去使能DMA中加入相应的延时不是很好控制。有好一点的方法可以解决这个问题吗??

祝好!!!!

  • 您好:

          我现在有一个问题需要追加咨询,关于USB开启CPPI DMA进行数据发送时,使用串口调试助手进行调试,通过接收的数据可以观察到当USB发送数据超过8M或9M或10M等多种不同的情况下也会出现卡死的现象,主要是卡在while ((HWREGH(usbInstance->usbBaseAddress + ulRegister) & 0x2) == 0x02)这句代码里面,我仿照PDK库中对cppi41dma.c中代码的修改,在此处加入延时判断,如果这句代码通过后会出现在dmaTxCompletion函数中的读取完成队列的操作中在读取寄存器600C时会出现读到的是个空值,进而导致对这个地址值操作时出现异常,上述描述是我测试中的现象。

          我的问题:USB硬件是不是不能发送超过一定数据量的数据,如果能有相关的文档或资料进行描述吗?如果不能,有没有相关的资料可以证明??或者是存在另一种原因,是我代码的使用上存在操作不当的地方,实际上USB可以实现任意数量级的数据传输????

    祝好!!!!

  • 您可以直接在我发的e2e帖子上追加问题,到时候负责USB这一块的工程师会一起回复。
    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1023707/tms320c6748-linux-cdc-mdoe-can-t-send-data-larger-than-4m





  • 请查看e2e工程师的回复

    Is this code referenced from any other TI provided driver? I am not sure how the USB drivers are implemented in TI RTOS, but I would think the normal sequence would be:

    delay(0xFFFFFFFF);//加入延时让DMA数据发送完成
    dmaTxCompletion(USB_INSTANCE, g_sCDCDevice.psPrivateCDCSerData->ucBulkINEndpoint);//队列发送完成,退出中断disableCoreTxDMA(USB_INSTANCE, g_sCDCDevice.psPrivateCDCSerData->ucBulkINEndpoint);//关闭DMA通道
    cppiDmaFreenBuffer((unsigned int *)dataBuf);//释放DMA缓存