基于NAND FLASH控制器的自启动方式实现SOC系统的设计

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。
以上文中描述的控制器为例,按照这种启动模式,程序搬运以及执行的过程如下:
系统上电前,外部硬线nand boot开关选择从nand flash启动。芯片设计时,默认dma占有系统总线,dma按照配置寄存器的默认值工作,其源地址指向nand flash,目标地址指向片上sram,nandflash控制器在nand boot选中的情况下,默认向nand flash的首页发出读命令。即上电后,dma控制器以及nand flash控制器默认的把flash存储器中的第一页搬到了片上sram中。一直到dma的工作完成前,arm核无法占用总线。此时零地址映射在片上sram,dma完成搬运后,arm开始执行程序。此段代码完成的工作包括对sdram控制器的初始化,从nand flash搬运核心代码至sdram,配置地址重映射寄存器至零地址处,最后将pc指向零地址的sdram。在sdram执行的代码开始真正启动系统。
5、nand flash系统启动的新方法
一般情况下,片上存储器在作为启动代码转移阶石的同时,往往在启动后也有其特殊的作用。可以作为特殊的程序区,譬如在进行mp3解码过程中,核心解码函数作为频繁调用的程序,可以安排在片上sram中,以提高读取速度,提升系统性能。在soc芯片开发过程中,在整体架构以及模块功能的变化之后,这块内嵌的sram失去了原来的作用,而仅作为nand flash启动时的代码跳板,对于整个芯片而言,付出的代价比较大。于是提出了在没有片上存储器的架构下,从nand flash启动的一种新模式。
在上述一般模式启动过程中,片上sram所起到的作用,就是执行nand flash中第一页的代码,将真正的启动代码引入到sdram,最后将pc指针指向sdram。在失去片上sram的支持后,可以在控制器的fifo中去执行此段代码,这需要在硬件以及软件代码中作出适当的改变。 (1) 首先需要改变的是地址映射的机制,系统上电后,arm即从零地址开始执行指令,零地址映射到nand flash的fifo入口地址,地址的译码过程由amba总线模块完成。在外部硬线nand boot拉高的条件下,amba从设备地址译码模块在启动过程中,将零地址的设备选择权给到缓冲fifo。在第一页的指令执行完毕后,pc指针也指向sdram。
(2) 其次是nand flash控制器在启动过程中,对数据的读取方式。鉴于nand flash大批量数据读写的特性,往往采用dma方式对数据进行操作。启动过程中,由arm core直接向fifo读取数据,在fifo读空的情况下,将从没备ready信号拉低,等待nand中的数据读出。并且在此读取过程中,dma的请求被屏蔽。
(3) nand flash型号类型众多,从每页容量大小、数据宽度、地址级数以及各型号芯片不同的时序参数,决定了一个控制器接口的兼容性要求相当的高。为了兼容从不同的nand flash启动,设置了4根硬线作为选择。nand boot选择是否从nand flash启动;pagesize选择每页大小,支持512 b/page,2 kb/page;iowide选择数据端口的宽度,支持8位、16位;ad-dresscycle选择发送地址级数,支持3级、4级、5级地址。时序参数的配置值可以采用默认的宽松值,在读取首页信息之后,将配置值根据当前的时钟频率以及芯片类型,选择舍适的时序值以达到最佳的性能。 (4) 存储器首页的代码是在缓冲fifo中执行的,fifo的入口地址是一个高24位的选通地址,因此当系统启动时,零地址开始增加,对fifo中渎出的指令而言,低8位地址的变化是无关的,fifo始终被选通。指令的输出是默认的顺序输出。这就要求首页的代码中不可以出现循环、跳转等语句,并且要求在128条指令内完成需要的操作。
6、启动代码和流程的分析
上述的汇编程序即是存放在nand flash首页的启动代码,启动的流程如下:
(1) 配置dma控制器的4个寄存器,通道使能后,等待flash发出的搬运请求;
(2) 配置nand flash控制器的3个寄存器,选择适合的地址、时序参数与所用的flash芯片吻合;
(3) 分别在r8~r11中放入程序需要的备用值;
(4) 将需要在sdram中运行的4条指令搬入sdram 0x30000000处;
(5) 执行nop指令,nop指令用于填充一页nandflash中的剩余空间;
(6) 执行在页末的指令,将pc指针指向sdram的0x30000000处;
(7) 执行sdram中的指令,首先启动nandflash的数据传输,将程序搬往sdram的0x30001000处。其次执行一个循环语句,等待第一页的程序搬完,之后将pc指针指向0x30001000处,启动程序从0x30001000处正式开始执行。
7、结 语
本文提出了一种nand flash自启动的新方案,通过对硬件电路以及软件代码作合适的调整,从芯片中去除了内部sram,降低了soc芯片的开发成本。本方案已经通过一款命名为garfieldv的soc芯片的测试,达到了预期的效果。


人工智能发展的机遇与挑战并存
世界首条高温超导磁悬浮列车在中国正式下线,超级高铁时代来临
低压配电房操作规程
亿纬锂能全极耳21700 40PL及高容量21700 58E全新发布
小米6什么时候上市?小米6最新消息:小米6发布会时间确定,4月18日!且配备防水防尘、无线充电等,取消了
基于NAND FLASH控制器的自启动方式实现SOC系统的设计
空气开关的功率表示 空气开关和漏电开关的区别
如何巧测磁电式微安表内阻
卫生间照明灯、换气扇自动控制器电路
光控闪光灯电路图
360儿童手表8X高清图赏
家装电路火线和零线一样粗吗
合宙Air001开发板——支持Arduino开发,国产MCU新热潮
LPWAN连接的单芯片解决方案
最保值的荣耀8降价了!华为荣耀8为狙击小米6自降身价,你还不买吗?
骨传导有哪些优缺点、骨传导耳机优缺点盘点+推荐
浪涌保护器的电气符号是什么_浪涌保护器的连接导线长度
中国速度厉害了:iOS10.3.1已越狱成功,还有谁?
光电隔离器的作用
TSN如何实现确定性的数据传输