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.

TMS320F28377D: USB host 向设备发送 IN包,设备回复 NACK,USB host 会持续发送IN包请求吗

Part Number: TMS320F28377D

使用 TI 的 usb library, 版本v210,使用 USBHCDPipeSchedule 函数 ,向 输入端点发送 IN包,请求设备数据。

测试发现,执行一次  USBHCDPipeSchedule(g_psCDCDevice.ui32BulkInPipe ,(uint8_t*)arry,2); 后 ,USB总线上持续有 数据通过。解析波形发现,host 一直在发送 IN包,而设备回复 NACK。

下图为 示波器波形,:USB host 持续发送IN包,设备持续回复 NACK。

下图为 NACK的波形:

请问:

 当前的 USB library 中,当设备回复 NACK时,

1、该 USB  library是否会持续发送 IN包请求数据,直到设备回复正确数据,不收到设备回复DATA包,就不停止发送 IN包请求? 是否有让 主机停止发送的条件,比如发送一定次数,自动放弃发送?

2、如果多次请求,设备回复均为 NACK, 是否会触发错误事件,如果会触发错误,则 该错误事件是什么?

  • 您好,

    感谢您对TI产品的关注!由于问题比较复杂,我需要询问更了解这款芯片的TI资深工程师,再为您解答,一旦得到回复会立即回复给您。

  • 您好!

    您能否提供有关该用例的更多详细信息? 哪个是器件、哪个是主机?

    USBHCDPipeSchedule 函数的返回值是什么?

  • 28377D 为主机,UB设备为一个 USB转网口模块,USB虚拟为串口。28377D 在 中断端点中 255ms发送一次IN包,请求模块设备数据。USBHCDPipeSchedule 函数负责发送IN包,不不阻塞接收,所以返回值为0 。 在设备有数据回复时,HOST 会不再发送IN包,直到255ms一次的中断端点发送IN包请求。

    目前 28377D主机与模块设备的USB 通信是成功的。但是设备不会时时都有数据上报,像设备返回NACK,后host持续有IN包发送,是不是有些浪费?或者说 USB通信本就是如此设计的。

  • 您好,

    由于它正在接收 NACK (表示设备尚未准备好接受数据)、USB 主机将重试传输数据;

    主机将再次尝试发送相同的数据、直到它从器件接收到正确认(ACK)、表示接收成功。

    我认为这是预期行为。