关于NandFlash 启动问题

关于NandFlash 启动问题

最初学习嵌入式linux驱动时,按照韦东山老师的移植教程糊里糊涂的完成了2440的norflash和nandflash的启动,
但并不明白所以然,所以就花时间研究一下,解除心中的疑惑。并附上韦东山的讲解 https://blog.csdn.net/thisway_diy/article/details/69397840

S3C2440

如下图2440的内存映射所示

norflash启动
根据手册可知,当芯片配置为norflash启动时,芯片上电,芯片内部固化的代码bootrom便会从BANK0读取可执行文件到SDRAM中,从而运行norflash内部存储的代码。

nandflash启动
而当芯片配置为Nandflash启动时,nandflash控制器的auto boot功能将会把nandflash的前4k数据拷贝到Boot Internal sram 的区域,三星手册上称之为垫脚石,前4k数据便在垫脚石中运行,那其他代码该怎么办呢,所以这4K代码中必须包含把nandflash其他数据拷贝SDRAM的功能。

1.问题一:nandflash的型号很多,在代码启动前CPU是怎么做到时序匹配的?
          通过2440配置管脚,来实现配置,如下图所示。

2.问题二:那么为什么不直接把nandflash中的数据全部读到SDRAM中直接执行呢?
          个人猜测:由于读取这4K代码时,nandflash的ECC功能还未开启,并且nandflash控制器还未被完全初始化,为了安全起见先读取4K代码
                   执行,对nandflash控制器和SDRAM控制器进行初始化,之后才把其他代码拷贝到SDRAM中执行。

3.问题三:那为什么norflash 启动就不需要问题二中的操作呢?
          个人猜测:norflash 的接口其实就是并口,数据线,地址线,时序是所有型号兼容的,有相应要求的。那为什么不对SDRAM初始化就能在SDRAM中运行,这不是推翻了上述norflash启动的理论了吗?
                   因此我再次怀疑,这就有点像STM32的操作了,只读段在norflash,读写段在4K 的SRAM内部执行,代码中会对SDRAM进行初始化,并做其他操作。
                   这也就是为什么说arm9是哈弗架构和冯诺依曼架构之间的问题吧,此处纯粹瞎猜,有时间在研究一下。
posted @ 2021-02-24 13:16  ~平凡人~  阅读(276)  评论(0)    收藏  举报