以下是采用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 }
此帖出自
小平头技术问答
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() <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_DSC
USBStdGetDscHandler()-->DSC_DEV:Tx Serv() ->ctrl_trf_state = CTRL_TRF_TX
>>TRNIF() <UADDR = 0>
USTAT = {04 }
ep0Bo = {44 00 80 02 }
ep0Bi = {64 08 88 02 }
SetupPkt = {80 06 00 01 00 00 40 00 }
CtrlTrfData = {12 01 10 01 00 00 00 08 }
>> In()... Data stage
Tx Serv()
>>> Reset()...
USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUP
-->DEFAULT_STATE
>>TRNIF() <UADDR = 0>
USTAT = {00 }
ep0Bo = {34 08 80 02 }
ep0Bi = {00 08 88 02 }
SetupPkt = {00 05 01 00 00 00 00 00 }
CtrlTrfData = {8F 0E 03 00 07 01 01 02 }
>> Setup()...
->ctrl_trf_state = WAIT_SETUP
StdRequest() >>> ::SET_ADR
-->ADR_PENDING_STATE
->ctrl_trf_state = CTRL_TRF_RX
>>TRNIF() <UADDR = 0>
USTAT = {04 }
ep0Bo = {C8 08 88 02 }
ep0Bi = {64 00 88 02 }
SetupPkt = {00 05 01 00 00 00 00 00 }
CtrlTrfData = {8F 0E 03 00 07 01 01 02 }
>> In()... -->ADDRESS_STATE : addr is : 1
Status stage
USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUP
>>TRNIF() <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_SETUP
>>> Reset()...
USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUP
-->DEFAULT_STATE
>>TRNIF() <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_DSC
USBStdGetDscHandler()-->DSC_DEV:Tx Serv() ->ctrl_trf_state = CTRL_TRF_TX
>>TRNIF() <UADDR = 0>
USTAT = {04 }
ep0Bo = {44 00 80 02 }
ep0Bi = {64 08 88 02 }
SetupPkt = {80 06 00 01 00 00 40 00 }
CtrlTrfData = {12 01 10 01 00 00 00 08 }
>> In()... Data stage
Tx Serv()
>>> Reset()...
USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUP
-->DEFAULT_STATE
>>TRNIF() <UADDR = 0>
USTAT = {00 }
ep0Bo = {34 08 80 02 }
ep0Bi = {00 08 88 02 }
SetupPkt = {00 05 01 00 00 00 00 00 }
CtrlTrfData = {8F 0E 03 00 07 01 01 02 }
>> Setup()...
->ctrl_trf_state = WAIT_SETUP
StdRequest() >>> ::SET_ADR
-->ADR_PENDING_STATE
->ctrl_trf_state = CTRL_TRF_RX
>>TRNIF() <UADDR = 0>
USTAT = {04 }
ep0Bo = {C8 08 88 02 }
ep0Bi = {64 00 88 02 }
SetupPkt = {00 05 01 00 00 00 00 00 }
CtrlTrfData = {8F 0E 03 00 07 01 01 02 }
>> In()... -->ADDRESS_STATE : addr is : 1
Status stage
USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUP
>>TRNIF() <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_SETUP
>>> Reset()...
USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUP
-->DEFAULT_STATE
>>TRNIF() <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_DSC
USBStdGetDscHandler()-->DSC_DEV:Tx Serv() ->ctrl_trf_state = CTRL_TRF_TX
>>TRNIF() <UADDR = 0>
USTAT = {04 }
ep0Bo = {44 00 80 02 }
ep0Bi = {64 08 88 02 }
SetupPkt = {80 06 00 01 00 00 40 00 }
CtrlTrfData = {12 01 10 01 00 00 00 08 }
>> In()... Data stage
Tx Serv()
>>> Reset()...
USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUP
-->DEFAULT_STATE
>>TRNIF() <UADDR = 0>
USTAT = {00 }
ep0Bo = {34 08 80 02 }
ep0Bi = {00 08 88 02 }
SetupPkt = {00 05 01 00 00 00 00 00 }
CtrlTrfData = {8F 0E 03 00 07 01 01 02 }
>> Setup()...
->ctrl_trf_state = WAIT_SETUP
StdRequest() >>> ::SET_ADR
-->ADR_PENDING_STATE
->ctrl_trf_state = CTRL_TRF_RX
>>TRNIF() <UADDR = 0>
USTAT = {04 }
ep0Bo = {C8 08 88 02 }
ep0Bi = {64 00 88 02 }
SetupPkt = {00 05 01 00 00 00 00 00 }
CtrlTrfData = {8F 0E 03 00 07 01 01 02 }
>> In()... -->ADDRESS_STATE : addr is : 1
Status stage
USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUP
>>TRNIF() <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_SETUP
>>> Reset()...
USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUP
-->DEFAULT_STATE
>>TRNIF() <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_DSC
USBStdGetDscHandler()-->DSC_DEV:Tx Serv() ->ctrl_trf_state = CTRL_TRF_TX
>>TRNIF() <UADDR = 0>
USTAT = {04 }
ep0Bo = {44 00 80 02 }
ep0Bi = {64 08 88 02 }
SetupPkt = {80 06 00 01 00 00 40 00 }
CtrlTrfData = {12 01 10 01 00 00 00 08 }
>> In()... Data stage
Tx Serv()
>>> Reset()...
USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUP
-->DEFAULT_STATE
>>TRNIF() <UADDR = 0>
USTAT = {00 }
ep0Bo = {34 08 80 02 }
ep0Bi = {00 08 88 02 }
SetupPkt = {00 05 01 00 00 00 00 00 }
CtrlTrfData = {8F 0E 03 00 07 01 01 02 }
>> Setup()...
->ctrl_trf_state = WAIT_SETUP
StdRequest() >>> ::SET_ADR
-->ADR_PENDING_STATE
->ctrl_trf_state = CTRL_TRF_RX
>>TRNIF() <UADDR = 0>
USTAT = {04 }
ep0Bo = {C8 08 88 02 }
ep0Bi = {64 00 88 02 }
SetupPkt = {00 05 01 00 00 00 00 00 }
CtrlTrfData = {8F 0E 03 00 07 01 01 02 }
>> In()... -->ADDRESS_STATE : addr is : 1
Status stage
USBPrepareForNextSetupTrf()->ctrl_trf_state = WAIT_SETUP
>>TRNIF() <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_SETUP
>>> Suspend()... SLEEP... WAKe_UP...
一周热门 更多>