CYUSB3KIT-003 EZ-USB FX3 TM高速枚举失败

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Anonymous
不适用

@我使用CYUSB3KIT-003 EZ-USB FX3 TM开发板,下载了USBMassStorageDemo固件,SuperSpeed枚举都是正常的,为了验证HighSpeed的枚举情况,我用了一根2.0的线材进行测试,测试了很多主机,枚举结果都是正常的,只有一款主机的其中一个接口(一台电视机中的一个USB3.0接口)枚举失败了,而这个主机接口我用别的U盘或移动硬盘都是枚举正常的,并且从捉包工具和读取文件的速度确认是高速枚举正常。

下图是枚举失败时我捉包工具的截图,从图中来看是红圈中缺少一个ACK包,也就是FX3在这个地方没有返回ACK包,从而引起了主机枚举失败。

11.png

下图是我用一个普通U盘的在同一个主机接口的枚举截图,该截图枚举结果是正常的:

22.png

我现在是怀疑官方的底层代码还是有一些兼容性的BUG。

另外补充一下,如果我在代码中做了很小的修改,就是通过增加CyU3PUsbForceFullSpeed (CyTrue);强制为FULL SPEED的话,枚举就正常了。yycazheng.rong.14_2919396yliu

0 点赞
1 解答
YangyangC_06
Employee
Employee
750 replies posted 500 replies posted 250 replies posted

Hi Xu weifeng,

不好意思,上周工作较忙,没有及时回复你的问题。

  1. 看到你说在固件里增加了CyU3PUsbForceFullSpeed (CyTrue),

    另外补充一下,如果我在代码中做了很小的修改,就是通过增加CyU3PUsbForceFullSpeed (CyTrue);强制为FULL SPEED的话,枚举就正常了

     那么你做了如上修改后,是否FX3就可以枚举为USB2.0设备?

2. 如我前面所述,

4. 你截图所示的USB抓包软件我没有用过,你能解释下对应到没有ACK的那次USB transfer是什么吗?

我的意思是:你截图的软件我并没有用过,对它的排版不了解,我不能明白你所指的ACK是属于哪一次transfer/transaction的。是属于前面的get_dscr的transfer/transactiion?

例如下面的USB trace,展开的是一次host获取device 描述符的transfer,

BaiduShurufa_2018-8-6_12-13-12.bmp

3. FX3 是经过了USB协会兼容性认证的产品,所以在USB兼容性方面,目前是有认证的。

综上,如果需要进一步定位问题,需要你那边提供下USB协议分析仪获取的trace信息。对于你截图的软件,我目前没有更多的建议。

在原帖中查看解决方案

0 点赞
11 回复数
YangyangC_06
Employee
Employee
750 replies posted 500 replies posted 250 replies posted

Hi xuweifeng,

请把你测试的工程发出来,我们这边测试下。

0 点赞
lock attach
Attachments are accessible only for community members.
Anonymous
不适用

33.png

就是官方的原例子,我什么代码都没改,这个例子我测试了很多主机,都可以正常枚举,只有一款电视机的一个USB3.0接口才出现这种2.0高速枚举失败的情况,该电视机还有一个USB2.0接口也能正常枚举,我的判断是跟这个电视机的主机有关系,但仍然觉得应该是FX3底层固件的问题。

如果需要的话,我也可以把电视机寄给你进行分析。

44.png

0 点赞
YangyangC_06
Employee
Employee
750 replies posted 500 replies posted 250 replies posted

xu weifeng 撰写:

只有一款电视机的一个USB3.0接口才出现这种2.0高速枚举失败的情况,该电视机还有一个USB2.0接口也能正常枚举

你是说Fx3的开发板,同样的Mass storage 的固件,在这个电视的USB3.0接口上2.0枚举失败,而在这个电视的另一个USB2.0的接口上则是可以正常枚举的?是这个意思吗?

0 点赞
Anonymous
不适用

是的,是您说的这样的,但千万不要理解成这台电视机的这个USB3.0接口有问题,因为我用普通的2.0U盘、3.0移动硬盘、2.0读卡器等,去验证这个接口,都能正常枚举,而且我也用仪器去分析,确定都是2.0高速枚举OK。

0 点赞
Anonymous
不适用

yyca您好:能帮忙再分析一下我的这个问题吗,这个问题还没解决,这个问题又必须得解决,已经困扰了我好长时间。

或者说有没有别的渠道可以获取到Cypress直接的技术支持。

谢谢了。

0 点赞
YangyangC_06
Employee
Employee
750 replies posted 500 replies posted 250 replies posted

Hi xu weifeng,

前面问题中你提到,Fx3在你的电视的USB的接口上会枚举失败,我想问下。

1. 如果枚举失败,电视端是否有类似Windows的设别管理器或者Linux的/dev 可以查看设备挂载?

2. 如果不烧录固件,bootloader启动的话,是否可以正常枚举为USB2.0的设备?

3. 如果step2 可以正常枚举为USB2.0,那么将固件中USB2.0设备描述符的bcdClass从USB2.1 改为USB2.0是否会不一样?

4. 你截图所示的USB抓包软件我没有用过,你能解释下对应到没有ACK的那次USB transfer是什么吗?

期待你的测试和回复。

0 点赞
Anonymous
不适用

Hello yyca, 感谢您的回复,我一直在期待您的答复,因为我实在不知道还能找谁来技术支持我。

1、是一台成品电视机,应该是安卓系统,没有类似设备管理器,也看不到/dev目录。

2、如果不烧录固件,bootload启动的话,也枚举不了,捉包工具捉到的信息与下载USBMassStorageDemo相似,也是FX3返回设备描述符后,主机返回应答,然后FX3不返回ACK,如下图:

66.png

3、我试过把描述符2.1改为2.0也不行。

4、那是USB数据传输的标准协议,我稍后找到相关协议再附上来。

0 点赞
Anonymous
不适用

“4. 你截图所示的USB抓包软件我没有用过,你能解释下对应到没有ACK的那次USB transfer是什么吗?”

关于这个问题我补充如下:

1.按照USB标准规定,设备刚插入主机的时候,USB主机会通过控制传输(Control Tranfer)读取设备描述符,控制传输包含三个阶段:

      1) 建立阶段(Setup)

      2) 数据阶段(无数据控制没有此阶段)(DATA)

      3) 状态阶段(Status)

2. 出问题的地方属于控制传输的状态阶段,由于是读设备描述符,因此这里HOST返回给DEVICE的状态,分解到包层面的话,HOST返回数据给DEVICE,需要DEVICE返回ACK包。

具体你可以参考USB标准文档,我是参考下面链接中的文章分析的:

USB协通讯议(很好的一篇文章) - CSDN博客

0 点赞
Anonymous
不适用

yyca​ 能不能再帮我分析一下我的这个问题,我还在等待。

0 点赞
YangyangC_06
Employee
Employee
750 replies posted 500 replies posted 250 replies posted

Hi Xu weifeng,

不好意思,上周工作较忙,没有及时回复你的问题。

  1. 看到你说在固件里增加了CyU3PUsbForceFullSpeed (CyTrue),

    另外补充一下,如果我在代码中做了很小的修改,就是通过增加CyU3PUsbForceFullSpeed (CyTrue);强制为FULL SPEED的话,枚举就正常了

     那么你做了如上修改后,是否FX3就可以枚举为USB2.0设备?

2. 如我前面所述,

4. 你截图所示的USB抓包软件我没有用过,你能解释下对应到没有ACK的那次USB transfer是什么吗?

我的意思是:你截图的软件我并没有用过,对它的排版不了解,我不能明白你所指的ACK是属于哪一次transfer/transaction的。是属于前面的get_dscr的transfer/transactiion?

例如下面的USB trace,展开的是一次host获取device 描述符的transfer,

BaiduShurufa_2018-8-6_12-13-12.bmp

3. FX3 是经过了USB协会兼容性认证的产品,所以在USB兼容性方面,目前是有认证的。

综上,如果需要进一步定位问题,需要你那边提供下USB协议分析仪获取的trace信息。对于你截图的软件,我目前没有更多的建议。

0 点赞
Anonymous
不适用

用FX3的BOOTLOAD固件去枚举我之前没有尝试过,但今天尝试了,发现跟USBMassStorageDemo的情况是一样的,除了FX3返回的设备描述符内容不一样外,其它都一样。我把BOOTLOAD固件的开发板插到这台电视机的另一个USB2.0接口上,枚举就成功了,如下图:

77.png

那么从这个现象来看就不是固件程序的问题了,好像是属于电气性能或者时序性能不兼容的问题,或者说最底层寄存器级别的固件问题。

如果是这样的话,有没有可能解决呢,我能不能把东西(一块电视主板和一个电源适配器)寄给你去帮我分析一下呢?

0 点赞