关于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-25 22:44
由于文件内容超出版面长度,只发了部分数据,请大家帮忙看看调试数据.txt,用ue可以看到2进制结果
unpaddt
2楼-- · 2019-03-25 23:28
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() <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...
unpaddt
3楼-- · 2019-03-26 01:37
扫描了总线上的数据,到这一步就变成这样了,不知道为何对setup get_dsc(config) 来的时候,sie 完全没响应。。

2.056227958        USB 4        Digital 4        IN Add:10 EndPoint:0                                                                                       
2.056254292        USB 4        Digital 4        DATA1        0        1                                                                dev       
2.056291708        USB 4        Digital 4        ACK                                                                                       
2.056321458        USB 4        Digital 4        OUT Add:10 EndPoint:0                                                                                        2.975E-05
2.056347708        USB 4        Digital 4        DATA1                                                                                host 0        no trnif
2.056374125        USB 4        Digital 4        ACK                                                                                       
                                                                                                               
                                                                                                               
2.057816292        USB 4        Digital 4        SETUP Add:10 EndPoint:0                                                                                        0.001442167
2.057842542        USB 4        Digital 4        GET DESCRIPTOR CONFIG Length:255                                                                                       
2.057842542        USB 4        Digital 4        DATA0        80        6        0        2        0        0        FF        0                       
2.057935292        USB 4        Digital 4        SETUP Add:10 EndPoint:0                                                                                        9.275E-05
2.057961542        USB 4        Digital 4        GET DESCRIPTOR CONFIG Length:255                                                                                       
2.057961542        USB 4        Digital 4        DATA0        80        6        0        2        0        0        FF        0                       
2.058054292        USB 4        Digital 4        SETUP Add:10 EndPoint:0                                                                                       
2.058080542        USB 4        Digital 4        GET DESCRIPTOR CONFIG Length:255                                                                                       
2.058080542        USB 4        Digital 4        DATA0        80        6        0        2        0        0        FF        0
unpaddt
4楼-- · 2019-03-26 06:00
沉底了。。莫非现在大家都不玩pic了么?呵呵

终于搞定了,还好有个逻辑分析仪,不知道是不是时钟配置的问题,用了12Mhz的晶振,开了片内4倍速PLL,cpu工作在48Mhz,手册中注明采用低速模式时“可能需要一定的延迟”,汗~极度不严谨,可能?也就是说不一定需要。一定的延迟?到底要多少个指令周期?也没有说明。但是即便这样,我用全速模式也还是存在同样问题,按照时序发现以下动作,虽然删除了一些导致延迟的代码目前已经OK了,但对于这个现象还是很值得研究,是否能避免呢,具体如下,请大家一起分析下:

1,……(这里省略get dsc dev前的枚举动作描述)
2,[host -> dev] SETUP
        [host -> dev] DATA get device descriptor (len:18)
        [host<- dev] ack
        ——trnif中断(固件将device描述符的前8字节放到发送缓冲区,将缓冲区控制权交给SIE)
3,[host -> dev] IN(注:这之前有很多个IN都响应NAK,表示SIE还没有准备好发送)
        [host <- dev] DATA(前8字节)
        [host -> dev] ack
        ——trnif中断(固件将第9字节开始的8个字节放到发送缓冲区,将缓冲区控制权交回SIE)
4,[host -> dev] IN(注,同上,这之前有很多个IN都响应NAK,表示SIE未准备好发送数据
        [host <- dev] DATA(8个字节)
        [host -> dev] ack
        ——trnif中断(固件将最后两个字节放到缓冲区,同上处理,启动SIE发送)
5,[host -> dev] OUT
        [host -> dev] DATA (注:空数据包,表示已经收到完整数据)
        [host <- dev] ack

6,[host -> dev] SETUP
        [host -> dev] DATA get config descriptor (len:255)
        [host -> dev] SETUP
        [host -> dev] DATA get config descriptor (len:255)
        [host -> dev] SETUP
        [host -> dev] DATA get config descriptor (len:255)
        ——这时cpu还未响应TRNIF OUT中断,就发生了以上第六点的数据动作,但是奇怪的是这时SIE完全没有响应 NAK或者ACK。。。导致枚举中断,总线发了复位信号
7,总线上发了复位信号
8,——trnif中断(固件响应OUT中断,但因为总线已经复位,枚举又回到1重新开始,同样到第六步这里卡住,重复4次后,枚举失败)
unpaddt
5楼-- · 2019-03-26 09:36
注:以上现象我实验了很多种时钟配置,还发现PLL开了以后时钟高电平脉宽不稳定,而上升沿是准确的,怀疑过是PLL开启的问题,后来关闭了PLL,尝试了以下几种模式,均出现相同问题,以此排除PLL问题:
1,开PLL,CPU-48Mhz,全速sie 48Mhz
2,关PLL,CPU-12Mhz,usb时钟除以2,低速sie-6Mhz
3,开PLL,CPU-48Mhz,usb时钟除以2,低速sie-6Mhz
unpaddt
6楼-- · 2019-03-26 12:36
 精彩回答 2  元偷偷看……

一周热门 更多>