各位专家好,
我们现在有相当数量的单板(基于OMAP-L138)在客户那里运行一段时间,重启的时候发现内核CRC失败,不得不返厂进行UART下载重新烧写。我搜集了相当多的证据,如下,请结合证据进行分析。
1. 我们基于OMAP-L138的产品有很多型号,最小系统电路也不大相同,有一个产品型号相当稳定,没出现过内核丢失,这个产品的EMIFA总线有两个负载,一个是NAND,一个是并行口液晶屏,当时为了防止EMI干扰,在EMIFA总线和液晶屏之间有EMI滤波器。其他基于OMAP-L138的产品EMIFA总线都是直接和NAND对接。
2.经常出现内核丢失的产品,用示波器测试NAND信号波形,EMIFA_D0~D7都发现有半高电平(1V),从单板上电启动一直到内核搬移到DDR完毕,一旦内核搬移完毕,信号波形立马变正常;从来没有出现内核丢失的单板,测试NAND信号波形,发现上电启动到内核搬移整个过程,由于EMI滤波器存在,NAND信号波形虽有半高毛刺,但是幅度较低(20mv)。
3.我们使用的NAND型号为MT29C2G24MAA,是个NAND + mDDR组成的MCP。
4.我试图在UBL阶段对NAND时序进行修改,代码如下,通过测试观察,一运行我增加的代码,半高电平立马消失,说明在OMAP-L138内部ROM里面支持NAND启动的配置可能和我们选的NAND型号配合不好??半高电平是消失了,但是UBL也启动不了了,在nand_open时候出错。
5.我参照TI论坛介绍,在UBOOT里面增加一些校验相关的代码。至少对半高电平的问题没有任何影响。考虑到我们内核丢失的单板数量较大,已经排除是NAND位翻转固有特性造成的。
6. 发现内核丢失现象之后,我们马上在内核里面对UBL,UBOOT,kernel,rootfs 等都做了备份,通过这段时间观察来看,作用不大。仍然有很多单板出现这个问题。
附件为半高电平的波形和小系统原理图,请帮忙分析一下原因。
Denny%20Yang99373:
2里面的半高信号是不是就是正常读NAND读写的信号?因为还接了液晶屏,从而对NAND信号起到了一个衰减的作用?
beifeng zhu:
回复 Denny%20Yang99373:
你好,Denny Yang
是的,那个比较稳定的产品,在NAND信号线上(尤其是数据线上)有EMI滤波器,如果去掉EMI滤波器,尽管液晶屏不工作,但是系统还是能正常启动的,这个时候在测试NAND信号波形,也有半高电平。
可以这么说,那个比较稳定的产品也是歪打正着。还有一点比较奇怪,NAND信号里面只有EMIFA_D0~7信号质量很差,其他信号正常。
我也怀疑过上电和复位等关系,今天测试了一下,没发现问题。3.3V也没有泄露电流到1.8V。
Denny%20Yang99373:
回复 beifeng zhu:
能否通过跳线或者其他方式把液晶屏拆掉再测测?怀疑液晶屏对它有影响
beifeng zhu:
回复 Denny%20Yang99373:
你好,Denny yang
这个实验我们做过了,我们去掉滤波器,加了50pF电容,效果一样的。可以确定不是液晶屏干扰带来的。
今天我们又做了深入的分析,NAND启动时序寄存器设置,在RBL里面好像设置成了0x3ffffffc,这个都是按照最大的时序裕量来的。我们在uboot里面设置emif_regs->AB2CR = 0x08644304;AB2CR 这个寄存器是设置NAND读写时序的,为什么RBL设置的这么大的裕量?这个可能是导致半高电平的原因。我们设置新的寄存器值之后,半高电平立马没了。我们把这个寄存器在UBL里面设置一下,半高电平也会消失。我们觉得TI在这方面做的不够好,完全可以像飞思卡尔那样,在UBL里面设置配置字的概念来解决一些兼容的问题。
现在有点遗憾的就是,总会有那么一点点代码的读取还是用的RBL默认的寄存器设置的NAND时序,以后有改版的机会,还是加个SPI FLASH更靠谱。
不过我们目前的单板都是盲埋孔的,只有几个点能勉强刮开测试一下。所以我们得改一版,把NAND的时序测试点都拉出来。做个验证。我想这个问题应该差不多就解决了吧。
Denny%20Yang99373:
回复 beifeng zhu:
http://www.ti.com/lit/an/sprab41e/sprab41e.pdf
看看这个文档30页,有NAND的支持列表,你可以看看你的NAND的Device ID是否在支持列表里。
如果不在,再看看Table 13 Fourth ID 定义是否正确。
beifeng zhu:
回复 Denny%20Yang99373:
你好,Denny Yang
我从美光官网上下载了数据手册,如附件,我看了一下,device ID是不支持的,Fourth ID我没啥把握,你帮我确认一下,
这个和OMAP-L138使用什么版本的芯片有关系吗?
谢谢
beifeng zhu:
回复 Denny%20Yang99373:
补充一下,我用的NAND FLASH具体型号:MT29C2G24MAAAAHAMD-5IT(VFBGA130)
Denny%20Yang99373:
回复 beifeng zhu:
可能RBL没法判断出NAND的型号,因此把所有参数都设成了最大值。
所以需要你在UBL里面把NAND的相关时序再配一下
beifeng zhu:
回复 Denny%20Yang99373:
你好,我在uboot里面通过查看md 0x68000014寄存器内容,确实是0x3ffffffc,也就是把寄存器AEMIFA->A2CR寄存器设置成了最大的。幸好NAND的位宽默认是8bit的,不然启动都可能出问题。
那么,由于这个单板已经在大量使用,有些产品的布局空间只能允许使用MCP(NAND + Mddr合体),也就是目前的NAND没办法更换了,如果有改版的机会,我是否可以考虑在加一个spi flash,把UBL和UBOOT放在SPI FLASH里面,内核和rootfs放在NAND里面,从而彻底解决这个bug.
目前我已经在UBL里面重新设置了AEMIFA->A2CR = 0x08644304;半高电平就消失了。但是我还不确定我设置的这个值是否足够合适?目前的单板都是盲埋孔,NAND时序还测试不了。
谢谢!
Denny%20Yang99373:
回复 beifeng zhu:
使用SPI启动可以解决这个问题
138用NAND+MDDR合体的还是比较少,用分离的NAND芯片没有报过类似问题