在单任务中实现同时烧写多片nandflash的方法

文档序号:6773473阅读:441来源:国知局
专利名称:在单任务中实现同时烧写多片nandflash的方法
技术领域
本发明涉及具有烧写NANDFLASH (NANDFLASH是一种存储介质)功能的终端产品, 尤其涉及一种在单任务中实现同时烧写多片NANDFLASH的方法。背景技术
在嵌入式终端生产中,一般都会在NANDFLASH贴片之前把软件烧写到NANDFLASH 上,传统的烧写方法是1、采用逐片烧写的方法,每次烧写一片。2、并发烧写,为每片分配一 个单独的烧写任务。
在嵌入式终端功能单一,软件规模比较小的时候,上面两种都是很好的实现方式, 因为这时候要烧写的程序镜像都会比较小。但是随着发展,嵌入式终端的功能越来越复杂, 软件规模也变得庞大。要烧写的程序镜像也就变得很大,那这时候上面这两种方法就不能 很好的满足要求了。程序镜像变大意味着要花费更多的时间才能完成一片的烧写,对于第 一种串行化的逐片烧写的方式就会严重影响生产效率。第二种方式在一定程度上实现了并 行化的烧写,当会随着要同时烧写的芯片数的增加,效率会急剧下降,也不能够到达生产效 率的最大化。
发明内容
本发明要解决的技术问题,在于提供一种在单任务中实现同时烧写多片 NANDFLASH的方法,克服了背景技术中,生产效率低的问题。
本发明是这样实现的一种在单任务中实现同时烧写多片NANDFLASH的方法,首 先从外部存储器读取要烧写的镜像文件,然后把镜像文件写入到母片中;在烧写的时候把 母片中的数据导入到所有烧写座上的NANDFLASH芯片;在此过程中采用在单线程任务中 同时控制多片NANDFLASH芯片的信号引脚的方式对多片NANDFLASH芯片执行烧写操作;在 错误处理的方式上烧写代码每次都对所有的NANDFLASH芯片发起编程操作即先设置每块 NANDFLASH芯片对应的地址,不跳过异常或不在位的NANDFLASH芯片,只要有一片编程成 功,上层烧写代码获取到的编程状态都是成功的;当上层烧写代码获取异常或不在位的芯 片的编程状态时,由烧写系统软件模拟返回成功。
本发明具有如下优点本发明采用在单任务中对多片NANDFLASH芯片同时进行并 发烧写的方法来代替传统的串行化的逐片烧写的方法和每片一个烧写任务的多任务方法, 且在遇到烧写错误时进行了特殊处理,当上层烧写代码获取异常或不在位的芯片的编程状 态时,由烧写系统软件模拟返回成功,这样使得烧写与生产效率大幅提高。

图1是本发明测试平台的硬件框图。
图2是本发明的NANDFLASH芯片视图。
图3是本发明数据编程与烧写的流程示意图。
具体实施方式
下面参照附图结合实施例对本发明作进一步的说明。
一种在单任务中实现同时烧写多片NANDFLASH的方法,其实现步骤步骤如下首 先从外部存储器读取要烧写的镜像文件,然后把镜像文件写入到母片中;在烧写的时候把 母片中的数据导入到所有烧写座上的NANDFLASH芯片;在此过程中采用在单线程任务中 同时控制多片NANDFLASH芯片的信号引脚的方式对多片芯片执行烧写操作;在错误处理 的方式上烧写代码每次都对所有的芯片发起编程操作即先设置每块NANDFLASH芯片对 应的地址,不跳过异常或不在位的NANDFLASH芯片,只要有一片编程成功,上层烧写代码 获取到的编程状态都是成功的;当上层烧写代码获取异常或不在位的芯片的编程状态时, 由烧写系统软件模拟返回成功,所述的烧写系统软件模拟返回成功的方式是在发现哪块 NANDFLASH芯片烧写异常、错误时断开相应SN74HC245的电源,同时判断该NANDFLASH芯片 RB脚状态的操作永远都返回READY状态,让读取此芯片I/O脚的操作也都返回成功状态。
本发明的烧写操作是通过在单任务中同时对所有芯片发起编程操作来实现伪并 发的编程操作。由于消除了不必要的大量的任务上下文切换操作,而且在单处理器上不可 能实现多任务的正在并发,所以单任务的伪并发烧写操作,效率大大高于多任务的伪并发 烧写操作。
见图1,是本发明测试平台的硬件框图,包括外部存储器、CUP、母片、IXD、多片的 SN74HC245芯片以及多片NANDFLASH芯片。用户从外部存储器读取要烧写的镜像文件,然后 把镜像文件写入到母片中,LCD负责显示烧写的情况。
这里要说明的是1、设置每块NANDFLASH芯片对应的地址通过以下代码实现由 于每一块NANDFLASH芯片的坏块布局是不一样的,所以需单独维护每一块芯片的编程地 址,在发送编程地址时,需要设置每块芯片对应的地址。
for(i = 0 ;i < CONFIG_EXT_NAND_NUM ;++i) {
col = 0 ;
page = nandset- > nand_offset[i]/nandset- > pagesize ;
//逐片发送行列地址
s3c_nand_addr (nandset, & nandset—> chip [i],col,page);
}
2、发起编程操作方式
每次都对所有的芯片发起编程操作,而不对异常/不在位的芯片做特殊处理,这 样就避免了由于引入大量的判断语句而导致执行效率降低。例如发送对所有芯片发送命 令
static inline
void s3c_nandset_cmd(struct s3c_nand_set氺nand_set, uint8_t cmd)
{
H逐片CLE使能
s3c_extnand_setcle( & nand_set_ > chip
);
s3c_extnand_setcle( & nand_set_ > chip[1]);
s3c extnand setcle(&hand set一>chip[2]);
s3c extnand setcle(&hand set一>chip[3]);
//投送命令数据
s3c handset write bur(hand set,&cmd,1)
//逐片CLE不使能
s3c extnand clrcle(&hand set一>chip
);
s3c extnand clrcle(&hand set一>chip[1]);
s3c extnand clrcle(&hand set一>chip[2]);
s3c extnand clrcle(&hand set一>chip[3]);
}
stariC inl ine
VOid s3c handset write bur(struct s3c hand set*hand set,uint8t,bur,
int leFl)
{
int i一0
for(;i<len;++i){
//逐片发送每字节数
s3c—hand—lOUt—byte(bur[i],&hand—set一>chip
);
s3c—hand—lOUt—byte(bur[i],&hand—set一>chip[1]);
s3c—hand—lOUt—byte(bur[i],&hand—set一>chip[2]);
s3c—hand—lOUt—byte(bur[i],&hand—set一>chip[3]);
}
}
3.编程错误,异常处理方式
在发现编程异常,错误时断开相应SN74HC245的电源,这样后继的编程信号不会再传递到此芯片。同时让判断此芯片朋脚状态的操作永远都返回READY状态,让读取此芯片i/o脚的操作也永远都返回0。(通过i/o脚的引脚0的逻辑电平来判断编程是否成功,低表示成功,高表示错误,这里也就是永远返回成功)。通过此机制,烧写代码无需关心那些芯片不在位,那些芯片烧写失败的问题。每次都对所有芯片都发起编程操作
//获取逐片的朋脚状态
ready
一s3c—extnand—ready(&hand—set一>chip
)(!hand—set一>hand valid
);
ready[1]一s3c—extnand—ready(&hand—set一>chip[1])(!hand—set一>hand valid[1]);
ready[2]一s3c—extnand—ready(&hand—set一>chip[2])(!hand—set一>hand valid[2]);
ready[3]一s3c—extnand—ready(&hand—set一>chip[3])(!hand—set一>hand valid[3]);
如果芯片不在位或异常,则对应的nrnd—valid值为0,正常为1。上面的操作可保 证对于异常,错误的芯片此表达式永远为真,也就是准备好。
//逐片读取IO脚电平
status
= s3c—nand—get—byte( & nand—set-> chip
) & (nand—set-> nand—valid
);
status[1] = s3c—nand—get—byte ( & nand—set-> chip[1]) & (nand—set-> nand—valid[1]);
status[2] = s3c—nand—get—byte ( & nand—set-> chip[2]) & (nand—set-> nand—valid[2]);
status[3] = s3c—nand—get—byte ( & nand—set-> chip[3]) & (nand—set-> nand—valid[3]);
上面的操作可保证对于异常,错误的芯片的引脚0的电平永远都为0。
值得一提的是NANDFLASH芯片视图如图2所示,其中芯片的数据编程与烧写的流 程示意图见图3,首先从母片中读取要烧写的数据到内存,依次有效芯片的CS信号,依次有 效芯片的CLE信号,依次给芯片发送80H命令,依次无效芯片的CLE信号,依次发送烧写地 址给芯片,其发送烧写地址的流程为有效芯片的ALE信号,发送要写入数据的地址,无效 ALE信号;再把从母片读取的数据依次发送给芯片;依次有效芯片的CLE信号,依次给芯片 发送IOH命令,依次无效芯片的CLE信号,依次获取芯片的RB脚状态,等待芯片编程完成; 依次有效芯片的CLE信号,依次发送70H命令,依次无效芯片的CLE信号,读取8BIT I/O总 线,根据结果判断数据是否写入成功。
总之,本发明在单任务中实现了同时烧写多片NANDFLASH芯片的功能,而传统的 方式单任务只能实现串行化的逐片烧写功能,只能通过增加任务数来实现同时烧写,但由 于任务上下文切换的大量开销也不能到达生产烧写效率的最大化。通过在单任务中实现同 时烧写,避免了大量任务上下文切换的开销,使得烧写效率进一步提高。
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与 修饰,皆应属本发明的涵盖范围。
权利要求
1.一种在单任务中实现同时烧写多片NANDFLASH的方法,其特征在于首先从外部存 储器读取要烧写的镜像文件,然后把镜像文件写入到母片中;在烧写的时候把母片中的数 据导入到所有烧写座上的NANDFLASH芯片;在此过程中采用在单线程任务中同时控制多 片NANDFLASH芯片的信号引脚的方式对多片NANDFLASH芯片执行烧写操作;在错误处理的 方式上烧写代码每次都对所有的NANDFLASH芯片发起编程操作即先设置每块NANDFLASH 芯片对应的地址,不跳过异常或不在位的NANDFLASH芯片,只要有一片编程成功,上层烧写 代码获取到的编程状态都是成功的;当上层烧写代码获取异常或不在位的芯片的编程状态 时,由烧写系统软件模拟返回成功。
2.根据权利要求1所述的在单任务中实现同时烧写多片NANDFLASH的方法,其特征在 于所述的烧写系统软件模拟返回成功的方式是在发现哪块NANDFLASH芯片烧写异常、错 误时断开相应SN74HC245的电源,同时判断该NANDFLASH芯片RB脚状态的操作永远都返回 READY状态,让读取此NANDFLASH芯片I/O脚的操作也都返回成功状态。
全文摘要
本发明提供一种在单任务中实现同时烧写多片NANDFLASH的方法,先从外部存储器读取数据然后把数据烧写到母片中,当进行实际烧片的时候,从母片中获取数据,并在单任务中把数据同时并发的写入所有烧写座上的NANDFLASH芯片。本发明采用在单任务中对多片NANDFLASH芯片同时进行并发烧写的方法来代替传统的串行化的逐片烧写的方法和每片一个烧写任务的多任务方法,使得烧写与生产效率大幅度提高。
文档编号G11C16/06GK102034543SQ201010567329
公开日2011年4月27日 申请日期2010年12月1日 优先权日2010年12月1日
发明者赵进云 申请人:福建鑫诺通讯技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1