阅读:1141回复:3
ISP1161不能发数据给主机IN包??!!急着求救阿
各位老大们!!
我现在做isp1161,我的设备能收到主机发过来的setup包,并且能够ACK它,但却不能发零长度的包给紧接来的IN包?是不是我的程序有问题啊? 枚举过程的图片如附件所示 写端点的程序如下: int isp116x_dc_WriteEndpoint(int reg, void *buf, int length) { int i; int cnt; u16 *pData; pData = (u16 *)buf; _REG_U16(USB_DC_CMD) = reg; _REG_U16(USB_DC_DATA) = length; //write length to IN buf cnt = length >> 1; for(i = 0; i < cnt; i++) //write the buffer { _REG_U16(USB_DC_DATA) = pData; } isp116x_dc_ValidBuffer(reg); //cmd+0x60 for valid buffer return cnt; } 响应setup包的一段程序如下: switch (pData->bRequest) { case USB_REQ_SET_ADDRESS: //设置地址 isp116x_dc_AcknowledgeSETUP(); //先应答,再设置地址 addr = pData->wValue & 0x007f; //低字节为新地址的值 isp116x_dc_SetAddress(addr); isp116x_dc_WriteEndpoint(USB_Control_IN_Buffer,0,0); //send zero_length packet to host break; case USB_REQ_SET_CONFIGURATION: //设置配置 isp116x_dc_AcknowledgeSETUP(); isp116x_dc_WriteEndpoint(USB_Control_IN_Buffer,0,0); //send zero_length packet to host break; default: //其他请求,暂且不做处理 isp116x_dc_AcknowledgeSETUP(); _PRINT("Received undo Request nr"); return 1; } 跪求大家帮忙啊!! [编辑 - 12/10/04 by bbybati] |
|
沙发#
发布于:2005-01-18 12:40
修改一下顺序:
//send zero_length packet to host isp116x_dc_WriteEndpoint(USB_Control_IN_Buffer,0,0); addr = pData->wValue & 0x007f; //低字节为新地址的值 isp116x_dc_SetAddress(addr); 呵呵。。。 |
|
|
板凳#
发布于:2004-12-13 10:24
我用usb分析仪测试的,主机端是收到了ACK,并且发出了IN包,但设备端是NAK。。。
大家可以看看我抓下来的图片 |
|
地板#
发布于:2004-12-10 18:18
怎么确定能够ACK呢?
|
|