STM32_USB-FS-Device_Lib_V3.1.0 ライブラリを使ってEPINとEPOUTの割込が重なるとエラーが発生し通信が出来なくなるので、
RAMにトレース用リングバッファを設けて割込の状態を記録してみた。
怪しい部分を見つけたので誰かの参考になればと思って晒しておく。
debugline=39
time(us) +++++++++++++++++++++++++++
52402 @Exit_FS_IRQ main=130 intr=102 itlevel=0 sp=2000FF04
52506 EPStartXFer ep=200067CC xfer_len=4 maxpacket=64 ep->isin=1
52590 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF48
52665 ** IN Endpoint interrupt
52697 +++ Handle_InEP_ISR ep_intr=00000002
52743
++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=2090 <- ep empty割込52818
+++++ WriteEmptyTxFifo epnum=1,xfer_len=4,xfer_count=0 <- 多分これは正常52884 ****** Call OTGD_FS_WritePacket epnum=1,len=4
52939 ----- WriteEmptyTxFifo epnum=1,xfer_len=4,xfer_count=4
53004 ---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=2091
53075 --- Handle_InEP_ISR ep_intr=00000000
53119 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF48
53193 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF48
53269 ** IN Endpoint interrupt
53300 +++ Handle_InEP_ISR ep_intr=00000002
53345 **** xfer complete.. main=131 intr=102 itlevel=1 sp=2000FE78
<- 正常な時はxfer complete割込が発生53426 --- Handle_InEP_ISR ep_intr=00000000
53469 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF48
53544 @Enter_TIM4_IRQ main=131 intr=102 itlevel=1 sp=2000FF48
53634 @Exit_TIM4_IRQ main=131 intr=102 itlevel=0 sp=2000FF48
53781 EPStartXFer ep=200067CC xfer_len=10 maxpacket=64 ep->isin=1
53866 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF40
53941 ** IN Endpoint interrupt
53973 +++ Handle_InEP_ISR ep_intr=00000002
54019
++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=2090 <- ep empty割込発生54094
+++++ WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=054161 ****** Call OTGD_FS_WritePacket epnum=1,len=10
54218 ----- WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
54284 ---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=2090
54356 --- Handle_InEP_ISR ep_intr=00000000
54399 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF40
54474 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF40
** Receive FIFO Queue Status Level interrupt
54588 ** IN Endpoint interrupt
54619 +++ Handle_InEP_ISR ep_intr=00000002
54665 ++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=2090 <- ep empty割込発生?54741 +++++ WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=1054808 ----- WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
54874
---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=209054945
--- Handle_InEP_ISR ep_intr=0000000054989 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF40
55063 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF40
** Receive FIFO Queue Status Level interrupt
55176 ** IN Endpoint interrupt
55207 +++ Handle_InEP_ISR ep_intr=00000002
55253 ++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=2090 <- ep empty割込発生??55329 +++++ WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10 55396 ----- WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
55462
---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=209055533 --- Handle_InEP_ISR ep_intr=00000000
55577 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF40
55651 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF40
55727 ** OUT Endpoint interrupt
<- OUTEP割込55760 +++ Handle_OutEP_ISR ep_intr=00000004
55805 **** out xfercompl ep_intr=00000001
55847 Enter_ProcEP2OUT main=131 intr=102 itlevel=1 sp=2000FE98
55924 EPStartXFer ep=2000686C xfer_len=1 maxpacket=64 ep->isin=0
56006 --- Handle_OutEP_ISR ep_intr=00000000
56049 ** IN Endpoint interrupt
<- INEP割込、この辺りで通信ストップ56081 +++ Handle_InEP_ISR ep_intr=00000002
56127 ++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=209056203 +++++ WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=1056270 ----- WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
56337
---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=209056409 --- Handle_InEP_ISR ep_intr=00000000
** Incomplete Isochrous OUT transfer error interrupt <- チェックのためエラー割込みENABLEにしている、これも怪しい56493 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF40
56568 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF40
56643 ** IN Endpoint interrupt
56675 +++ Handle_InEP_ISR ep_intr=00000002
56722 ++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=2090 <- 以降延々と ep empty割込が続きメインループ処理ストップ56798 +++++ WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=1056865 ----- WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
56931 ---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=2090
57003 --- Handle_InEP_ISR ep_intr=00000000
57047 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF40
57122 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF40
57197 ** IN Endpoint interrupt
57229 +++ Handle_InEP_ISR ep_intr=00000002
57276 ++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=209057352 +++++ WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=1057419 ----- WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
57485 ---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=2090
57557 --- Handle_InEP_ISR ep_intr=00000000
57601 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF40
57676 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF40
57751 ** IN Endpoint interrupt
57783 +++ Handle_InEP_ISR ep_intr=00000002
57830 ++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=2090
57906 +++++ WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
57973 ----- WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
58039 ---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=2090
58111 --- Handle_InEP_ISR ep_intr=00000000
58155 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF40
58230 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF40
58305 ** IN Endpoint interrupt
58337 +++ Handle_InEP_ISR ep_intr=00000002
58384 ++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=2090
58460 +++++ WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
58527 ----- WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
58593 ---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=2090
58665 --- Handle_InEP_ISR ep_intr=00000000
58709 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF40
58784 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF40
58860 ** IN Endpoint interrupt
58891 +++ Handle_InEP_ISR ep_intr=00000002
58938 ++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=2090
59014 +++++ WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
59081 ----- WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
59147 ---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=2090
59219 --- Handle_InEP_ISR ep_intr=00000000
59263 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF40
59338 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF40
59414 ** IN Endpoint interrupt
59445 +++ Handle_InEP_ISR ep_intr=00000002
59492 ++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=2090
59568 +++++ WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
59635 ----- WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
59701 ---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=2090
59773 --- Handle_InEP_ISR ep_intr=00000000
59817 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF40
59892 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF40
59968 ** IN Endpoint interrupt
59999 +++ Handle_InEP_ISR ep_intr=00000002
60046 ++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=2090
60122 +++++ WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
60189 ----- WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
60256 ---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=2090
60327 --- Handle_InEP_ISR ep_intr=00000000
60371 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF40
60446 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF40
60522 ** IN Endpoint interrupt
60554 +++ Handle_InEP_ISR ep_intr=00000002
60600 ++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=2090
60676 +++++ WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
60743 ----- WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
60810 ---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=2090
60882 --- Handle_InEP_ISR ep_intr=00000000
60926 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF40
61001 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF40
61076 ** IN Endpoint interrupt
61108 +++ Handle_InEP_ISR ep_intr=00000002
61154 ++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=2090
61230 +++++ WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
61297 ----- WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
61363 ---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=2090
61435 --- Handle_InEP_ISR ep_intr=00000000
61479 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF40
61554 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF40
61630 ** IN Endpoint interrupt
61662 +++ Handle_InEP_ISR ep_intr=00000002
61708 ++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=2090
61784 +++++ WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
61851 ----- WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
61918 ---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=2090
61990 --- Handle_InEP_ISR ep_intr=00000000
62034 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF40
62109 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF40
62184 ** IN Endpoint interrupt
62216 +++ Handle_InEP_ISR ep_intr=00000002
62262 ++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=2090
62338 +++++ WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
62405 ----- WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
62472 ---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=2090
62544 --- Handle_InEP_ISR ep_intr=00000000
62588 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF40
62663 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF40
62738 ** IN Endpoint interrupt
62770 +++ Handle_InEP_ISR ep_intr=00000002
62816 ++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=2090
62892 +++++ WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
62959 ----- WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
63026 ---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=2090
63098 --- Handle_InEP_ISR ep_intr=00000000
63142 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF40
63217 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF40
63292 ** IN Endpoint interrupt
63324 +++ Handle_InEP_ISR ep_intr=00000002
63370 ++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=2090
63446 +++++ WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
63513 ----- WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
63580 ---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=2090
63652 --- Handle_InEP_ISR ep_intr=00000000
63696 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF40
63771 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF40
63846 ** IN Endpoint interrupt
63878 +++ Handle_InEP_ISR ep_intr=00000002
63925 ++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=2090
64001 +++++ WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
64068 ----- WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
64134 ---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=2090
64206 --- Handle_InEP_ISR ep_intr=00000000
64250 @Exit_FS_IRQ main=131 intr=102 itlevel=0 sp=2000FF40
64325 @Enter_FS_IRQ main=131 intr=102 itlevel=1 sp=2000FF40
64400 ** IN Endpoint interrupt
64432 +++ Handle_InEP_ISR ep_intr=00000002
64479 ++++ in ep empty.. epnum=1 EPTxStatus=00000030 diepint=2090
64554 +++++ WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
64621 ----- WriteEmptyTxFifo epnum=1,xfer_len=10,xfer_count=10
64688 ---- in ep empty.. epnum=1 EPTxStatus=00000030 ep_int=2090
------------------------------------