更新时间: 2023-01-13
3NANDFLASH工作的软件流程
按照上节对控制器结构以及传输机理的分析,NANDFLASH的使用需要在FLASH控制器模块以及DMA控制器模块的协同下完成,工作的软件流程。
软件驱动的主要工作是配置DMA模块以及FLASH控制模块,当传输完成,检测到中断后,软件查询状态寄存器,其中的状态位来自FLASH。当一次操作完成后,控制器自动向FLASH发出查询状态的命令070,读出的状态字保存在控制器的状态寄存器中。
4NANDFLASH系统启动的传统模式
目前支持从NANDFLASH启动的SoC芯片中,一般都内嵌有片卜存储器。各个处理器厂商对这块片上存储器定义的容量大小有所不同,但是启动模式都是比较一致的。NANDFLASH按页顺序读取的方式,意味着对当前的存储地址访问后就无法马上再次访问,需在当前页访问完成后,重新对此页访问时,才可对先前的地址单元再次访问,这就导致了一些程序语句无法执行,譬如跳转、循环等语句的使用。因此NANDFLASH仅作为启动代码的存储区,而真正执行的存储器区域是内嵌的片上存储器或者片外的SDRAM。
以上文中描述的控制器为例,按照这种启动模式,程序搬运以及执行的过程如下:
系统上电前,外部硬线NANDBOOT开关选择从NANDFLASH启动。芯片设计时,默认DMA占有系统总线,DMA按照配置寄存器的默认值工作,其源地址指向NANDFLASH,目标地址指向片上SRAM,NANDFLASH控制器在NANDBOOT选中的情况下,默认向NANDFLASH的首页发出读命令。即上电后,DMA控制器以及NANDFLASH控制器默认的把FLASH存储器中的**页搬到了片上SRAM中。一直到DMA的工作完成前,ARM核无法占用总线。此时零地址映射在片上SRAM,DMA完成搬运后,ARM开始执行程序。此段代码完成的工作包括对SDRAM控制器的初始化,从NANDFLASH搬运核心代码至SDRAM,配置地址重映射寄存器至零地址处,**将PC指向零地址的SDRAM。在SDRAM执行的代码开始真正启动系统。