OMAPL138 ARM与DSP冲突

本文探讨了OMAPL138平台中NAND闪存与SDRAM之间的冲突问题,特别是在YAFFS2文件系统下,ARM访问NAND时可能引发的错误及解决方案;同时分析了DDR与DSP访问冲突导致的性能下降现象。

一. NAND与SDRAM冲突


从OMAPL138的架构上看 EMIF总线上连接着NAND和SDRAM

也就是说这2个设备是不能同时访问的


假设NAND上的文件系统是yaffs2, 128page/block, 2kB/page,

如果 DSP程序正在访问SDRAM时进行下面的操作


1. ARM写NAND, 此时会100%造成磁盘坏块, 这些个坏块用 flase_eraseall 命令无法擦除, 只能屏蔽, 用nand srub可以擦除, 证明这个是伪坏块

2. ARM程序读NAND文件, 此时有一定概率, 5%~30%会读错, 文件越大越容易错

3. 加载libc, 这个是最隐含的, 当arm程序第一次调用libc时, 相应的so才会被调入内存, 比如 log10函数, 若第一次调用它的时候, dsp在访问SDRAM就会错


解决方案:

在上面的三种情况下, ARM程序向DSP程序放指令, 让DSP暂停, 此时DSP程序进入while(1)中, 待收到ARM唤醒命令后再恢复访问SDRAM

让DSP暂停/恢复是由ARM/DSP程序自定义的方法实现, 没有标准



二. DDR与DSP冲突

当ARM程序使用DDR作为内存时, 若出现下列情况, ARM程序, 包括整个linux都会变得非常缓慢

1. DSP程序形如

    while (1 );

    改为在while里加sleep能解决

2. DSP程序访问外设, 如AD采样, 随着访问频率的增加, ARM程序会越来越慢

   改为在每个访问操作之间加延时能解决



结论

OMAPL138系列把ARM和DSP集成到一个芯片上降低成本, 降低功耗, 降低空间

带来的是开发成本的增加, 上面这些都是我在开发中慢慢发现的, 耗费了非常多的时间.

陷阱应该还有我没发现的.

总之还是一分钱一分货啊, 下次做开发不能再用几合一的了





评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值