Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
6 years, 11 months ago.
How to debug a USB device stack ?
I am designed a IoT prototype with USB device CDC class, Linux (OpenWRT/Raspberry Pi) and VHLL(Python/Lua). Since USB‘s nature, USB CDC/ACM/ECM models are selected as standard interfaces to connectivities, rather than native SPI/I2C/UART on Cortex-A/MIPS SoC.
Currently I am using STM32F103C8/RB and STM32F070/072C8 as perferred micros, but I find USB stacks running on these micros have something wrong in Linux, including Ubunt/Raspbian/OpenWRT and other disto. The stacks comes from STM's HAL, Keil's USB stack, and other sources.
My test code:
- https://os.mbed.com/users/hudakz/code/STM32F103C8T6_USBSerial/ , which was my baseline for LoRa/FSK USB dongle.
- Keil MCB3210E USB Device demo, from uVision 4.
- Keil uVision 5 based USB device failed due to including header files path error.
But STM32F103C8 in STLINK/V2 and MicroPython in STM32F40X, these CDC firmware works well in Linux, as well as NXP's LPC54114 device driver ROM API.
STM32F103C8/RB with USB CDC stack works well in Windows, from XP to 10. But in Linux, they can be enumerated as /dev/ttyACM0, but no proper characters are printed out, I tried shell programming, Python and Lua. And finally I have tried usbmon tool in Ubuntu. I can narrow down the issue, the USB micro has NO output at all. Here is my usbmon logging.
STM32 USB
f3e3f9c0 1138689644 S Ii:1:004:1 -115:2 16 < f51fd6c0 1138692116 S Co:1:004:0 s 21 22 0003 0000 0000 0 f51fd6c0 1138703025 C Co:1:004:0 0 0 f3e3fa80 1138703444 S Bi:1:004:2 -115 128 < f3e3fb40 1138703524 S Bi:1:004:2 -115 128 < f3e3ff00 1138703570 S Bi:1:004:2 -115 128 < f3e3fe40 1138703610 S Bi:1:004:2 -115 128 < f3e3f900 1138703652 S Bi:1:004:2 -115 128 < f3e3f780 1138703692 S Bi:1:004:2 -115 128 < f3e3f6c0 1138703817 S Bi:1:004:2 -115 128 < f3e3f600 1138703865 S Bi:1:004:2 -115 128 < f3e3fc00 1138703906 S Bi:1:004:2 -115 128 < f3e3fcc0 1138703947 S Bi:1:004:2 -115 128 < f3e3f540 1138703987 S Bi:1:004:2 -115 128 < f3e3f480 1138704026 S Bi:1:004:2 -115 128 < f3e3f3c0 1138704066 S Bi:1:004:2 -115 128 < f3e3f300 1138704106 S Bi:1:004:2 -115 128 < f3e3f240 1138704147 S Bi:1:004:2 -115 128 < f3e3f180 1138704188 S Bi:1:004:2 -115 128 < f6c65840 1138704450 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c65cc0 1138704878 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c65d80 1138704970 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c65600 1138705045 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c65240 1138705117 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c65000 1138705189 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c659c0 1138705261 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c65b40 1138705333 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c656c0 1138705459 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c65300 1138705515 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c65f00 1138705559 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c65900 1138705603 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c65780 1138705646 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c65480 1138705690 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c65c00 1138705734 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f5267c00 1138705778 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c65840 1138708227 C Bo:1:004:2 0 13 > f6c65840 1138708367 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c65cc0 1138710127 C Bo:1:004:2 0 13 > f6c65cc0 1138710433 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c65d80 1138713557 C Bo:1:004:2 0 13 > f6c65d80 1138714950 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c65600 1138716389 C Bo:1:004:2 0 13 > f6c65240 1138716408 C Bo:1:004:2 0 13 > f6c65600 1138716629 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c65240 1138716705 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c65000 1138720337 C Bo:1:004:2 0 13 > f6c65000 1138720673 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a f6c659c0 1138722247 C Bo:1:004:2 0 13 > f6c65b40 1138722271 C Bo:1:004:2 0 13 > f6c659c0 1138722502 S Bo:1:004:2 -115 13 = 48656c6c 6f20776f 726c640d 0a
In above logging, every bulk in is failed, bulk out is fine in LInux, I haven't check its output buffer in micro.
NXP USB
f6e45180 2640787952 C Bi:1:006:5 0 2 = 0d0a f6e45180 2640787990 S Bi:1:006:5 -115 32 < f6e45300 2640788823 C Bi:1:006:5 0 3 = 726573 f6e45300 2640788841 S Bi:1:006:5 -115 32 < f6e45f00 2640789745 C Bi:1:006:5 0 4 = 65742034 f6e45f00 2640789763 S Bi:1:006:5 -115 32 < f6e45e40 2640790812 C Bi:1:006:5 0 4 = 33332e33 f6e45e40 2640790838 S Bi:1:006:5 -115 32 < f6e45d80 2640795349 C Bi:1:006:5 0 4 = 32303030 f6e45d80 2640795382 S Bi:1:006:5 -115 32 < f6e45cc0 2640798478 C Bi:1:006:5 0 3 = 370d0a f6e45cc0 2640798501 S Bi:1:006:5 -115 32 < f6e45c00 2640853515 C Bi:1:006:5 0 1 = 34 f6e45c00 2640853542 S Bi:1:006:5 -115 32 < f6e45b40 2640854401 C Bi:1:006:5 0 4 = 33342e30 f6e45b40 2640854419 S Bi:1:006:5 -115 32 < f6e45780 2640856682 C Bi:1:006:5 0 4 = 30303030 f6e45780 2640856703 S Bi:1:006:5 -115 32 < f522b240 2640858403 C Bi:1:006:5 0 4 = 304d487a f522b240 2640858429 S Bi:1:006:5 -115 32 < f522b180 2640862356 C Bi:1:006:5 0 3 = 0d0a75 f522b180 2640862383 S Bi:1:006:5 -115 32 < f522b0c0 2640864166 C Bi:1:006:5 0 8 = 73696e67 20736637 f522b0c0 2640864192 S Bi:1:006:5 -115 32 < f522b000 2640864291 C Bi:1:006:5 0 2 = 0d0a f522b000 2640864296 S Bi:1:006:5 -115 32 < f6e45900 2641504293 C Bi:1:006:5 0 4 = 6368303a f6e45900 2641504417 S Bi:1:006:5 -115 32 < f6e45000 2641505511 C Bi:1:006:5 0 4 = 202d3132 f6e45000 2641505536 S Bi:1:006:5 -115 32 < f6e450c0 2641505560 C Bi:1:006:5 0 4 = 332e3337 f6e450c0 2641505562 S Bi:1:006:5 -115 32 < f6e45180 2641506461 C Bi:1:006:5 0 4 = 35303030 f6e45180 2641506480 S Bi:1:006:5 -115 32 < f6e45300 2641507381 C Bi:1:006:5 0 2 = 0d0a f6e45300 2641507396 S Bi:1:006:5 -115 32 < f6e45f00 2642151605 C Bi:1:006:5 0 4 = 6368313a f6e45f00 2642151642 S Bi:1:006:5 -115 32 < f6e45e40 2642152172 C Bi:1:006:5 0 3 = 202d31 f6e45e40 2642152179 S Bi:1:006:5 -115 32 < f6e45d80 2642152179 C Bi:1:006:5 0 4 = 32322e37 f6e45d80 2642152182 S Bi:1:006:5 -115 32 < f6e45cc0 2642153309 C Bi:1:006:5 0 4 = 39363837 f6e45cc0 2642153324 S Bi:1:006:5 -115 32 < f6e45c00 2642154062 C Bi:1:006:5 0 3 = 350d0a f6e45c00 2642154084 S Bi:1:006:5 -115 32 < f6e45b40 2642797520 C Bi:1:006:5 0 3 = 636832 f6e45b40 2642797550 S Bi:1:006:5 -115 32 < f6e45780 2642798408 C Bi:1:006:5 0 4 = 3a202d31 f6e45780 2642798428 S Bi:1:006:5 -115 32 < f522b240 2642799435 C Bi:1:006:5 0 4 = 32322e37 f522b240 2642799456 S Bi:1:006:5 -115 32 < f522b180 2642800357 C Bi:1:006:5 0 4 = 30333132 f522b180 2642800373 S Bi:1:006:5 -115 32 < f522b0c0 2642802580 C Bi:1:006:5 0 3 = 350d0a f522b0c0 2642802587 S Bi:1:006:5 -115 32 < f522b000 2643446519 C Bi:1:006:5 0 3 = 636833 f522b000 2643446554 S Bi:1:006:5 -115 32 < f6e45900 2643447358 C Bi:1:006:5 0 3 = 3a202d f6e45900 2643447375 S Bi:1:006:5 -115 32 < f6e45000 2643447389 C Bi:1:006:5 0 4 = 3132332e f6e45000 2643447391 S Bi:1:006:5 -115 32 < f6e450c0 2643447401 C Bi:1:006:5 0 4 = 30343638 f6e450c0 2643447402 S Bi:1:006:5 -115 32 < f6e45180 2643448419 C Bi:1:006:5 0 4 = 37350d0a f6e45180 2643448434 S Bi:1:006:5 -115 32 < f6e45300 2644091509 C Bi:1:006:5 0 2 = 6368 f6e45300 2644091545 S Bi:1:006:5 -115 32 < f6e45f00 2644095359 C Bi:1:006:5 0 4 = 343a202d f6e45f00 2644095394 S Bi:1:006:5 -115 32 < f6e45e40 2644095643 C Bi:1:006:5 0 4 = 3132322e f6e45e40 2644095647 S Bi:1:006:5 -115 32 < f6e45d80 2644095664 C Bi:1:006:5 0 4 = 37333433 f6e45d80 2644095666 S Bi:1:006:5 -115 32 < f6e45cc0 2644100140 C Bi:1:006:5 0 3 = 37350d f6e45cc0 2644100234 S Bi:1:006:5 -115 32 < f6e45c00 2644102025 C Bi:1:006:5 0 1 = 0a f6e45c00 2644102052 S Bi:1:006:5 -115 32 < f6e45b40 2644738614 C Bi:1:006:5 0 2 = 6368 f6e45b40 2644738651 S Bi:1:006:5 -115 32 < f6e45780 2644741501 C Bi:1:006:5 0 3 = 353a20 f6e45780 2644741511 S Bi:1:006:5 -115 32 < f522b240 2644742421 C Bi:1:006:5 0 4 = 2d313232 f522b240 2644742446 S Bi:1:006:5 -115 32 < f522b180 2644742468 C Bi:1:006:5 0 4 = 2e393231 f522b180 2644742470 S Bi:1:006:5 -115 32 < f522b0c0 2644742484 C Bi:1:006:5 0 4 = 3837350d f522b0c0 2644742486 S Bi:1:006:5 -115 32 < f522b000 2644743408 C Bi:1:006:5 0 1 = 0a f522b000 2644743428 S Bi:1:006:5 -115 32 < f6e45900 2645385615 C Bi:1:006:5 0 1 = 63 f6e45900 2645385653 S Bi:1:006:5 -115 32 < f6e45000 2645386407 C Bi:1:006:5 0 4 = 68363a20 f6e45000 2645386546 S Bi:1:006:5 -115 32 < f6e450c0 2645387428 C Bi:1:006:5 0 4 = 2d313232 f6e450c0 2645387448 S Bi:1:006:5 -115 32 < f6e45180 2645390425 C Bi:1:006:5 0 4 = 2e393834 f6e45180 2645390554 S Bi:1:006:5 -115 32 < f6e45300 2645391424 C Bi:1:006:5 0 3 = 333735 f6e45300 2645391439 S Bi:1:006:5 -115 32 < f6e45f00 2645391454 C Bi:1:006:5 0 4 = 0d0a7573 f6e45f00 2645391456 S Bi:1:006:5 -115 32 < f6e45e40 2645391466 C Bi:1:006:5 0 4 = 696e6720 f6e45e40 2645391467 S Bi:1:006:5 -115 32 < f6e45d80 2645392544 C Bi:1:006:5 0 4 = 6368302c f6e45d80 2645392564 S Bi:1:006:5 -115 32 < f6e45cc0 2645396242 C Bi:1:006:5 0 4 = 20343333 f6e45cc0 2645396278 S Bi:1:006:5 -115 32 < f6e45c00 2645398078 C Bi:1:006:5 0 4 = 33323030 f6e45c00 2645398103 S Bi:1:006:5 -115 32 < f6e45b40 2645398125 C Bi:1:006:5 0 4 = 3030687a f6e45b40 2645398127 S Bi:1:006:5 -115 32 < f6e45780 2645398143 C Bi:1:006:5 0 2 = 0d0a f6e45780 2645398145 S Bi:1:006:5 -115 32 < f522b240 2645400353 C Bi:1:006:5 0 4 = 70726573 f522b240 2645400360 S Bi:1:006:5 -115 32 < f522b180 2645401933 C Bi:1:006:5 0 8 = 3a313430 3632352c f522b180 2645401954 S Bi:1:006:5 -115 32 < f522b0c0 2645406827 C Bi:1:006:5 0 8 = 20636f72 65636c6f f522b0c0 2645406842 S Bi:1:006:5 -115 32 < f522b000 2645408221 C Bi:1:006:5 0 7 = 636b3a37 323030 f522b000 2645408242 S Bi:1:006:5 -115 32 < f6e45900 2645408259 C Bi:1:006:5 0 8 = 30303030 0d0a746f f6e45900 2645408260 S Bi:1:006:5 -115 32 < f6e45000 2645410642 C Bi:1:006:5 0 3 = 6f2073 f6e45000 2645410654 S Bi:1:006:5 -115 32 < f6e450c0 2645412008 C Bi:1:006:5 0 8 = 6d616c6c 20312c20 f6e450c0 2645412026 S Bi:1:006:5 -115 32 < f6e45180 2645417355 C Bi:1:006:5 0 5 = 736e723a 2d f6e45180 2645417514 S Bi:1:006:5 -115 32 < f6e45300 2645417865 C Bi:1:006:5 0 10 = 372e3520 2d313337 6442 f6e45300 2645417896 S Bi:1:006:5 -115 32 < f6e45f00 2645417937 C Bi:1:006:5 0 3 = 6d0d0a f6e45f00 2645417960 S Bi:1:006:5 -115 32 < f6e45e40 2651898506 C Bi:1:006:5 0 3 = 0d0a72 f6e45e40 2651898545 S Bi:1:006:5 -115 32 < f6e45d80 2651899376 C Bi:1:006:5 0 4 = 65736574 f6e45d80 2651899397 S Bi:1:006:5 -115 32 < f6e45cc0 2651902573 C Bi:1:006:5 0 3 = 203433 f6e45cc0 2651902583 S Bi:1:006:5 -115 32 < f6e45c00 2651903444 C Bi:1:006:5 0 4 = 332e3332 f6e45c00 2651903469 S Bi:1:006:5 -115 32 < f6e45b40 2651903490 C Bi:1:006:5 0 4 = 30303037 f6e45b40 2651903493 S Bi:1:006:5 -115 32 < f6e45780 2651903508 C Bi:1:006:5 0 2 = 0d0a f6e45780 2651903510 S Bi:1:006:5 -115 32 < f522b240 2651963474 C Bi:1:006:5 0 2 = 3433 f522b240 2651963510 S Bi:1:006:5 -115 32 < f522b180 2651964309 C Bi:1:006:5 0 4 = 342e3030 f522b180 2651964318 S Bi:1:006:5 -115 32 < f522b0c0 2651972333 C Bi:1:006:5 0 4 = 30303030 f522b0c0 2651972383 S Bi:1:006:5 -115 32 < f522b000 2651973089 C Bi:1:006:5 0 4 = 4d487a0d f522b000 2651973103 S Bi:1:006:5 -115 32 < f6e45900 2651973127 C Bi:1:006:5 0 3 = 0a7573 f6e45900 2651973130 S Bi:1:006:5 -115 32 < f6e45000 2651973144 C Bi:1:006:5 0 8 = 696e6720 7366370d f6e45000 2651973146 S Bi:1:006:5 -115 32 < f6e450c0 2651974766 C Bi:1:006:5 0 1 = 0a f6e450c0 2651974789 S Bi:1:006:5 -115 32 < f6e45180 2652611933 C Bi:1:006:5 0 1 = 63 f6e45180 2652611972 S Bi:1:006:5 -115 32 < f6e45300 2652612808 C Bi:1:006:5 0 4 = 68303a20 f6e45300 2652612822 S Bi:1:006:5 -115 32 < f6e45f00 2652613843 C Bi:1:006:5 0 4 = 2d313233 f6e45f00 2652613873 S Bi:1:006:5 -115 32 < f6e45e40 2652614792 C Bi:1:006:5 0 4 = 2e343638 f6e45e40 2652614807 S Bi:1:006:5 -115 32 < f6e45d80 2652618021 C Bi:1:006:5 0 4 = 3735300d f6e45d80 2652618028 S Bi:1:006:5 -115 32 < f6e45cc0 2652622868 C Bi:1:006:5 0 1 = 0a f6e45cc0 2652622904 S Bi:1:006:5 -115 32 < f6e45c00 2653259868 C Bi:1:006:5 0 1 = 63 f6e45c00 2653259907 S Bi:1:006:5 -115 32 < f6e45b40 2653260457 C Bi:1:006:5 0 4 = 68313a20 f6e45b40 2653260471 S Bi:1:006:5 -115 32 < f6e45780 2653261430 C Bi:1:006:5 0 4 = 2d313232 f6e45780 2653261448 S Bi:1:006:5 -115 32 < f522b240 2653265514 C Bi:1:006:5 0 3 = 2e3932 f522b240 2653265545 S Bi:1:006:5 -115 32 < f522b180 2653267261 C Bi:1:006:5 0 4 = 31383735 f522b180 2653267283 S Bi:1:006:5 -115 32 < f522b0c0 2653267304 C Bi:1:006:5 0 2 = 0d0a f522b0c0 2653267306 S Bi:1:006:5 -115 32 < f522b000 2653909274 C Bi:1:006:5 0 4 = 6368323a f522b000 2653909315 S Bi:1:006:5 -115 32 < f6e45900 2653909798 C Bi:1:006:5 0 4 = 202d3132 f6e45900 2653909807 S Bi:1:006:5 -115 32 < f6e45000 2653909827 C Bi:1:006:5 0 4 = 322e3738 f6e45000 2653909830 S Bi:1:006:5 -115 32 < f6e450c0 2653912444 C Bi:1:006:5 0 4 = 31323530 f6e450c0 2653912473 S Bi:1:006:5 -115 32 < f6e45180 2653915717 C Bi:1:006:5 0 2 = 0d0a f6e45180 2653915748 S Bi:1:006:5 -115 32 < f6e45300 2654554525 C Bi:1:006:5 0 4 = 6368333a f6e45300 2654554564 S Bi:1:006:5 -115 32 < f6e45f00 2654555397 C Bi:1:006:5 0 4 = 202d3132 f6e45f00 2654555485 S Bi:1:006:5 -115 32 < f6e45e40 2654556555 C Bi:1:006:5 0 3 = 322e38 f6e45e40 2654556583 S Bi:1:006:5 -115 32 < f6e45d80 2654559771 C Bi:1:006:5 0 4 = 39303632 f6e45d80 2654559806 S Bi:1:006:5 -115 32 < f6e45cc0 2654561258 C Bi:1:006:5 0 3 = 350d0a f6e45cc0 2654561282 S Bi:1:006:5 -115 32 < f6e45c00 2655201464 C Bi:1:006:5 0 3 = 636834 f6e45c00 2655201501 S Bi:1:006:5 -115 32 < f6e45b40 2655202469 C Bi:1:006:5 0 4 = 3a202d31 f6e45b40 2655202484 S Bi:1:006:5 -115 32 < f6e45780 2655203466 C Bi:1:006:5 0 4 = 32322e38 f6e45780 2655203488 S Bi:1:006:5 -115 32 < f522b240 2655206914 C Bi:1:006:5 0 4 = 32383132 f522b240 2655206942 S Bi:1:006:5 -115 32 < f522b180 2655207803 C Bi:1:006:5 0 3 = 350d0a f522b180 2655207826 S Bi:1:006:5 -115 32 < f522b0c0 2655847989 C Bi:1:006:5 0 3 = 636835 f522b0c0 2655848026 S Bi:1:006:5 -115 32 < f522b000 2655848903 C Bi:1:006:5 0 4 = 3a202d31 f522b000 2655848926 S Bi:1:006:5 -115 32 < f6e45900 2655851289 C Bi:1:006:5 0 3 = 32322e f6e45900 2655851296 S Bi:1:006:5 -115 32 < f6e45000 2655852619 C Bi:1:006:5 0 4 = 37303331 f6e45000 2655852643 S Bi:1:006:5 -115 32 < f6e450c0 2655856560 C Bi:1:006:5 0 4 = 32350d0a f6e450c0 2655856589 S Bi:1:006:5 -115 32 < f6e45180 2656495516 C Bi:1:006:5 0 2 = 6368 f6e45180 2656495545 S Bi:1:006:5 -115 32 < f6e45300 2656496403 C Bi:1:006:5 0 4 = 363a202d
In a normal USB device, both bulk in and bulk out is working well.
Since USB firmware debugging is quite complex, does anyone who has experiences on this issue?