USBCNT0 USBF0 USBCS0
最近做usb hid相关的功能,途中遇到很多问题,请问上面的参数表示啥。假设我想知道第四个endpoint上有数据到来(out到usb),怎确定数据的长度,烦请ti大神告知为谢。
关于USBCNT0 USBF0 USBCS0等的含义,您可以参考
http://www.ti.com/lit/ug/swru191f/swru191f.pdf
第193页USB Registers的相关说明
Susan Yang,非常感谢,能否再次请教一下问题?
我自定义一个usb hid设备,主机第一次向usb写入数据没有问题,之后再次写入一致提示写入超时:sh: write error: Connection timed out。我写入的endpoint是4,usbHidProcessEvents函数第一次处理endpoint4的收到的数据并清空事件标记,之后再次写入数据,不成功超时,此时也没有进入usbHidProcessEvents函数中处理endpoint4相关的逻辑,能给点指导或者思路么?
另外,也想想问一下endpoint4接收到数据的长度在哪里可以得到?
也想想问一下endpoint4接收到数据的长度在哪里可以得到?这个已经在文档中看到了!
再次非常感谢,已经没有问题了。在此也用代码总结一下读取usb endpoint数据的代码。
下面的代码嵌入在usbHidProcessEvents函数中,当收到数据时候,直接原样写回主机。
/*仅仅是测试没有那么多的讲究*/
static void s_handle_endpoint4_out(void)
{
uint8 cnt,cnt1;
char rcv[64] = {'\0'};
int i = 0;
uint8 ep = USBFW_GET_SELECTED_ENDPOINT();
USBFW_SELECT_ENDPOINT(4);
if (USBFW_OUT_ENDPOINT_DISARMED())
{
halIntState_t intState;
HAL_ENTER_CRITICAL_SECTION(intState);
// Get length of USB packet, this operation must not be interrupted.
cnt = USBFW_GET_OUT_ENDPOINT_COUNT_LOW();
cnt += USBFW_GET_OUT_ENDPOINT_COUNT_HIGH() >> 8;
HAL_EXIT_CRITICAL_SECTION(intState);
cnt1 = cnt;
while (cnt--)
{
rcv[i++] = USBF4;
}
USBFW_ARM_OUT_ENDPOINT();
}
hidSendHidInReport(rcv, 2, cnt1);
USBFW_SELECT_ENDPOINT(ep);
}