[ZLG-ARM] 要说浮躁,没有谁比NXP更浮躁了!

[复制链接]
5247|12
 楼主| andrewpei 发表于 2008-12-22 15:17 | 显示全部楼层 |阅读模式
NXP, AN, TI, TE, ce
最近作CAN的驱动,发现NXP的文档写得简直叫狗屎。<br />同样的CAN模块,同样的设计(我相信一定是相同的设计),三款芯片对于中断标志位IDI(ICR.8)的描述差别甚大:<br /><br />LPC2292的:<br />ID&nbsp;Ready&nbsp;Interrupt&nbsp;--&nbsp;this&nbsp;bit&nbsp;is&nbsp;set&nbsp;if&nbsp;the&nbsp;IDIE&nbsp;bit&nbsp;in&nbsp;<br />CANIE&nbsp;is&nbsp;1,&nbsp;and&nbsp;a&nbsp;CAN&nbsp;Identifier&nbsp;has&nbsp;been&nbsp;received.<br /><br />LPC2917的:<br />IDIE&nbsp;R/W&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ID&nbsp;ready&nbsp;interrupt&nbsp;enable<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;An&nbsp;interrupt&nbsp;is&nbsp;generated&nbsp;if&nbsp;a&nbsp;CAN&nbsp;identifier&nbsp;has&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;been&nbsp;received&nbsp;in&nbsp;acceptance&nbsp;filter&nbsp;bypass&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mode.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br /><br />LPC2378的最离谱,看完了搞不清楚到底是与发送有关还与跟接收有关<br />IDI&nbsp;&nbsp;ID&nbsp;Ready&nbsp;Interrupt&nbsp;&nbsp;0&nbsp;(reset)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;(set)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;this&nbsp;bit&nbsp;is&nbsp;set&nbsp;if&nbsp;the&nbsp;IDIE&nbsp;bit&nbsp;in&nbsp;CANxIER&nbsp;is&nbsp;1,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;a&nbsp;CAN&nbsp;Identifier&nbsp;has&nbsp;been&nbsp;received&nbsp;(a&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;was&nbsp;successfully&nbsp;transmitted&nbsp;or&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aborted).&nbsp;This&nbsp;bit&nbsp;is&nbsp;set&nbsp;whenever&nbsp;a&nbsp;message&nbsp;was&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;successfully&nbsp;transmitted&nbsp;or&nbsp;aborted&nbsp;and&nbsp;the&nbsp;IDIE&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bit&nbsp;is&nbsp;set&nbsp;in&nbsp;the&nbsp;IER&nbsp;reg.<br /><br /><br />再看LPC2378的errate&nbsp;sheet,CAN的Data&nbsp;Overrun这个BUG描述也让人一头雾水。<br />Introduction:&nbsp;Each&nbsp;CAN&nbsp;controller&nbsp;provides&nbsp;a&nbsp;double&nbsp;Receive&nbsp;Buffer&nbsp;(RBX)&nbsp;per&nbsp;CAN&nbsp;channel&nbsp;to&nbsp;store&nbsp;incoming&nbsp;<br />messages&nbsp;until&nbsp;they&nbsp;are&nbsp;processed&nbsp;by&nbsp;the&nbsp;CPU.&nbsp;Software&nbsp;task&nbsp;should&nbsp;read&nbsp;and&nbsp;save&nbsp;received&nbsp;data<br />as&nbsp;soon&nbsp;as&nbsp;a&nbsp;message&nbsp;reception&nbsp;is&nbsp;signaled.<br />In&nbsp;cases,&nbsp;where&nbsp;both&nbsp;receive&nbsp;buffers&nbsp;are&nbsp;filled&nbsp;and&nbsp;the&nbsp;contents&nbsp;are&nbsp;not&nbsp;read&nbsp;before&nbsp;the&nbsp;third&nbsp;mes-<br />sage&nbsp;comes&nbsp;in,&nbsp;a&nbsp;CAN&nbsp;Data&nbsp;Overrun&nbsp;situation&nbsp;is&nbsp;signaled.&nbsp;This&nbsp;condition&nbsp;is&nbsp;signaled&nbsp;via&nbsp;the&nbsp;Status<br />register&nbsp;and&nbsp;the&nbsp;Data&nbsp;Overrun&nbsp;Interrupt&nbsp;(if&nbsp;enabled).<br />Problem:&nbsp;In&nbsp;a&nbsp;Data&nbsp;Overrun&nbsp;condition,&nbsp;the&nbsp;CAN&nbsp;controller&nbsp;is&nbsp;locked&nbsp;from&nbsp;further&nbsp;message&nbsp;reception.&nbsp;<br />Workaround:&nbsp;1.&nbsp;Recovering&nbsp;from&nbsp;this&nbsp;situation&nbsp;is&nbsp;only&nbsp;possible&nbsp;with&nbsp;a&nbsp;soft&nbsp;reset&nbsp;to&nbsp;the&nbsp;CAN&nbsp;controller.&nbsp;<br />2.&nbsp;If&nbsp;software&nbsp;cannot&nbsp;read&nbsp;all&nbsp;messages&nbsp;in&nbsp;time&nbsp;before&nbsp;a&nbsp;third&nbsp;message&nbsp;comes&nbsp;in,&nbsp;it&nbsp;is&nbsp;recommend<br />to&nbsp;change&nbsp;the&nbsp;acceptance&nbsp;filtering&nbsp;by&nbsp;adding&nbsp;further&nbsp;acceptance&nbsp;filter&nbsp;group(s)&nbsp;for&nbsp;messages,&nbsp;<br />which&nbsp;are&nbsp;normally&nbsp;rejected.&nbsp;With&nbsp;this&nbsp;approach,&nbsp;the&nbsp;third&nbsp;incoming&nbsp;message&nbsp;is&nbsp;accepted&nbsp;and&nbsp;the&nbsp;<br />Data&nbsp;Overrun&nbsp;condition&nbsp;is&nbsp;avoided.&nbsp;These&nbsp;additional&nbsp;messages&nbsp;are&nbsp;received&nbsp;with&nbsp;the&nbsp;correspond-<br />ing&nbsp;group&nbsp;index&nbsp;number&nbsp;can&nbsp;be&nbsp;easily&nbsp;identified&nbsp;and&nbsp;rejected&nbsp;by&nbsp;software.<br /><br /><br />这样的文档,对开发人员简直是智商的调戏。这个CAN,做的让人吐血。<br /><br />接着再说LPC2000的VIC,一会儿用ARM的PL192,一会用ARM的PL197;再说EMC,一会自己搞一套,一会又用ARM的IP,NXP你能稳定一点不,不要来回折腾你的用户行不行。<br /><br /><br />回想NXP的LPC2000系列,从LPC2104开始就是一堆BUG,接着LPC22XX没有什么改进,一直做到LPC23XX时BUG才明显开始减少。达到ATMEL的SAM7的水平。<br /><br />LPC2000啊,用得让人头疼!!
zlg_ltt 发表于 2008-12-22 18:41 | 显示全部楼层

那些英文描述很难理解吗?

这些来自不同CPU的描述,都说清楚了ID&nbsp;Ready&nbsp;Interrupt的两个产生条件。任何中断标志产生都需要先使能该中断类型、并且产生触发该中断的事件。<br />ID&nbsp;Ready&nbsp;Interrupt也是如此。从这一点出发去阅读,想必能分清楚细节和主干,并不难读懂。<br /><br />您所引用的不同CPU的ID&nbsp;Ready&nbsp;Interrupt的描述文字,在具体细节补充上确实有所不同,但并没有什么根本抵触,也不至于会是调戏开发人员的智商吧。<br /><br />如果仅是文档看不明白,您也可以考虑打电话给我司的CAN技术支持。<br /><br />不过,我们会在把NXP&nbsp;芯片用户手册变成教程的过程里,尽最大努力修改文档至简明易懂,尽量降低读者的阅读难度,所以读者可考虑优先阅读芯片相应的基础教程。谢谢提醒!
 楼主| andrewpei 发表于 2008-12-22 20:16 | 显示全部楼层

楼上,上述几个文档仅仅关天IDI位的描述就不一致!

<br />LPC2378就与其它两个非常不一致。<br /><br />先说LPC2378的IDI:<br />this&nbsp;bit&nbsp;is&nbsp;set&nbsp;if&nbsp;the&nbsp;IDIE&nbsp;bit&nbsp;in&nbsp;CANxIER&nbsp;is&nbsp;1,&nbsp;&nbsp;and&nbsp;a&nbsp;CAN&nbsp;Identifier&nbsp;has&nbsp;been&nbsp;<U><i><b>received&nbsp;</b></i></U>(a&nbsp;&nbsp;message&nbsp;was&nbsp;successfully<b><i><U>&nbsp;transmitted&nbsp;</U></i></b>or&nbsp;<U><i><b>&nbsp;aborted</b></i></U>).&nbsp;This&nbsp;bit&nbsp;is&nbsp;set&nbsp;whenever&nbsp;a&nbsp;message&nbsp;was&nbsp;&nbsp;successfully&nbsp;transmitted&nbsp;or&nbsp;aborted&nbsp;and&nbsp;the&nbsp;IDIE&nbsp;bit&nbsp;is&nbsp;set&nbsp;in&nbsp;the&nbsp;IER&nbsp;reg.<br />根据上面的文字,你告诉我IDI究竟是<b><i><U>接收</U></i></b>相关的中断标志位还是<U><i><b>发送</b></i></U>相关的标志位。我看得一头雾水。好了,我又看LPC2292的,原来是与接收相关,我又看LPC2917,原来还得是在验收滤波机制旁路的情况下,接收到一个完整的消息ID才会有IDI置位。那我又有疑问了:到底LPC2292和LPC2917上谁说的更准确,究竟验收滤波器的旁路与否对IDI置位有没有影响。你不要告诉我这三款芯片在这里关于IDI的设计各不相同。我不接收这样的解释,如果是真的这样,NXP脑子进水。<br />LPC2378对于Data&nbsp;Overrun这个BUG的<U><i><b>解决办法2</b></i></U>在逻辑上根本无法理解。如果楼上能理解,我诚心诚意地洗耳恭听。<br />&nbsp;<br />再放宽一点说:<br />1、为什么NXP与ATMEL和ST不一样,要选ARM7TDMI-S内核设计LPC2000。原因我想在于这个内核可综合,可以采用更好的工艺达到更高的主频。好了,问题来了,后来NXP发布的一系列的BUG手册都提到了内核的BUG,这下NXP没有办法了,它没有办法消除,因为这是ARM才有的权限,NXP没有权限。另外,ARM7TDMI-S内核用J-link仿真器不能全速仿真,用户又是一声叹息。<br />2、上面这条不算什么,用户忍忍,可以接受了。但是NXP在LPC2378的外扩总线中突然改用ARM的知识IP就有点不厚道。那原来LPC2200中的驱分理处不是得推倒重来?<br />3、再来一条:LPC21XX与LPC22XX中的VIC用的是ARM的PL192知识IP,只有16个优先级。后来发现不够用了,改用PL197了。好了,这下用户的老程序又得改。<br />4、其它的,LPC23XX之前,IO口是没有内置上拉电阻的,后来一看不行,又给加上了。是,是好事,可是你LPC2XXX出生之前,ATMEL早就在SAM7全系列实现这个了,连51单片机都有的东西,NXP竟然在LPC2XXX的早、中期视若不见。<br />&nbsp;<br />审视一下LPC2XXX的发展情况,看看这个系列的芯片所发布的Errara&nbsp;Datasheet,才发现,LPC23XX后才算是一个比较成熟的东西,即使如此,文档仍然具有NXP(或Philips半导体)的光荣传统----业内大厂最差。看过TI、ATMEL、MAXIM、ANALOG、ST的文档,从来没有看过比NXP差的,粘贴复制的迹象非常明显,行文晦涩。<br />&nbsp;<br />总的来说,对比其它大厂,用NXP的产品搞开发,相对更艰苦一些,有的时候,会搞得人很上火。今天发文的时候,如果它的产品经理在面前,说不定我会把芯片抠下来扔到他脸上去。<br />&nbsp;<br />NXP还有一个短板,比较大的短板:软件支持差。看看STM32和流明,人家都已经提供成套的固件库了,NXP现在还停留在提供支离破碎、离快速实用差一大截子的Application&nbsp;Note。NXP早已不复51时代之勇。<br />&nbsp;<br />不谈那么多了,一句话,浮躁之风,MCU这个领域内,现在的NXP真的难有人出其左右。
sheepbaa 发表于 2008-12-23 09:03 | 显示全部楼层

对于NXP的东西只能说能用,还说不上好用

对于NXP的东西只能说能用,还说不上好用.<br />那些文档&nbsp;还好周公翻译过,否则真是...<br />如果看不懂就打电话给周立功,我觉得也不是解决好办法,把文档些清楚点为好
wswh2o 发表于 2008-12-23 15:23 | 显示全部楼层

不知道为啥atmel的

arm比较少用
wlq_9 发表于 2008-12-23 15:40 | 显示全部楼层

atmel

用的也不少,三星的出货也很大。<br />不一定常在论坛问问题的ARM就用的得,只能说用这种ARM的小公司相对多一些。大公司的工程师一般都是闷声发财,大批量出货的公司开发有问题了也不会跑到论坛里面来问的。<br />
wswh2o 发表于 2008-12-25 18:38 | 显示全部楼层

nxp不太不靠谱

不过没办法,上了贼船了
zlg315 发表于 2008-12-26 03:05 | 显示全部楼层

我用了三年时间,写作了《ARM嵌入式系统基础教程》(第二

&nbsp;&nbsp;&nbsp;&nbsp;主要的问题已经全部讲清楚了,网友在上面提到的问题,我们在配套的开发板中也一并描述清楚了,这是其他任何半导体公司都做不到的本地化。<br />&nbsp;&nbsp;&nbsp;&nbsp;最近我一直在为一个99元的EasyARM2103写作两本配套的图书,现在是3:10分钟才停止写作开始有空上网看这个贴子,可以说这套书比上面提到的第二版看起来还要好。我想大家不要灰心丧气!冬天即将过去,春天还会远吗?希望大家对我们多一点信心,对我们对一点支持和宽容,我们一定会做得更好,更大地回报大家的帮助。<br />&nbsp;&nbsp;&nbsp;&nbsp;尽管遇到了很多问题,但我们从来没有放弃过,因为有你们的支持!上面这位网友提到的问题,其实也是对我们的支持,向我们反映问题以利于我们做得更好!<br />&nbsp;&nbsp;&nbsp;&nbsp;谢谢!
zyok 发表于 2008-12-26 09:30 | 显示全部楼层

Cortex-M3不是很强吗?

LPC1xxx和LM3不是LPC21xx更有优势吗?<br />周工怎么还花大把精力在arm7上?
xusn 发表于 2008-12-26 12:13 | 显示全部楼层

出货量大呗

  
zlg315 发表于 2008-12-26 15:15 | 显示全部楼层

写ARM7的图书主要是方便教学与推广,ARM7还是占有主要市场。

&nbsp;&nbsp;&nbsp;&nbsp;初学者的学习不一定要选用新核,8051不是一样用于教学和产品开发吗?ARM7的方便性在教学和自学还是有很大的优势所在。如作为开发人员调用API函数库没有问题,如果初学者一开始就从调用API函数库入门学习,将来肯定“武功”全废,特别是操作系统的学习使用ARM7更加方便。与此同时各位坚信ARM7所有型号将会全部淘汰吗?不可能。如果LPC2103有一天卖10元的话,我相信还是会有很多用户的。<br />&nbsp;&nbsp;&nbsp;&nbsp;当然,我们也会推出很多好的Cortex-M3开发平台和配套图书的,希望大家多一点耐心!写好书需要时间,我们希望以后提供少产高质量的图书为初学者服务。
yongfei 发表于 2009-4-3 10:46 | 显示全部楼层

唉,难怪NXP要倒闭呀,

最近在用一款新单片机,发现老外的IC设计人员脑子也是会进水的,设计与实际应用脱节。这款单片机的UART的发送空闲中断设计的很难用,当发送缓冲区中的数据装入发送器后,发送缓冲区就空闲了,此时就立刻产生发送空闲中断,而TX管脚上的数据还正在发送,也就是说你无法知道TX管脚上的数据什么时间真正发送完,除非再额外使用定时器或软件延时,对于232倒无所谓,但对485就残了,发送和接收转换很难处理,难道这些老外就从不用485?
roger_lj 发表于 2009-4-16 09:05 | 显示全部楼层

把芯片具体型号报出来啊

把芯片型号说一下,&nbsp;这样才好帮你一起解决问题啊.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

51

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部