TMS320F28377D: 自行编写 的USB CDC 主机驱动,可以完成枚举过程 但是无法与CDC设备进行数据通信

Part Number: TMS320F28377D
Other Parts Discussed in Thread: C2000WARE

TMS320F28377D芯片 提供的例程中 没有 提供 USB CDC主机的例程或者驱动,所以 我自己编写 该CDC类驱动程序。基于 提供的 USB library以及例程,完成了设备枚举过程,请求到了 设备的端点描述符,但是 在主机与设备之间无法进行数据通信,设备无法收到 主机发送的数据,主机也无法触发接收中断,收不到设备的数据。想问一下 我的做法哪里存在问题?

篇幅有点长,我在这里总结一下问题:

在完成枚举过程,获取设备的端点描述符,并为端点初始化后:

1)主机向设备发送数据:使用 USBHCDPipeWrite 函数 就可以进行数据发送 是否正确?

      在调用该函数后,触发 中断,上报USB_EVENT_TX_COMPLETE事件,是否代表 USB主机成功发送并收到来自设备的正确应答?

2) 主机接收数据 :

         使用 USBHCDPipeRead 发送IN包 阻塞等待接收 ,

         或使用 USBHCDPipeSchedule 定时发送IN包 ,然后在触发接收中断后,使用 USBHCDPipeReadNonBlocking 读取接收数据。

 上述两种接收 设备数据的方法 是否正确,是否有缺漏?

下面是我的代码及思路:

 1、首先 创建 tUSBHostClassDriver 结构体的 CDC驱动程序,这里定义void *(*pfnOpen)(tUSBHostDevice *psDevice) 的函数,根据 接口描述符和端点描述符 ,为端点分配管道并初始化。

该设备中 有两个接口描述符、第一个接口描述符中有一个中断端点,第二个接口描述符中有 一个 IN  一个OUT端点。为这三个端点 分配 管道,并对管道进行初始化,最后 调用该设备的回调函数 发出已连接的事件

2、 枚举完成后,想与设备进行通信,调用 USBHCDPipeWrite 函数,传入 枚举时 初始化的 OUT端点的管道,并送入要发送的数据及长度。

a、请问 USB主机 向设备发送数据,调用USBHCDPipeWrite 是不是就可以完成 发送OUT包、发送数据的全过程。

b、调试发现,执行USBHCDPipeWrite函数后,会触发 发送完成中断,调用OUT端点的回调函数 上报 USB_EVENT_TX_COMPLETE事件。 这是否意味着 主机发送的数据被设备接收,且设备返回了正确应答ACK?

3、虚拟串口CDC是 双向通信,如果 USB主机想接收数据,需要向设备发送IN包。那么在当前USB library中 我如何发送IN包 接收数据呢?

我的理解是:

a、使用 USBHCDPipeRead 发送IN包 阻塞等待接收 ,

b、或使用 USBHCDPipeSchedule 定时发送IN包 ,然后在触发接收中断后,使用 USBHCDPipeReadNonBlocking 读取接收数据?

请问上述的思路做法是否正确。