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.

[参考译文] Starterware/TM4C1290NCPDT:无法在 USB_EVENT_RX_Available 期间从 USBBufferDataAvailable 获取总长度。

Guru**** 2350610 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/614991/starterware-tm4c1290ncpdt-unable-to-get-total-length-from-usbbufferdataavailable-during-usb_event_rx_available

器件型号:TM4C1290NCPDT

工具/软件:Starterware

尊敬的所有人:

我有例程 RxHandler、并且电路板正在通过 CDC API 配置为 USB 虚拟 UART。



现在,我必须从 USB 接收64字节以上的帧,因此 如果我在下面的代码中这样做,我只能从接收到的帧中获得最后的字节编号。 即、如果帧为70字节、则从 USBBufferDataAvailable 例程获得的结果为6字节  

案例 USB_EVENT_RX_Available:
{
//
//将一些字符输入 UART TX FIFO 并启用
//中断、这样当有更多的空间时、我们就会被告知。
//

//
//读取 Rx 缓冲区中可用的字节数
//
RX_Buffer_Length = USBBufferDataAvailable(&g_sRxBuffer);

//
//从 RxBuffer 读取数据并将其移动到 RxFrame
//
ulRead = USBBufferRead ((tUSBBuffer *)&g_sRxBuffer、Rx_Frame、Rx_Buffer_Length);

if (ulRead)
USB_Decode_RxFrame_Send_TxFrame (Rx_Buffer_Length);

中断; 

如何获取接收到的帧的完整长度?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、smit、

    据我了解、USB_EVENT_RX_Available 并不意味着 RX 已完成、并且可以在接收到所有数据之前多次触发。 您是否曾尝试查看该案例是否多次触发?

    此外、您使用哪个示例作为此基础、以及哪个版本的 TivaWare?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我已经制作了自己的代码、如果我使用小于64 bb 的帧、它将运行良好、因为我得到的字节数小于64、但当我增加帧大于64时、将发生过 writting。

    如何克服问题还有其他方法吗? 如果有的话,请提出建议  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、smit、

    您的问题听起来可能与环缓冲区被覆盖有关。 对于 TX 和 RX、您对 USBBufferInit 使用什么?

    您能否发布完整代码? 我现在没有太多工作要做... 即使是您自己的代码、您是否使用了任何 TI 示例作为基准、以便我可以将其作为参考(因为这是我熟悉的地方)?