DSP

OMAPL138 ARM与DSP冲突

2019-07-13 09:45发布

一. 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集成到一个芯片上降低成本, 降低功耗, 降低空间 带来的是开发成本的增加, 上面这些都是我在开发中慢慢发现的, 耗费了非常多的时间. 陷阱应该还有我没发现的. 总之还是一分钱一分货啊, 下次做开发不能再用几合一的了