打印

脆弱的CY7C68013A-56PVXC,又未知了

[复制链接]
8842|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
klffnj|  楼主 | 2011-9-9 17:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 klffnj 于 2011-9-9 17:11 编辑

用CY7C68013A-56PVXC设计了一块板子,调试USB端口时,第一次直接在EErom中烧了启动程序,没想到正常使用几天以后,就提示称未知设备了,去掉EEROM,还是未知。 换了一块新板子后开始谨慎操作了, EEPROM仅仅烧了一次,刚开始正常,用了几次以后,电脑直接没有反应了, 换了一块干净的EEROM后正常,现在调试直接用在线调试工具,程序下到CY7C68013A-56PVXC的RAM后执行正常,单是没用几次,系统又提示未知设备,PIDVID都为0000,CY7C68013A-56PVXC为什么这么脆弱呢?

相关帖子

沙发
dqyubsh| | 2011-9-9 20:31 | 只看该作者
如果不能可靠识别,一会有一会没有,最大的可能是布线出了问题,或者用了劣质的电缆。

如果一直是好的,忽然就不识别了,先要检查它的电源、时钟CLKOUT,检查固件,检查焊接,检查驱动程序,看外围有没有可能和它冲突的器件,实在不成换个机器试验。绝对没有这么脆弱,至少我没遇见过坏的。

早期布线工艺很差劲,造成不能可靠识别,再后来遇见过虚焊的,焊坏的——充分验证了这个东西我自己焊不了。自从我用别人代工焊接之后,再没出过问题。

目前,我的经验是,哪怕只有两块试验板,我也代工焊接。这是调试过程中避免一切麻烦的最有效办法。

使用特权

评论回复
板凳
klffnj|  楼主 | 2011-9-13 18:02 | 只看该作者
板子放了3天以后,第一次上点居然识别了, console提示Mission EEPROM ,高兴万分,但是很快就失望了,console死机,重启后还是未知。
电源,用USB的,CLKOUT 12.5M,固件没有,EEPROM是空的,驱动的话另外一块板子能用。
用AN15456一步步排除,毫无结果。

在多次插拔动作中,只有一次系统能识别出来。

真的非常绝望,真个系统都被这玩意儿卡了一个多月了。........

使用特权

评论回复
地板
dqyubsh| | 2011-9-13 19:24 | 只看该作者
CLKOUT=12.5M,应该是12M,这是上电复位后CPU缺省频率,这是对的。

严格遵循AN15465的要求(其实就是评估板的要求),系统应该可以识别。象你这样说,可能原因有两个:
1,USB驱动装了不止一个,乱套了。或者是老版本,console和驱动不兼容。
2,布线工艺太差,想当然制版——这个是没辙的,一定要改电路板。这个要参看AN1168,最主要的是,D+D-两个管脚距离插座尽可能地近。目前,我的距离控制在5cm以内,平行无过孔,无转接,并采用高质量的USB电缆(移动硬盘线,或者几十块钱一条的品牌线),这样下来,我新作的几个设计,再没有出现不识别的现象。

你可以查一下上电复位后,SDA和SCL两条线,同时量,看有没有I2C数据发出。这是枚举过程中,CPU检查外部EEPROM数据的过程。

其实越麻烦的事,可能原因越简单,按部就班地来,一定会解决问题。

使用特权

评论回复
5
klffnj|  楼主 | 2011-9-16 16:17 | 只看该作者
1. 检查了一下布线,长度大概在8cm左右,这个长度和5cm比起来长了一些。  2.原理图这是这样画的 参考了一下开发板的画法是D+ 和D-都是直接相连,这个会不会是问题。 匹配电阻是33,不是通常说的90.
  另外一个让我很纠结的问题是,为了检验高低速设备的1.5K上啦电阻,开发板里面没有,AN1168 第四页图里面明显有,这个电阻到底需不需要。
3.PCB版图我这里实在看不到了,没法查了。

使用特权

评论回复
6
dqyubsh| | 2011-9-16 21:57 | 只看该作者
昏了,这是68013的图?外壳和地之间有电容和电阻(这个不是必须),D+D-也没有那些乱七八糟的电阻电容。。。。

使用特权

评论回复
7
Alex_rcpilot| | 2011-9-17 11:53 | 只看该作者
8cm,我去!而且这图也太……

那些电容电阻神马的一个都不要。1.5K外部上拉也不需要,这个就怪LZ看资料不仔细了。68013A的手册第一页block diagram里面清楚标明D+配备了一个内置的1.5K上拉电阻。而且3.6节介绍ReNumeration™技术的时候也提到了可以用软件控制USB的连接/断开。仔细一想就能明白是这个内置电阻在起作用。

如果你在外面接一个1.5K上拉,那么ReNumeration的时候本来芯片想断开USB,由于这个电阻存在,PC检测不到USB断开。然后芯片内部逻辑一直等主机reset又等不来。

即使在芯片正常连接USB的时候,两个1.5K上拉并联变成了0.75K强上拉,有的电脑主板可以认,有的高端板子就不认。而且外部上拉破坏了信号线的电特性,会造成信号畸变。

LZ看看官方CY3684评估板的原理图吧。玩FX2LP要从这个软件包开始,Cypress官方有下载。

CY3684.jpg (1.01 MB )

CY3684.jpg

使用特权

评论回复
8
klffnj|  楼主 | 2011-9-20 21:35 | 只看该作者
看了大家回复,在回去继续看TRM,实在惭愧。
这几天试着将空的eeprom取下来,上电后久违的missing EEPROM 又出现了,而且非常稳定。非常高兴。
回忆一下,自从换上这快空eeprom以来,没有进行过任何iic文件写入,唯一的一次操作是下载过一次hex文件,难道hex有bug回对eeprom有写入?
重新对没有eeprom的板子下hex,再次变为未知设备,断电重启后恢复到missing状态,重复下载hex,还是未知设备,现在问题定位到hex文件上,使用开发版自带的那个loop文件,也会变为未知。
到这里我,实在无从下手了

使用特权

评论回复
9
Alex_rcpilot| | 2011-9-21 12:22 | 只看该作者
现在的PCB应该直接报废,在这上面做的实验得到的任何推理都不能作为最终结论,因为你不知道USB数据什么时候就抽风了。赶紧改板子再实验吧。

使用特权

评论回复
10
klffnj|  楼主 | 2011-9-21 18:52 | 只看该作者
好吧,还是报废吧,浪费的时间太多了。

使用特权

评论回复
11
dqyubsh| | 2011-9-22 07:38 | 只看该作者
我不觉得你的设计有多糟糕,感觉不像板子的事。既然可以EEPROM MISS,那就应该把问题的重点移到固件上。

不知道你从哪里弄的开发板,但是不要迷信它。我一朋友买的上海某公司的开发板就有时常不识别的现象,我买的开发板(USB+DSP),也是如此,刚插上可以识别,再插不识别,必须放置一晚上才行,而且只能识别一次。

都是胎带的毛病,就是这么的烂!那些使用EZUSB驱动程序的,都是8年前的软件,都应该扔到垃圾堆。

我建议你,扔掉一切淘宝上或者国内公司的开发板,直接用CY的开发板电路图,遵循CY建议的布线规则,那些RESERVED,WAKEUP,RESET,AVCC,SCL/SDA上拉电阻,IFCLK,SDA接个跳线,这些一定要按照开发板正确连接。还有,就是D+D-不要打过孔翻面,不要接子板连其它插座,不要越过XTAL,上下两面全部做GND覆铜。

USB线缆去买贝尔金的,30块以上的。这样做了,如果只有一个68013,一定可以过。

使用特权

评论回复
12
klffnj|  楼主 | 2011-9-23 10:43 | 只看该作者
我也一直怀疑固件操作上哪里有问题,或者是代码,或者是编译过程。
代码部分没什么特别,只是用slaveFIFO,配置了一下autoin,autoout 。

void TD_Init( void )

CPUCS = 0x10;   //cpu 48Mhz,Clockout unable
       
        IFCONFIG =0x53;     //外部IFclk,180inverter,synchronously,gstate unable,slaveFifo mode.

        REVCTL = 0x03; // MUST set REVCTL.0 and REVCTL.1 to 1  EP autoarm unable. CPU can edit in and out packet.
        SYNCDELAY;                  
        FIFORESET = 0x80;
        SYNCDELAY;
        FIFORESET = 0x02;
        SYNCDELAY;
        FIFORESET = 0x04;
        SYNCDELAY;
        FIFORESET = 0x06;
        SYNCDELAY;
        FIFORESET = 0x08;
        SYNCDELAY;
        FIFORESET = 0x00;
        SYNCDELAY;
       
        SYNCDELAY;
        EP2CFG=0xA0;    //out bulk,512,quadbuffers
        SYNCDELAY;
        EP4CFG=0x00;
        SYNCDELAY;
        EP6CFG=0xE0; // in,其余同EP2
        SYNCDELAY;
        EP8CFG=0x00;

        PORTACFG |=  0x40;                 
        SYNCDELAY;
        OEA |=  0x0B;                                 
        SYNCDELAY;
        WAKEUPCS |= 0x00;               
        SYNCDELAY;
               
        SYNCDELAY;
        PINFLAGSAB = 0x00;         
        SYNCDELAY;
        PINFLAGSCD = 0x00;         
        SYNCDELAY;
        FIFOPINPOLAR = 0x00;          
        SYNCDELAY;
               
        EP2FIFOCFG = 0x11;    //when data arive endpoint interrupt is asserted,Cpu can't edit the data. and the
                                                // flags changed automatically. Wordwidth is 16bit.       
        SYNCDELAY;               
        EP6FIFOCFG = 0x4D; //快接近满时提示。按照自定义大小自动分解文件包。Enable Zero length IN Packets,16bit
        SYNCDELAY;

编译时除了fifo.c和fw.c 另外增加了ezusb.lib,usbjmptb.obj,dscr.a51.

出了初始化代码,其它没有做任何更改。   理论上,如果EEPROM没有的话,PID和VID应该是默认的,用console下载hex文件进去后,pid和vid是不变的。但是上位机提示的未知设备,我推断是因为下位机有了鑫的ID,所以识别不了。
打开dscr.a51, 在decriber 字段有PID和VID的标示,所以直接改了,还是没用。 (不懂这个有什么意义,乱来的)

使用特权

评论回复
13
dqyubsh| | 2011-9-23 10:58 | 只看该作者
你说的“理论上”是有问题的,它除了EEPROM中写的有关联,也和dscr.a51写的有关联,即,无论是EEPROM写的PID/VID,还是dscr.a51中的PID/VID,只要有一个不是系统缺省装过驱动程序的PID/VID,自然会提示未知设备。

我一般会把这两个位置的值设置成一样的,然后给它一个INF,一个SYS,安装一次驱动程序,它就可以识别了。

当你没有EEPROM的时候,你可以把dscr.a51中的PID/VID设置成cypress安装过的PID/VID。一般是以下这个样子:
DeviceDscr:   
      db   DSCR_DEVICE_LEN      ;; Descriptor length
      db   DSCR_DEVICE   ;; Decriptor type
      dw   0002H      ;; Specification Version (BCD)
      db   00H        ;; Device class
      db   00H         ;; Device sub-class
      db   00H         ;; Device sub-sub-class
      db   64         ;; Maximum packet size
      dw   0B404H      ;; Vendor ID
      dw   0410H      ;; Product ID (Sample Device)
      dw   0000H      ;; Product version ID
      db   1         ;; Manufacturer string index
      db   2         ;; Product string index
      db   0         ;; Serial number string index
      db   1         ;; Number of configurations

前提条件是,你使用的是CY比较新的驱动,如果使用的是早年的EZ-USB,或者其它开发板自己改的PID/VID,那谁都救不了你。

使用特权

评论回复
14
dqyubsh| | 2011-9-23 11:00 | 只看该作者
并且,你应该先用BULKLOOP等例子去测试,上上下下弄熟练了,再去SLAVE FIFO。

使用特权

评论回复
15
Arwei| | 2011-9-26 00:14 | 只看该作者
1. 检查了一下布线,长度大概在8cm左右,这个长度和5cm比起来长了一些。  2.原理图这是这样画的78079 参考了一下开发板的画法是D+ 和D-都是直接相连,这个会不会是问题。 匹配电阻是33,不是通常说的90.
  另外一个 ...
klffnj 发表于 2011-9-16 16:17



电阻电容统统去掉  用了没有用!还有副作用

使用特权

评论回复
16
klffnj|  楼主 | 2011-10-13 08:57 | 只看该作者
经过多次尝试,发68013确实是好的,而且很稳定,发现问题的根源有两个,一是布线太长,这个是主要原因,加上阻抗匹配没有管理,导致usb识别的不稳定,有没有电容和电阻确实没有什么明显影响。 
二是FPGA已经损坏,导致给USB的Reset信号不稳定,如果系统一直提示未知,很有可能就是这个原因。 另外的一个设计建议,rst信号一定慎重对待,尤其是FPGA控制的时候,rst时间要足够。

另外一个问题,愚某还是没搞懂,console 第二次下载fw之后,上位机任然保持第一次下载的fw驱动和P VID,没有跟着新的fw变,不懂。。。

这次事故,学习了大家的很多经验,真的非常感谢,交流是学习的好方法。

使用特权

评论回复
17
dqyubsh| | 2011-10-13 10:03 | 只看该作者
其实阻抗可以自己用软件算一下(AD就可以),作成差分线,约定等长就差不多了,然后要求制版厂家给做解决阻抗问题。我觉得,细心一点,这个不是大碍。

我从淘宝买的销量第一的USB FPGA下载线,前阵子不好使了,未知了,打开一看是68013的。核对一下标准电路,发现复位电路没按评估板参数来,乱搞的,连二极管都没加。更换了电阻电容,加了二极管,顺道换了几个看着不顺眼的电阻电容参数,以及晶体周边,好了。

这块板子的问题是,为了降低成本,把钽电容换成低容量的陶瓷电容,还有就是布线太差劲。

68013没必要让FPGA复位,自己复位就可以了。

至于你说的FW没变,我一般用DOWNLOAD按钮再选一次文件,不用界面的RELOAD按钮,貌似RELOAD确实不太可靠。还有就是,下载之后有个复位8051的操作,你可以自己试着在下载之后写个命令复位它。

使用特权

评论回复
18
yqdz2005| | 2017-5-19 16:35 | 只看该作者
MARK

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

210

帖子

1

粉丝