更新时间: 2023-01-13
5NANDFLASH系统启动的新方法
一般情况下,片上存储器在作为启动代码转移阶石的同时,往往在启动后也有其特殊的作用。可以作为特殊的程序区,譬如在进行M**解码过程中,核心解码函数作为频繁调用的程序,可以安排在片上SRAM中,以提高读取速度,提升系统性能。在SoC芯片开发过程中,在整体架构以及模块功能的变化之后,这块内嵌的SRAM失去了原来的作用,而仅作为NANDFLASH启动时的代码跳板,对于整个芯片而言,付出的代价比较大。于是提出了在没有片上存储器的架构下,从NANDFLASH启动的一种新模式。
在上述一般模式启动过程中,片上SRAM所起到的作用,就是执行NANDFLASH中**页的代码,将真正的启动代码引入到SDRAM,**将PC指针指向SDRAM。在失去片上SRAM的支持后,可以在控制器的FIFO中去执行此段代码,这需要在硬件以及软件代码中作出适当的改变。
(1)首先需要改变的是地址映射的机制,系统上电后,ARM即从零地址开始执行指令,零地址映射到NANDFLASH的FIFO入口地址,地址的译码过程由AMBA总线模块完成。在外部硬线NANDBOOT拉高的条件下,AMBA从设备地址译码模块在启动过程中,将零地址的设备选择权给到缓冲FIFO。在**页的指令执行完毕后,PC指针也指向SDRAM。
(2)其次是NANDFLASH控制器在启动过程中,对数据的读取方式。鉴于NANDFLASH大批量数据读写的特性,往往采用DMA方式对数据进行操作。启动过程中,由ARMcore直接向FIFO读取数据,在FIFO读空的情况下,将从没备READY信号拉低,等待NAND中的数据读出。并且在此读取过程中,DMA的请求被屏蔽。
(3)NANDFLASH型号类型众多,从每页容量大小、数据宽度、地址级数以及各型号芯片不同的时序参数,决定了一个控制器接口的兼容性要求相当的高。为了兼容从不同的NANDFLASH启动,设置了4根硬线作为选择。NANDBOOT选择是否从NANDFLASH启动;PAGESIZE选择每页大小,支持512B/page,2kB/page;IOWIDE选择数据端口的宽度,支持8位、16位;AD-DRE**YCLE选择发送地址级数,支持3级、4级、5级地址。时序参数的配置值可以采用默认的宽松值,在读取首页信息之后,将配置值根据当前的时钟频率以及芯片类型,选择舍适的时序值以达到**的性能。
(4)存储器首页的代码是在缓冲FIFO中执行的,FIFO的入口地址是一个高24位的选通地址,因此当系统启动时,零地址开始增加,
对FIFO中渎出的指令而言,低8位地址的变化是无关的,FIFO始终被选通。指令的输出是默认的顺序输出。这就要求首页的代码中不可以出现循环、跳转等语句,并且要求在128条指令内完成需要的操作。
6启动代码和流程的分析
上述的汇编程序即是存放在NANDFLASH首页的启动代码,启动的流程如下:
(1)配置DMA控制器的4个寄存器,通道使能后,等待FLASH发出的搬运请求;
(2)配置NANDFLASH控制器的3个寄存器,选择适合的地址、时序参数与所用的FLASH芯片吻合;
(3)分别在r8~r11中放入程序需要的备用值;
(4)将需要在S
DRAM中运行的4条指令搬入SDRAM030000000处;
(5)执行Nop指令,Nop指令用于填充一页NANDFLASH中的剩余空间;
(6)执行在页末的指令,将PC指针指向SDRAM的030000000处;
(7)执行SDRAM中的指令,首先启动NANDFLASH的数据传输,将程序搬往SDRAM的030001000处。其次执行一个循环语句,等待**页的程序搬完,之后将PC指针指向030001000处,启动程序从030001000处正式开始执行。
7结语
本文提出了一种NANDFLASH自启动的新方案,通过对硬件电路以及软件代码作合适的调整,从芯片中去除了内部SRAM,降低了SoC芯片的开发成本。本方案已经通过一款命名为GarfieldV的SoC芯片的测试,达到了预期的效果。
上一篇:1769HSC
下一篇:1766L32BWA