关于PIC单片机的USB固件开发枚举失败,求高手相助

2019-03-25 19:03发布

以下是采用0端点通过串口打印出来的调试数据,摸索了几天了,不明白为何会枚举失败。。。
硬件:PIC18F14K50,开发环境:MPLAB+PICC18  V9.63PL2 ,ICD2
由于这个器件没法通过ICD2 的ICSP接口调试,所以用了串口来输出辅助调试信息。以下是枚举过程的详细记录。(send_data部分是采用2进制输出,所以贴过来看不见,但通过UE查看是正确的。)
求助问题:每次都是到枚举到分配地址后传送描述符后就停了,主机没有再进一步的动作。。盼USB高手指点迷津。。

Init()Main()>>> Trun On USB()...-->ATTACHED_STATE-->POWERED_STATE
>>> Suspend()...        SLEEP...       WAKe_UP...
>>> Wake Up()...
>>> Reset()...USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUP-->DEFAULT_STATE
>>> Suspend()...        SLEEP...       WAKe_UP...
>>> Wake Up()...
>>> Reset()...USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUP-->DEFAULT_STATE|||||||||||||||||||||||||||||||||

 TRNIF::EPService() <UADDR = 0>USTAT = {00 }ep0Bo = {34 08 80 02 }ep0Bi = {00 00 00 00 }SetupPkt = {80 06 00 01 00 00 40 00 }CtrlTrfData = {00 00 00 00 00 00 00 00 }>>  Setup()...->ctrl_trf_state = WAIT_SETUP StdRequest()   >>>   ::GET_DSCUSBStdGetDscHandler()-->DSC_DEV:device_dsc is :{   ?  }USBCtrlEPServiceComplete: SetupPkt.DataDir == DEV_TO_HOSTTx Serv()  send_data is :{   }->ctrl_trf_state = CTRL_TRF_TXdata after ISR:ep0Bo = {80 08 80 02 }ep0Bi = {64 08 88 02 }


>>> Reset()...USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUP-->DEFAULT_STATE||||||||||||||||||||||||||||||||

 TRNIF::EPService() <UADDR = 0>USTAT = {00 }ep0Bo = {34 08 80 02 }ep0Bi = {00 08 88 02 }SetupPkt = {00 05 01 00 00 00 00 00 }CtrlTrfData = {12 01 10 01 00 00 00 08 }>>  Setup()...->ctrl_trf_state = WAIT_SETUP StdRequest()   >>>   ::SET_ADR-->ADR_PENDING_STATE USBCtrlEPServiceComplete: SetupPkt.DataDir == HOST_TO_DEV->ctrl_trf_state = CTRL_TRF_RXdata after ISR:ep0Bo = {C8 08 88 02 }ep0Bi = {64 00 88 02 }

|

 TRNIF::EPService() <UADDR = 0>USTAT = {04 }ep0Bo = {C8 08 88 02 }ep0Bi = {64 00 88 02 }SetupPkt = {00 05 01 00 00 00 00 00 }CtrlTrfData = {12 01 10 01 00 00 00 08 }>>  In()...  -->ADDRESS_STATE : addr is : 1 Status stage USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUPdata after ISR:ep0Bo = {34 08 80 02 }ep0Bi = {00 00 88 02 }

|

 TRNIF::EPService() <UADDR = 1>USTAT = {00 }ep0Bo = {34 08 80 02 }ep0Bi = {00 00 88 02 }SetupPkt = {80 06 00 01 00 00 12 00 }CtrlTrfData = {12 01 10 01 00 00 00 08 }>>  Setup()...->ctrl_trf_state = WAIT_SETUP StdRequest()   >>>   ::GET_DSCUSBStdGetDscHandler()-->DSC_DEV:device_dsc is :{   ?  }USBCtrlEPServiceComplete: SetupPkt.DataDir == DEV_TO_HOSTTx Serv()  send_data is :{   }->ctrl_trf_state = CTRL_TRF_TXdata after ISR:ep0Bo = {80 08 80 02 }ep0Bi = {64 08 88 02 }

|

 TRNIF::EPService() <UADDR = 1>USTAT = {04 }ep0Bo = {80 08 80 02 }ep0Bi = {64 08 88 02 }SetupPkt = {80 06 00 01 00 00 12 00 }CtrlTrfData = {12 01 10 01 00 00 00 08 }>>  In()...   Data stage Tx Serv()  send_data is :{? }data after ISR:ep0Bo = {80 08 80 02 }ep0Bi = {24 08 88 02 }

|

 TRNIF::EPService() <UADDR = 1>USTAT = {04 }ep0Bo = {80 08 80 02 }ep0Bi = {24 08 88 02 }SetupPkt = {80 06 00 01 00 00 12 00 }CtrlTrfData = {8F 0E 03 00 07 01 01 02 }>>  In()...   Data stage Tx Serv()  send_data is :{ }data after ISR:ep0Bo = {44 00 80 02 }ep0Bi = {64 02 88 02 }

|

 TRNIF::EPService() <UADDR = 1>USTAT = {04 }ep0Bo = {44 00 80 02 }ep0Bi = {64 02 88 02 }SetupPkt = {80 06 00 01 00 00 12 00 }CtrlTrfData = {00 01 03 00 07 01 01 02 }>>  In()...   Data stage data after ISR:ep0Bo = {44 00 80 02 }ep0Bi = {64 02 88 02 }


>>> Reset()...USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUP-->DEFAULT_STATE||||||||||||||||||||||||||

 TRNIF::EPService() <UADDR = 0>USTAT = {00 }ep0Bo = {34 08 80 02 }ep0Bi = {00 02 88 02 }SetupPkt = {80 06 00 01 00 00 40 00 }CtrlTrfData = {00 01 03 00 07 01 01 02 }>>  Setup()...->ctrl_trf_state = WAIT_SETUP StdRequest()   >>>   ::GET_DSCUSBStdGetDscHandler()-->DSC_DEV:device_dsc is :{   ?  }USBCtrlEPServiceComplete: SetupPkt.DataDir == DEV_TO_HOSTTx Serv()  send_data is :{   }->ctrl_trf_state = CTRL_TRF_TXdata after ISR:ep0Bo = {80 08 80 02 }ep0Bi = {64 08 88 02 }


>>> Reset()...USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUP-->DEFAULT_STATE||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

 TRNIF::EPService() <UADDR = 0>USTAT = {00 }ep0Bo = {34 08 80 02 }ep0Bi = {00 08 88 02 }SetupPkt = {00 05 01 00 00 00 00 00 }CtrlTrfData = {12 01 10 01 00 00 00 08 }>>  Setup()...->ctrl_trf_state = WAIT_SETUP StdRequest()   >>>   ::SET_ADR-->ADR_PENDING_STATE USBCtrlEPServiceComplete: SetupPkt.DataDir == HOST_TO_DEV->ctrl_trf_state = CTRL_TRF_RXdata after ISR:ep0Bo = {C8 08 88 02 }ep0Bi = {64 00 88 02 }

|

 TRNIF::EPService() <UADDR = 0>USTAT = {04 }ep0Bo = {C8 08 88 02 }ep0Bi = {64 00 88 02 }SetupPkt = {00 05 01 00 00 00 00 00 }CtrlTrfData = {12 01 10 01 00 00 00 08 }>>  In()...  -->ADDRESS_STATE : addr is : 1 Status stage USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUPdata after ISR:ep0Bo = {88 08 80 02 }ep0Bi = {00 00 88 02 }

|

 TRNIF::EPService() <UADDR = 1>USTAT = {00 }ep0Bo = {88 08 80 02 }ep0Bi = {00 00 88 02 }SetupPkt = {00 05 01 00 00 00 00 00 }CtrlTrfData = {80 06 00 01 00 00 12 00 }>>  Out()...    Status stage USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUPdata after ISR:ep0Bo = {88 08 80 02 }ep0Bi = {00 00 88 02 }

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||>>> Reset()...USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUP-->DEFAULT_STATE||||||||||||||||||||||||||||||||

 TRNIF::EPService() <UADDR = 0>USTAT = {00 }ep0Bo = {34 08 80 02 }ep0Bi = {00 00 88 02 }SetupPkt = {80 06 00 01 00 00 40 00 }CtrlTrfData = {80 06 00 01 00 00 12 00 }>>  Setup()...->ctrl_trf_state = WAIT_SETUP StdRequest()   >>>   ::GET_DSCUSBStdGetDscHandler()-->DSC_DEV:device_dsc is :{   ?  }USBCtrlEPServiceComplete: SetupPkt.DataDir == DEV_TO_HOSTTx Serv()  send_data is :{   }->ctrl_trf_state = CTRL_TRF_TXdata after ISR:ep0Bo = {80 08 80 02 }ep0Bi = {64 08 88 02 }




此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
unpaddt
1楼-- · 2019-03-26 18:15
8.4.6.4 Function Response to a SETUP Transaction
SETUP defines a special type of host-to-function data transaction that permits the host to initialize an
endpoint’s synchronization bits to those of the host. Upon receiving a SETUP token, a function must accept
the data. A function may not respond to a SETUP token with either STALL or NAK, and the receiving
function must accept the data packet that follows the SETUP token. If a non-control endpoint receives a
SETUP token, it must ignore the transaction and return no response.

——原来,usb2.0协议中的确规定,setup令牌包不能响应NAK,那么问题会否就是OUT指令回复ack后host就发了下一个setup,而此时接收缓冲区的控制权sie在设置trnif中断时已经交还给了cpu,无法再次接收数据了,所以就没有响应?
那么问题是否只有通过开启pp缓冲区就能解决?
gorten
2楼-- · 2019-03-26 22:53
是通过删除延迟代码来解决吗,怎么删除?我现在也碰到类似的情况。谢谢
yk0yk
3楼-- · 2019-03-27 03:59
谢谢分享经验
591fdgg
4楼-- · 2019-03-27 04:43
请教    具体删掉了哪些延时的程序呢,我也出现你一样的情况

一周热门 更多>