最近生产几块刚回来的板子,都是之前调试过的,以为能很轻松的一路下来, 谁知道在忙活了好几天,在兼容性上栽了跟头。
刚开始使用flash完全烧入出现了错误,所有板子无法启动成功,bootloader无法被成功启动
奇怪的是,每个板子出现同样的问题:
进入系统后崩溃,打印:!!!abort_handler=......, 系统随后宕机
经过多次试验:
自己从头开始分别烧写 bootloader + kernel + ramdisk,在insmod 模块后,还是会出现data abort!!!
在axd中调试时,在单步执行到0x500000358时,出现错误,也许是使能了cache之类的,仿真器无法跟踪直接错误退出了
接下来在无意中发现,使用仿真器偶尔可以启动:
在重新烧写flash后,可以进行正常启动,而且没有任何错误,说明保存下来的image是可以正常使用的,但是为什么取下仿真器后就无法正常启动了呢?
考虑下才明白,这里仿真器需要对一些SDRAM控制器寄存器进行设置,在烧写flash时,程序会在SDRAM中执行。这时复位系统,就可以正常启动了。取下仿真器后,启动代码无法进行SDRAM控制器的设置,这样就无法访问SDRAM,自然不能启动了。
在intel IXP42X specification upd.pdf中查到一条:
部分A0步进处理器可能和一些SDRAM不兼容,但是没有说B0步进处理器的兼容性
在每次烧写flash之后,只要不断电,这时通过仿真器脚本配置的SDRAM控制器的内容是正确的,所以直接重启可以正常运行。
把HY57V561620BT-H 换成 MT48LC16M16A2就可以正常运行了(晕死,拆器件还弄掉了四个焊盘,飞线伺候),虽然现在的器件基本都是pin to pin兼容,但是最好还是参照厂商的文档,选用合适的器件。
阅读(2364) | 评论(0) | 转发(0) |