MAX4321 枚举序列给出切换错误

问题描述 投票:0回答:1

我尝试使用 MAX4321 USB 主机枚举设备,但在请求配置描述符时不断收到切换错误。

总线复位后,我读取了设备描述符的前 8 个字节

00016691 USB1: Send Setup Packet 80 06 00 01 00 00 08 00
00016691 MAX : Wr SUDFIFO 8 bytes
00016691 MAX : Wr HIEN    A0
00016691 MAX : Wr HXFR <Setup>
00016691 MAX : Rd HIRQ    C8
00016691 MAX : Rd HRSL    B0
00016691 MAX : MAX3421E_IntHandler HIRQ C8 HIEN A0 HRSL B0 HXFR 10 ACTIVE 80
00016691 MAX : Wr HIRQ    80
00016691 MAX : Wr HIEN    20
00016691 MAX : Wr HIEN    A0
00016698 MAX : Wr HXFR <BULK In>
00016698 MAX : Rd HIRQ    CC
00016705 MAX : Rd HRSL    A0
00016729 MAX : MAX3421E_IntHandler HIRQ CC HIEN A0 HRSL A0 HXFR 00 ACTIVE 80
00016729 MAX : Wr HIRQ    80
00016729 MAX : Wr HIEN    24
00016729 MAX : BULK IN complete
00016733 MAX : Rd HIRQ    4C
00016733 MAX : Rd HRSL    A0
00016740 MAX : MAX3421E_IntHandler HIRQ 4C HIEN 24 HRSL A0 HXFR 00 ACTIVE 04
00016747 MAX : Rd RCVBC   08
00016747 MAX : Rd RCVFIFO 8 bytes 12 01 00 02 EF 02 01 40
00016754 MAX : Wr HIRQ    04
00016754 MAX : Wr HIEN    20
00016802 MAX : Wr HIEN    A0
00016802 MAX : Wr HXFR <Out Handshake>
00016809 MAX : Rd HIRQ    C8
00016816 MAX : Rd HRSL    A0
00016823 MAX : MAX3421E_IntHandler HIRQ C8 HIEN A0 HRSL A0 HXFR A0 ACTIVE 80
00016830 MAX : Wr HIRQ    80
00016837 MAX : Wr HIEN    20
00016844 MAX : OUT HS complete

接下来我将设备地址设置为1

00016935 USB1: Send Setup Packet 00 05 01 00 00 00 00 00
00016942 MAX : Wr SUDFIFO 8 bytes
00016949 MAX : Wr HIEN    A0
00016949 MAX : Wr HXFR <Setup>
00016949 MAX : Rd HIRQ    C8
00016956 MAX : Rd HRSL    A0
00016956 MAX : MAX3421E_IntHandler HIRQ C8 HIEN A0 HRSL A0 HXFR 10 ACTIVE 80
00016963 MAX : Wr HIRQ    80
00016963 MAX : Wr HIEN    20
00016970 MAX : SETUP complete
00016970 MAX : INT Post HCD keyword 0061 status 0000
00016977 MAX : Rd HIRQ    48
00016977 MAX : MAX3421E_IntHandler Exit
00017002 MAX : Wr HIEN    A0
00017005 MAX : Wr HXFR <In Handshake>
00017005 MAX : Rd HIRQ    C8
00017012 MAX : Rd HRSL    A0
00017012 MAX : MAX3421E_IntHandler HIRQ C8 HIEN A0 HRSL A0 HXFR 80 ACTIVE 80
00017019 MAX : Wr HIRQ    80
00017026 MAX : Wr HIEN    20
00017026 MAX : IN HS complete

00017075 MAX : Wr HCTL      [Receive Toggle 1] [Send Toggle 1]
00017082 MAX : Wr PERADDR 01

接下来我从地址 1 接收完整的设备描述符

00017137 USB1: Send Setup Packet 80 06 00 01 00 00 12 00
00017138 MAX : Wr SUDFIFO 8 bytes
00017145 MAX : Wr HIEN    A0
00017145 MAX : Wr HXFR <Setup>
00017145 MAX : Rd HIRQ    C8
00017152 MAX : Rd HRSL    B0
00017152 MAX : MAX3421E_IntHandler HIRQ C8 HIEN A0 HRSL B0 HXFR 10 ACTIVE 80
00017159 MAX : Wr HIRQ    80
00017166 MAX : Wr HIEN    20
00017166 MAX : SETUP complete
00017173 MAX : Rd HIRQ    48
00017206 MAX : Wr HIEN    A0
00017206 MAX : Wr HXFR <BULK In>
00017206 USB1: usb_hstd_interrupt exit
00017206 MAX : Rd HIRQ    CC
00017208 MAX : Rd HRSL    A0
00017208 MAX : MAX3421E_IntHandler HIRQ CC HIEN A0 HRSL A0 HXFR 00 ACTIVE 80
00017215 MAX : Wr HIRQ    80
00017215 MAX : Wr HIEN    24
00017222 MAX : BULK IN complete
00017229 MAX : MAX3421E_IntHandler Exit
00017229 MAX : Rd HIRQ    4C
00017236 MAX : Rd HRSL    A0
00017236 MAX : MAX3421E_IntHandler HIRQ 4C HIEN 24 HRSL A0 HXFR 00 ACTIVE 04
00017243 MAX : Rd RCVBC   12
00017243 MAX : Rd RCVFIFO 18 bytes 12 01 00 02 EF 02 01 40
00017250 MAX : Wr HIRQ    04
00017273 MAX : Wr HIEN    20
00017273 MAX : Rd HIRQ    48
00017273 MAX : MAX3421E_IntHandler Exit
00017298 MAX : Wr HIEN    A0
00017305 MAX : Wr HXFR <Out Handshake>
00017306 MAX : Rd HIRQ    C8
00017312 MAX : Rd HRSL    A0
00017313 MAX : MAX3421E_IntHandler HIRQ C8 HIEN A0 HRSL A0 HXFR A0 ACTIVE 80
00017319 MAX : Wr HIRQ    80
00017341 MAX : Wr HIEN    20
00017341 MAX : OUT HS complete

但是当我尝试读取配置描述符时,出现切换错误

00017454 USB1: Send Setup Packet 80 06 00 02 00 00 09 00
00017479 MAX : Wr SUDFIFO 8 bytes
00017479 MAX : Wr HIRQ    80
00017479 MAX : Rd HIRQ    48
00017479 MAX : Wr HIEN    A0
00017479 MAX : Wr HXFR <Setup>
00017479 MAX : Rd HIRQ    C8
00017480 MAX : Rd HRSL    A0
00017480 MAX : MAX3421E_IntHandler HIRQ C8 HIEN A0 HRSL A0 HXFR 10 ACTIVE 80
00017482 MAX : Wr HIRQ    80
00017489 MAX : Wr HIEN    20
00017489 MAX : SETUP complete
00017489 MAX : INT Post HCD keyword 0061 status 0000
00017496 MAX : Rd HIRQ    48
00017496 USB1: HCD Task 0117 Keyword 0061
00017503 MAX : MAX3421E_IntHandler Exit
00017517 MAX : Wr HIEN    A0
00017517 MAX : Wr HXFR <BULK In>
00017524 MAX : Rd HIRQ    C8
00017547 MAX : Rd HRSL    A6
00017547 MAX : MAX3421E_IntHandler HIRQ C8 HIEN A0 HRSL A6 HXFR 00 ACTIVE 80
00017547 MAX : ERROR Toggle error/ISO over-underrun

知道为什么会出现切换错误吗?

usbserial
1个回答
0
投票

问题原来是在发出读取命令之前清除了读取数据可用 IRQ。 读 IRQ 仅应在读缓冲区被读取后清除。

我遵循的示例是在发出激活 IRQ 的命令之前清除所有中断的 IRQ 标志。这对于其他标志来说很好,但对于读取数据可用 IRQ 来说则不然,只有在读取数据时才应清除该 IRQ,因为这会切换接收缓冲区和标志。

© www.soinside.com 2019 - 2024. All rights reserved.