一种NAND FLASH自启动的新方法
发布时间:2008/5/27 0:00:00 访问次数:510
    
     东南大学 asic工程中心 蔡 浩
    
    1 引 言
    
    随着消费类电子产品包括pda,mp3、智能手机等手持设备的市场需求逐步扩大,产品间的竞争也愈发激烈,降低产品的设计成本,提升产品的市场竞争力成为嵌入式系统开发者所面临的重大挑战。nand flash和norflash作为两种主要的非易失性存储器,被应用于各种嵌入式系统。其中nand flash主要优点在于存储密度高、容量大,有更占优势的存储性价比。但是nandflash由于其独特的页式读写方式,并不适合程序的直接执行。因此,从nand flash启动需要片上存储器作为代码执行的中转区。本文所讨论的一种系统启动方式,是在缺少片上存储器支持的情况下,实现系统直接从nand flash启动。论文中充分考虑了如何实现软、硬件之间的协同工作,以完成soc系统的设计。
    
    2 nand flash控制器的结构
    
    本文所讨论的nand flash控制器是针对一款基于arm7tdmi的soc芯片,该控制器在芯片中的位置如图1所示,作为amba总线上的一个从设备集成于ahb上。主要模块包括总线接口模块、fifo缓冲模块、ecc编码模块以及逻辑控制模块。
    
    
    
    总线接口模块主要的功能是转换amba总线上的控制和数据信号:将总线上的数据送入fifo或将数据从fifo读出到总线上,将总线上的控制信号转换时序后送到控制模块。
    
    nand控制器包含一个宽度为32 b,深度为4的缓冲fifo,用于解决高速总线与低速设备之间数据传输速度的匹配问题。为提高总线的传输效率,以及控制器设计的便利性,nand flash在总线上的数据传输采用dma的方式来完成。譬如在读取flash一页数据时,数据持续写入控制器fifo,fifo满时发出dma传输的请求,同时暂停flash的数据读取,控制信号nre拉高,直至dma响应请求即fifo不满时,flash的数据传输重新开始。当选择应用的flash位宽为8,页大小为(512+16)b时,控制器需要发出(32+1)次4拍字宽度的dma传输请求来完成数据和校验信息的读取。
    
    控制模块的上作主要是将总线接口转换的控制信号,按照nand flash的接口协议.将片选、地址、命令、读写使能按照所配置的时序要求,发送到nand flash中,并且控制数据的传输个数,以及dma请求、数据传输完成中断、数据错误中断等系统信号。
    
    nand flash可靠性相对较差,存储器芯片中有坏块的存在,会导致存储数据出错。ecc校验模块针对nand flash的可靠性问题,提供了一种查错、纠错的机制。ecc校验码在数据读人时,由硬件计算完成后写入到flash的校验位中,当此页数据读出时,校验码再次生成与存储器校验位中的数据进行比较,若相同则没有损坏位,若不同,则给出出错中断,软件通过检查比较结果,判断出错位的位置进行纠错处理。纠错功能仅针对单bit位的出错,当一个以上位同时在一页中出现时,ecc校验不能给出出错位正确的位置。
    
    3 nand flash工作的软件流程
    
    按照上节对控制器结构以及传输机理的分析,nandflash的使用需要在flash控制器模块以及dma控制器模块的协同下完成,工作的软件流程如图2所示。
    软件驱动的主要工作是配置dma模块以及flash控制模块,当传输完成,检测到中断后,软件查询状态寄存器,其中的状态位来自flash。当一次操作完成后,控制器自动向flash发出查询状态的命令0x70,读出的状态字保存在控制器的状态寄存器中。
    
    4 nand flash系统启动的传统模式
    
    目前支持从nand flash启动的soc芯片中,一般都内嵌有片卜存储器。各个处理器厂商对这块片上存储器定义的容量大小有所不同,但是启动模式都是比较一致的。nand flash按页顺序读取的方式,意味着对当前的存储地址访问后就无法马上再次访问,需在当前页访问完成后,重新对此页访问时,才可对先前的地址单元再次访问,这就导致了一些程序语句无法执行,譬如跳转、循环等语句的使用。因此nand flash仅作为启动代码的存储区,而真正执行的存储器区域是内嵌的片上存储器或者片外的sdram。
    
  &n
    
     东南大学 asic工程中心 蔡 浩
    
    1 引 言
    
    随着消费类电子产品包括pda,mp3、智能手机等手持设备的市场需求逐步扩大,产品间的竞争也愈发激烈,降低产品的设计成本,提升产品的市场竞争力成为嵌入式系统开发者所面临的重大挑战。nand flash和norflash作为两种主要的非易失性存储器,被应用于各种嵌入式系统。其中nand flash主要优点在于存储密度高、容量大,有更占优势的存储性价比。但是nandflash由于其独特的页式读写方式,并不适合程序的直接执行。因此,从nand flash启动需要片上存储器作为代码执行的中转区。本文所讨论的一种系统启动方式,是在缺少片上存储器支持的情况下,实现系统直接从nand flash启动。论文中充分考虑了如何实现软、硬件之间的协同工作,以完成soc系统的设计。
    
    2 nand flash控制器的结构
    
    本文所讨论的nand flash控制器是针对一款基于arm7tdmi的soc芯片,该控制器在芯片中的位置如图1所示,作为amba总线上的一个从设备集成于ahb上。主要模块包括总线接口模块、fifo缓冲模块、ecc编码模块以及逻辑控制模块。
    
    
    
    总线接口模块主要的功能是转换amba总线上的控制和数据信号:将总线上的数据送入fifo或将数据从fifo读出到总线上,将总线上的控制信号转换时序后送到控制模块。
    
    nand控制器包含一个宽度为32 b,深度为4的缓冲fifo,用于解决高速总线与低速设备之间数据传输速度的匹配问题。为提高总线的传输效率,以及控制器设计的便利性,nand flash在总线上的数据传输采用dma的方式来完成。譬如在读取flash一页数据时,数据持续写入控制器fifo,fifo满时发出dma传输的请求,同时暂停flash的数据读取,控制信号nre拉高,直至dma响应请求即fifo不满时,flash的数据传输重新开始。当选择应用的flash位宽为8,页大小为(512+16)b时,控制器需要发出(32+1)次4拍字宽度的dma传输请求来完成数据和校验信息的读取。
    
    控制模块的上作主要是将总线接口转换的控制信号,按照nand flash的接口协议.将片选、地址、命令、读写使能按照所配置的时序要求,发送到nand flash中,并且控制数据的传输个数,以及dma请求、数据传输完成中断、数据错误中断等系统信号。
    
    nand flash可靠性相对较差,存储器芯片中有坏块的存在,会导致存储数据出错。ecc校验模块针对nand flash的可靠性问题,提供了一种查错、纠错的机制。ecc校验码在数据读人时,由硬件计算完成后写入到flash的校验位中,当此页数据读出时,校验码再次生成与存储器校验位中的数据进行比较,若相同则没有损坏位,若不同,则给出出错中断,软件通过检查比较结果,判断出错位的位置进行纠错处理。纠错功能仅针对单bit位的出错,当一个以上位同时在一页中出现时,ecc校验不能给出出错位正确的位置。
    
    3 nand flash工作的软件流程
    
    按照上节对控制器结构以及传输机理的分析,nandflash的使用需要在flash控制器模块以及dma控制器模块的协同下完成,工作的软件流程如图2所示。
    软件驱动的主要工作是配置dma模块以及flash控制模块,当传输完成,检测到中断后,软件查询状态寄存器,其中的状态位来自flash。当一次操作完成后,控制器自动向flash发出查询状态的命令0x70,读出的状态字保存在控制器的状态寄存器中。
    
    4 nand flash系统启动的传统模式
    
    目前支持从nand flash启动的soc芯片中,一般都内嵌有片卜存储器。各个处理器厂商对这块片上存储器定义的容量大小有所不同,但是启动模式都是比较一致的。nand flash按页顺序读取的方式,意味着对当前的存储地址访问后就无法马上再次访问,需在当前页访问完成后,重新对此页访问时,才可对先前的地址单元再次访问,这就导致了一些程序语句无法执行,譬如跳转、循环等语句的使用。因此nand flash仅作为启动代码的存储区,而真正执行的存储器区域是内嵌的片上存储器或者片外的sdram。
    
  &n