我们使用了TI的 TUSB501 芯片做CX3的 TX信号增强,原理图如下。
我们发现,如果用电脑的 USB3.0 接口下载固件没有问题,一切正常。
当我们使用 USB2.0 口下载固件的时候,发现刚开始枚举下载设备的时候没有问题,选择Program -> SPI flash,等待一会儿就会显示设备未发现(正常情况是可以正常弹出窗口选择固件进行下载。)
经过排查分析,拿掉了增强芯片,以上现象消失。
我们怀疑,CX3误识别了设备,以为我们插入的是USB3.0口,从而导致通讯失败,不能识别设备。
请问有什么解决办法?
已解决! 转到解答。
Hi,
点击选择Program -> SPI flash的过程本质是向CX3下载了一个固件,该固件再把USB传过来的固件数据给写入Flash。这个固件的源代码在SDK中, USBFlashProg。
您可以修改代码,通过修改固件中的CyU3PConnectState(CyTrue, CyTrue)为CyU3PConnectState(CyTrue, CyFalse)这样,这个固件只会枚举为USB2.0 device,也就不会受到USB3.0信号的影响。
在SDK中没有找到源码,麻烦给一下USBFlashProg工程源码。
-----找到了 是cyfxflashprog 工程
1)使用这个工程,什么都不改直接编译:C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\firmware\basic_examples\cyfxflashprog
2)将生成的镜像问题替换掉C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\bin\CyBootProgrammer.img
3) USB control center依次选择Program -> FX3 -> SPI FLASH
4)下载镜像的弹框没有弹出来,设备管理器里面异常如下:
5)对比原来的CyBootProgrammer.img和现在编译出来的镜像文件差异很大。如下:
我这里是可以这么操作的
不修改代码直接编译:
修改代码后为highspeed:
那只能是你板子的硬件有问题。
您这个增强芯片起的是什么作用呢?增大差分信号的幅度?是为了延长USB线缆的长度吗?
是为了延长USB线缆的长度。我们不修改任何代码的情况下编译cyfxflashprog 工程,对比原来的CyBootProgrammer.img和现在编译出来的镜像文件差异很大。然后就出问题了。
我们bypass这颗增强IC,然后用USB2.0口下载没有问题(用默认CyBootProgrammer.img)。
你可以把你的改为2.0的编译好的CyBootProgrammer.img发给我们验证一下吗?
邮件:xu.yan@movisionxr.com
你把status = CyU3PConnectState(CyTrue, CyFalse);这句改了编译即可。
img差异大可能因为默认用的那个用的是我们老版本的library,没什么问题。
你把status = CyU3PConnectState(CyTrue, CyFalse);这句改了编译即可。
-----------我们尝试过了,USB枚举出来后会报错显示黄色感叹号 “该设备无法启动. (代码 10) 指定不存在的设备.”
我们不修改任何代码的情况下编译cyfxflashprog 工程,出现如上一样的情况。
使用默认的CyBootProgrammer.img没有此问题。
您一开始说的是"当我们使用 USB2.0 口下载固件的时候,发现刚开始枚举下载设备的时候没有问题,选择Program -> SPI flash,等待一会儿就会显示设备未发现(正常情况是可以正常弹出窗口选择固件进行下载。)"
可是你现在又说使用默认的CyBootProgrammer.img没有此问题。
所以现在一个问题就在于,USB2.0的固件是否有可以成功工作过的?
误会了。
使用默认的CyBootProgrammer.img没有此问题。
-------这个是基于我去掉这颗增强IC。只要这颗增强IC存在就会找不到设备。所以您建议我们强制枚举为2.0.
如下现象是我拿掉了这颗增强IC。只有usb2.0连接。
现在的问题是,即使我物理断开usb3.0线路连接。也会出现以下情况。
我们不修改任何代码的情况下编译cyfxflashprog 工程,然后替换CyBootProgrammer.img会出现USB报错问题。
使用默认的CyBootProgrammer.img没有此问题。下载一切正常。
在增强IC存在的情况下你用USB3.0的口下载USB2.0的固件,可以枚举么?
增强IC存在的情况下从来没有成功过。会出现设备未发现。
我们按照你的建议更改工程把status = CyU3PConnectState(CyTrue, CyFalse),然后替换就出现了黄色感叹号。
那你这个问题的关键点就不在bootprogrammer的使用,而是增强I2C存在的情况下USB2.0根本无法工作。我觉得你也可以去咨询一下TI的工程师。
昨天我已经说了,你的问题的关键在于USB2.0无法工作,和bootprogrammer没有关系。
使用CyU3PConnectState将固件改为USB Highspeed与USB3.0的固件插入USB2.0口效果是一样的。而且你也可以在3.0口下载固件然后修改PMODE插到USB2.0口上证实我的话。
即使是你成功的在USB2.0口下载了固件,这个固件也不会成功枚举。
这个信号有问题没法通过软件解决,谢谢。
你好,我拿掉增强芯片后,使用默认bootprogrammer,下载一切正常的。USB2.0的物理链路是没有问题的。USB2.0是工作正常的。我们也跑过LOOP。
我们现在要解决的是,我们自己编译的bootprogrammer没法正常工作。
那增强芯片存在的情况下呢?USB2.0设备可以枚举吗?
那增强芯片存在的情况下呢?USB2.0设备可以枚举吗?
---------不能,感觉应该是设备误识别为3.0,一直不往2.0掉落。
我们的应用必须要使用usb3.0. 所以为了规避这个下载问题,我们想在下载固件的时候强制枚举为2.0。也就是需要更改bootprogrammer,但是,我们不更改自己本地编译都出现不可用。附件之前已经附上,您可以验证一下。您也可以把你编译个强制USB2.0的bootprogrammer发给我们验证一下。
bootprogrammer本质也是一个固件啊,和其他的固件没有什么区别,只是他的作用是用来往flash或者eeprom中写数据,你其他的都不能枚举为什么觉得bootprogrammer可以枚举呢。
我们使用默认的bootprogrammer,在USB2.0下一切正常。自己编译这个bootprogrammer就不正常了。我有私信给你我的电话,能电话沟通一下吗?
你就不要纠结bootprogrammer的问题了,这个对你现在没有任何帮助。
如果你想要强制使你的应用在2.0下不工作,只工作在3.0,可以参考这篇文章:
您可以把你之前编译的。可以枚举出2.0的bootprogrammer发给我吗?
我们工厂电脑是2.0端口。2.0是必须保留的。
我们就想改一下 bootprogrammer ,然后能让他像默认bootprogrammer一样正常弹框出来下载固件。
我打过4遍了,没人接。
😂 有一个未接来电没接到的,不好意思。再打一下吧🤣
你好,项目紧急能帮尽快解决一下问题吗?
您提供的img文件测试OK。能否把cyfxflashprog这个文件夹打包发给我们?感谢!
经过排查发现,我们编译的是release版本,不能用,
但是编译debug版本,通过比较,和你提供的USBFlashProg20.img 二进制一模一样。
为什么会这样呢?release版本还有问题吗 ?
release和debug版本编译使用的library不一样,release版本通常固件大小会小一点。
我用release版本还是可以正常枚举的