共2条
1/1 1 跳转至页
usb 请教一个关于usb枚举的问题

问
采用D12芯片,在主机从设备读取描述符的时候,设备描述符是通过几次发送的(因为D12端口0的数据缓冲区只有十六个字节),但是发现,主机只读取一次数据,之后就不在发送in命令了。(用USB分析仪,发现只有一次in命令,之后主机就发送一个out命令 ,结束了数据传输)。
请高手帮忙解答一下!谢了先!! 答 1: 对于刚插入的设备,在复位后,主机发一个获取描述符的命令如果有数据返回,就认为设备正常,接下来就会发送设置地址(SET ADDRESS)命令。
第一次获取描述符(GET DESCRIPTOR)时,只负责检测是否有描述符返回,而不管这个描述符有多长。
所以,如果你的描述符超过16字节,在D12返回一次数据后,主机将不再发送输入请求包,
而转换到设置地址阶段。设置地址后,USB HOST将使用新的地址,对设备进行获取描述符
操作,这时可返回完整的描述符。 答 2: 不是那个意思主机发送第一次获取设备描述符的命令,设备可以正常返回数据
然后主机发送地址命令,也对
设置地址后,主机使用新的地址,对设备进行获取描述符的操作,这时返回的第一次数据也对,但是并没有一次传输完,而主机却不再发送新的IN命令了!!
整个枚举的过程是对的,只是当要发送的数据长度大于EP0的最大数据传输量时(我设的是16个字节),就只能传输一次。
不知道是哪里有问题,硬件应该是对的!
晕了,高手帮帮忙啊!
huhu!!
答 3: 枚举过程如下:PID:SETUP ADDR:00 ENDP:00 CRC5:02 idle:3
PID:DATA0 data:80 06 00 01 00 00 40 00 CRC16:94dd idle:6
PID:ACK idle:2e18
PID:SOF FRAME:3a0 CRC5:0a idle:6
PID:IN ADDR:00 ENDP:00 CRC5:02 idle:8
PID:NAK idle:2e7d
PID:SOF FRAME:3a1 CRC5:15 idle:6
PID:IN ADDR:00 ENDP:00 CRC5:02 idle:8
PID:DATA1 data:12 01 10 01 00 00 00 40 71 04 01 00 13 01 01 00 CRC16:1df8 idle:8
PID:ACK idle:2dd3
PID:SETUP ADDR:00 ENDP:00 CRC5:02 idle:3
PID:DATA0 data:00 05 01 00 00 00 00 00 CRC16:25eb idle:6
PID:ACK idle:2e1a
PID:SOF FRAME:3de CRC5:12 idle:6
PID:IN ADDR:00 ENDP:00 CRC5:02 idle:8
PID:NAK idle:2e7d
PID:SOF FRAME:3df CRC5:0d idle:6
PID:IN ADDR:00 ENDP:00 CRC5:02 idle:8
PID:DATA1 data:CRC16:0000 idle:8
PID:ACK idle:2e53
PID:SETUP ADDR:01 ENDP:00 CRC5:1d idle:3
PID:DATA0 data:80 06 00 01 00 00 12 00 CRC16:f4e0 idle:6
PID:ACK idle:2e1a
PID:SOF FRAME:41d CRC5:1c idle:6
PID:IN ADDR:01 ENDP:00 CRC5:1d idle:7
PID:NAK idle:2e7d
PID:SOF FRAME:41e CRC5:14 idle:6
PID:IN ADDR:01 ENDP:00 CRC5:1d idle:8
PID:DATA1 data:12 01 10 01 00 00 00 40 71 04 01 00 13 01 01 00 CRC16:1df8 idle:8
PID:ACK idle:2dd3
PID:SOF FRAME:41f CRC5:0b idle:2ebc
PID:SOF FRAME:420 CRC5:07 idle:6
PID:OUT ADDR:01 ENDP:00 CRC5:1d idle:3
PID:DATA1 data:CRC16:0000 idle:6
PID:ACK idle:2e59
PID:SOF FRAME:421 CRC5:18 idle:2ebd
PID:SOF FRAME:422 CRC5:10 idle:2ebd
PID:SOF FRAME:423 CRC5:0f idle:2ebd
PID:SOF FRAME:424 CRC5:00 idle:2ebd
这里,实际上数据还没有发送完,但是主机却不再发送IN命令了!!
请高手帮忙解答一下!谢了先!! 答 1: 对于刚插入的设备,在复位后,主机发一个获取描述符的命令如果有数据返回,就认为设备正常,接下来就会发送设置地址(SET ADDRESS)命令。
第一次获取描述符(GET DESCRIPTOR)时,只负责检测是否有描述符返回,而不管这个描述符有多长。
所以,如果你的描述符超过16字节,在D12返回一次数据后,主机将不再发送输入请求包,
而转换到设置地址阶段。设置地址后,USB HOST将使用新的地址,对设备进行获取描述符
操作,这时可返回完整的描述符。 答 2: 不是那个意思主机发送第一次获取设备描述符的命令,设备可以正常返回数据
然后主机发送地址命令,也对
设置地址后,主机使用新的地址,对设备进行获取描述符的操作,这时返回的第一次数据也对,但是并没有一次传输完,而主机却不再发送新的IN命令了!!
整个枚举的过程是对的,只是当要发送的数据长度大于EP0的最大数据传输量时(我设的是16个字节),就只能传输一次。
不知道是哪里有问题,硬件应该是对的!
晕了,高手帮帮忙啊!
huhu!!
答 3: 枚举过程如下:PID:SETUP ADDR:00 ENDP:00 CRC5:02 idle:3
PID:DATA0 data:80 06 00 01 00 00 40 00 CRC16:94dd idle:6
PID:ACK idle:2e18
PID:SOF FRAME:3a0 CRC5:0a idle:6
PID:IN ADDR:00 ENDP:00 CRC5:02 idle:8
PID:NAK idle:2e7d
PID:SOF FRAME:3a1 CRC5:15 idle:6
PID:IN ADDR:00 ENDP:00 CRC5:02 idle:8
PID:DATA1 data:12 01 10 01 00 00 00 40 71 04 01 00 13 01 01 00 CRC16:1df8 idle:8
PID:ACK idle:2dd3
PID:SETUP ADDR:00 ENDP:00 CRC5:02 idle:3
PID:DATA0 data:00 05 01 00 00 00 00 00 CRC16:25eb idle:6
PID:ACK idle:2e1a
PID:SOF FRAME:3de CRC5:12 idle:6
PID:IN ADDR:00 ENDP:00 CRC5:02 idle:8
PID:NAK idle:2e7d
PID:SOF FRAME:3df CRC5:0d idle:6
PID:IN ADDR:00 ENDP:00 CRC5:02 idle:8
PID:DATA1 data:CRC16:0000 idle:8
PID:ACK idle:2e53
PID:SETUP ADDR:01 ENDP:00 CRC5:1d idle:3
PID:DATA0 data:80 06 00 01 00 00 12 00 CRC16:f4e0 idle:6
PID:ACK idle:2e1a
PID:SOF FRAME:41d CRC5:1c idle:6
PID:IN ADDR:01 ENDP:00 CRC5:1d idle:7
PID:NAK idle:2e7d
PID:SOF FRAME:41e CRC5:14 idle:6
PID:IN ADDR:01 ENDP:00 CRC5:1d idle:8
PID:DATA1 data:12 01 10 01 00 00 00 40 71 04 01 00 13 01 01 00 CRC16:1df8 idle:8
PID:ACK idle:2dd3
PID:SOF FRAME:41f CRC5:0b idle:2ebc
PID:SOF FRAME:420 CRC5:07 idle:6
PID:OUT ADDR:01 ENDP:00 CRC5:1d idle:3
PID:DATA1 data:CRC16:0000 idle:6
PID:ACK idle:2e59
PID:SOF FRAME:421 CRC5:18 idle:2ebd
PID:SOF FRAME:422 CRC5:10 idle:2ebd
PID:SOF FRAME:423 CRC5:0f idle:2ebd
PID:SOF FRAME:424 CRC5:00 idle:2ebd
这里,实际上数据还没有发送完,但是主机却不再发送IN命令了!!
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 | |
【我踩过的那些坑】杜绑线问题被打赏50分 | |
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 |