打印
[ZLG-MCU]

爆LPC935的遇到的严重问题,我想放弃NXP了

[复制链接]
5659|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qingheworkshop|  楼主 | 2009-10-27 15:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在这里爆爆我使用NXP遇到的问题。我使用LPC9XX系列的单片的时间已经超过5年了,也不算是个新手,大大小小使用LPC9XX做过的产品也有10个以上了,以前也没有遇到这种无法解决的问题,这次遇到的问题很蹊跷,我想了很多办法,没能解决,希望周公出来陈清下市这个批次的芯片出现的工艺,或质量问题,还是新版IC设计原因。不管怎么样,不过,即便是得意解决,我以后也会尽可能不选用NXP了,这次很受伤。我想还是不要成为不完善的IC的牺牲品。
    首先问题1:LPC935内部的EEPROM读出的数据老是变化。开始的时候,调试人员以为是内部EEPROM不能写入,后来我测试,写入正确,而是读出数据时出错。我的系统使用的是内部RC振荡器,电源使用的是1117M3.3.最小系统,外部使用了一片MAX202和ADS1110。这个产品是1年前投产的,没有遇到这样的问题,这次突然出现传感器标定后,仍然测量超限(内部没有标定值),我使用串口将内部EEPROM读出的数据发送出来,发现,每3-5次读取EEPROM,就有一次数据是错误的。我怀疑是芯片打磨了,渠道不对,当即在ZLG订购了20片LPC935进行测试,结论一样。我的EEPROM读写程序参考了ZLG的代码,应用在别的芯片LPC932和别的产品没有发现问题,操作EEPROM时也关闭了中断,排除了程序问题。后来,我没有别的办法可想,只好对EEPROM连续读取5次,5次读出的结果都一样,才认为数据正确,总算勉强过了关。
   问题2. EEPROM的问题刚解决,新问题又接踵而至,测试人员反映一开机电机狂转,紧接着复位。电机调速使用了PWM,使用了CCU的PWM模式。现象是一旦启动电机调速,CPU复位。最后发现问题在PLL问题上。我使用的内部RC振荡器分频后给PLL提供时钟,一旦启动PLL后,PLL不能锁定,程序死在
            while(PLLEN==0);// wait until PLL locked
        的位置上,紧接着,WDTC让CPU复位了。去掉了这句代码程序可以正常运行了,只是不能调速了。
      我希望ZLG的客服不要一出来就怀疑程序怎么样,当然我不是说我的程序就一定OK,但是,或许他不完美,但是你们不要扇自己耳光,以为CCU的初始化代码原版照抄的你的示例代码,更关键的是,这是个成熟产品,快2年了,已经生产了好几百台的东西,难道还不能说明是程序时可靠的吗?
      我都怀疑,NXP是不是被山寨了?宏晶代工的?或者瑕疵IC都流入了中国?

相关帖子

沙发
qingheworkshop|  楼主 | 2009-10-27 16:32 | 只看该作者
我把EEPROM的读写代码贴出来吧,大家看看

/**********************************************************************************
LPC9XX内部EEPROM操作函数
操作方式:单字节
**********************************************************************************/
void EEPROMwrite(unsigned int adr, unsigned char dat)
{
    uchar OK=0;
EA=0;
while(OK==0)
{          // disable Interrupts during write
    DEECON=0;  // mode: write byte, set address
    DEEDAT=dat;         // set write data
    DEEADR=(unsigned char) adr;     // start write     
    while((DEECON&0x80)==0);     // wait until write is complete
    DEECON &= 0x7F;
    Delay(100);
    EA=0;
    if(dat == EEPROMread(adr))
    {
       OK = 1;
    }
}
EA=1;

}


unsigned char EEPROMread(unsigned int adr)
{
    EA=0;
DEECON=0;  // mode: read byte, set adress
DEEADR=(unsigned char) adr;     // start read
    while((DEECON&0x80)==0);     // wait until read is complete

EA=1;
return DEEDAT;        // return data
}




还有CCU的初始化代码:
/****************************************************************************************
CCU初始化,CCU产生PWM用于电机调速
****************************************************************************************/
void CCU_init(void)
{
OCD=1;          //enable ports P2.1
TPCR2H=0x00; // set CCU Prescaler:
TPCR2L=0xC7; // divide by 200 (199+1)  0x08     
TCR21=0x06;  // Prescaler for Phase Locked Loop:
     // Input frequency must be in range of 0.5-1Mhz
     // InpFrq=PCLK/(PLLDIV+1)=(CCLK/2)/(PLLDIV+1)
     // using the internal RC oscillator: CCLK=7.373MHz
     //   PLLDiv=6, 6+1=7      => 0.5266 MHz
     // using Crystal 11.0592 MHz => 0.789 MHz
CCCRD=0x02;  // inverted PWM output on channel D
//TCR20=0x80;  // Start PLL, OutputMode: stop
PLLEN = 1;
NOP;
NOP;           
while(PLLEN==0);// wait until PLL locked
TOR2H=0x00;  // Reload Value 0x00FF=255
TOR2L=0xFF;  // -> PWM period
TCR21|=0x80; // update reload value
OCRDH=0x00;  // initialize Duty-Cycle
OCRDL=0xFE;   
TCR21|=0x80; // update duty cycle
TCR20=0x82;  // Set output mode: asymmetrical PWM,Up Conter  
}

使用特权

评论回复
板凳
qingheworkshop|  楼主 | 2009-10-27 16:33 | 只看该作者
这会儿客服都下班了吧,明天我订购一批LPC9351试试。好像也没有别的什么办法了。

使用特权

评论回复
地板
linhai1986| | 2009-10-28 00:00 | 只看该作者
别急,按理说应该不会出现这种问题,周公的东西还是不错的。等待版主出来解释一下

使用特权

评论回复
5
xiaoxin1986| | 2009-10-28 00:17 | 只看该作者
支持4楼的说法

使用特权

评论回复
6
qingheworkshop|  楼主 | 2009-10-28 11:12 | 只看该作者
我也试图这样安慰自己,以前用NXP也没这样麻烦过。这个问题也只是这个批次出现的。我刚看了我的LPC PRO不支持对LPC9351的编程,ZLG也停止对其升级了。想换LPC9351的想法也OVER了,先买几pcs LPC932A1试试,这个应该比935的BUG少一点吧。

使用特权

评论回复
7
kenand| | 2009-10-28 11:48 | 只看该作者
qingheworkshop,您好!

  1.  关于EEPROM,不存在读数据不稳定的情况。我们有demo板可以验证,如果您的板子出问题,您可以与销售联系,把您的板子发给相关销售,我帮您查找原因何在。

  2.  对于while(while(PLLEN==0);// wait until PLL locked
        这样的语句最好改一下,添加超时溢出机制。上面的语句可以作为范例程序,工业应用中还是最好改改。
        http://www.zlgmcu.com/download/downs.asp?ID=609
        此范例是keil写的CCU ,PWm的范例keil敢把这个程序放在他们官方网站,我相信CCU PWM功能是经过无数人验证过的,我也验证过。如果您那边PWM异常,建议您先把这个程序编译后烧进去,最好去掉负载,看看现象如何,如果不正常,欢迎与我联系。
  
  3.  关于LPCPRO的烧写问题,您可以选择LPC935,在【编程】对话框的【设置】窗口中选择【忽略ID】,即可以对LPC935进行烧写。


    我的联系方式: 020-22644361, 肖.

使用特权

评论回复
8
qingheworkshop|  楼主 | 2009-10-28 12:56 | 只看该作者
谢谢kenand的回复。EEPROM的问题暂且放一边了,我增加了数据校验字节和重读机制,暂时可以通过了,目前先解决CCU的问题。
我已经下载了程序,相信很快就有结果。
关于LPCPO,我咨询了致远的售后,他们明确告诉我不能烧写LPC9351。我也不相信,明明是相同的内核,不可能做编程算法的改变的。我会弄一片LPC9351试试。

使用特权

评论回复
9
yzgwxflove| | 2009-10-28 19:07 | 只看该作者
我还能写一段程序让LPC936直接硬件损坏,试了4次,屡试不爽:lol

使用特权

评论回复
10
awmc_m| | 2009-10-28 21:15 | 只看该作者
lpc900的eeprom问题应该不止lz一个人遇到过

使用特权

评论回复
11
acteler| | 2009-10-28 22:42 | 只看该作者
NXP是出了名的bug多,如果国内不是老周推,早就死翘翘了...

使用特权

评论回复
12
kenand| | 2009-10-29 10:21 | 只看该作者
有很多人用个三极管都有一堆问题,不能这个就说三极管xxx吧!
有的人编写程序也会遇见问题,不能因为这个就说编译器bug多吧。

是问题终究都有原因,都有根源,工程师的职责就是不断解决问题,设计可靠产品。

使用特权

评论回复
13
linhai1986| | 2009-10-29 18:49 | 只看该作者
12楼说的很有道理,要是什么都没问题,谁上手都能做的很好,那工程师就是虚名了

使用特权

评论回复
14
xiaoxin1986| | 2009-10-29 22:55 | 只看该作者
11# acteler

这个也不能这么说吧,人家也不只是中国一个市场

使用特权

评论回复
15
xiaoxin1986| | 2009-10-29 22:55 | 只看该作者
同意12楼的看法

使用特权

评论回复
16
dxf40943596| | 2009-11-2 10:32 | 只看该作者
没用过不大清楚

使用特权

评论回复
17
qingheworkshop|  楼主 | 2009-11-8 09:20 | 只看该作者
出差了几天,回来继续搞这个NXP的LPC935的CCU。现在遇到了问题是,串行口只要连接了设备,LPC9XX的CCU就不能启动,已启动,则PLL锁不住,死机。换了LPC935FDH和LPC932A1FDh,问题一样。我测量了MAX202的输入线,已经确认,外部RS232设备不管连部连接,MAX202的TTL输出端仍然是电平不变,但是它就是确确实实影响了CCU的PLL的锁定。

使用特权

评论回复
18
zlg315| | 2009-11-9 10:18 | 只看该作者
请直接与我们的销售工程师联系,他们会帮助你找到内部的技术支持工程师处理你的问题,对于我们来说,LPC900已经非常熟悉了,几乎没有不能解决的问题。

使用特权

评论回复
19
qingheworkshop|  楼主 | 2009-11-9 14:18 | 只看该作者
看来帖子惊动了周公了,可能是涉及到NXP的声誉了吧。我现在的测试结果,我的外部RS232连接的是一个串口打印机,只要打印机电源不开机,启动电机调速时,PLL能够正常锁定,CCU工作正常,电机可以调速。如果打开了打印机的电源再启动电机调速,PLL就不能锁定,伴随着电机的飞速旋转,1秒钟后,CPU复位。目前,我修改了产品说明书,做试验之前必须关闭打印机。但这样不是一个产品工程师的做法,只是目前忙于另外的工作,无暇顾及。ZLG的哪位工程师留下邮箱地址,我好发过去原理图和程序。

使用特权

评论回复
20
linhai1986| | 2009-11-11 12:33 | 只看该作者
路过

使用特权

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

本版积分规则

16

主题

78

帖子

0

粉丝