我在实际使用中发现, 如果dsp访问SDRAM, ARM写NAND会造成写错误, arm报: can't erase the trunk , 然后被标识为坏块.
此问题100%出现, 导致NAND可用空间越来越小, 即使用 flase_eraseall 也无法修复, 只能通过 uboot的nand scrub命令擦除, 文件系统YAFFS2
看TI的文档, NAND与SDRAM都是EMIF接口
我的问题是: TI的NAND与SDRAM是否不能同时使用, 还是我们的硬件有问题, 抑或是我们的软件有问题
noaming:
你好,从硬件上来看OMAPL138的NAND和SDRAM是共用的EMIFA接口16位地址线,因此如果同时访问的话,会造成数据冲突,软件设计时候要注意避免同时访问。
liangzhu ma:
回复 noaming:
谢谢
请问如何从软件设计的时候避免
我们现在没有使用dsplink, 如果使用dsplink是不是就不需要考虑了, 是不是在dsplink里面已经有这种仲裁了?
另一个问题, 之前我们使用dsplink方案时, 由于arm/dsp同时访问ddr, 也会造成arm死机, 请问是为什么呢
Tony Tang:
这个问题应该是驱动有缺陷,芯片接口本身是支持的,同时访问的仲裁是由接口处理的。到达接口的命令是先到先处理。建议在NAND的驱动里加打印信息帮助定位。下面这个链接是处理另一款芯片类似问题补丁,可以参考其思路来定位你的问题:
http://lists.infradead.org/pipermail/linux-mtd/2012-April/040724.html
下面提到的ARM,DSP访问DDR出问题,可能是因为Cache的一致处理,或者DSP访问越界到ARM的程序空间造成的。
简而言之,如果芯片不支持,或者不能自己处理同时访问的竞争,那这芯片是个笑话。
noaming:
回复 liangzhu ma:
从物理的角度来讲,一个总线上同时出现两种数据,是不可能的了。所以芯片内部肯定有一个仲裁,谁先访问,谁后访问。而这个冲裁机制,是基于芯片硬件的。所以不是靠dsplink的。问题是,你的工程中,dsp和arm的访问ddr,与dspLink是什么关系。。。
liangzhu ma:
回复 noaming:
您好,
我们没有使用dsplink之类的东西, arm跑linux系统, dsp裸机
如果是硬件有仲裁的话, 按道理就不应该如此了啊
noaming:
回复 liangzhu ma:
在你的系统中,应该分配了linux的DDR空间和dsp的DDR空间。您访问的时候有没有越界访问呢?
liangzhu ma:
回复 noaming:
我们arm访问全部ddr, dsp访问全部sdram
TI中文支持网


