在8051单片机应用系统中使用DiskOnChip
发布时间:2008/5/27 0:00:00 访问次数:556
摘??? 要:本文以8051单片机为例探讨了在8位单片机应用系统中,使用m-systems公司的diskonchip作为大容量非易失数据存储器的可行性,给出了在8051单片机应用系统中使用diskonchip的软、硬件实现方案。
关键词:单片机;嵌入式系统;diskonchip
前言
随着各种8051兼容单片机的功能和性能越来越强,其应用系统的智能化程度和复杂度也在不断提高。在某些场合下对数据非易失存储的容量要求已远远超过了64kb。为此,通常的解决方法是采用nor型flash存储器,并采用分段式存储器访问技术以扩展8051的寻址空间。这种方法增加了软硬件设计的复杂性且可靠性较低,成本也较高。而diskonchip(简称doc)是一种基于nand型flash存储器的大容量固态存储系列产品,在单一封装内集成了大容量nand flash memory和对flash进行操作的微控制器nfdc(nand flash disk controller),其存储容量从8mb直到1gb。各种容量均采用统一的dip32封装,并且管脚排列完全兼容,具有一致的外部硬件接口。如果能够将其直接应用于8051单片机系统,则不仅扩展了diskonchip的应用范围,而且对于这类系统来说将是一种非常理想的大容量、非易失数据存储解决方案。为此本文探讨了在8051单片机应用系统中使用diskonchip的可行性及软、硬件实现方案。
硬件连接
由于doc的外部硬件接口非常简单,以doc 2000为例,它类似于一个标准的sram,在系统中只占用8kb的地址空间,未超过8051单片机64kb的寻址范围。因此,8051单片机可以很方便地与各种容量的doc 2000直接连接,而无需扩展其寻址范围。
在实际系统中,所选用的8051单片机的型号和生产厂商不限,但必须具有外部数据总线、地址总线及读、写信号线,以便与doc 2000连接。图1是atmel公司的8051兼容单片机at89c55与一片doc 2000连接实例的示意图,其中doc 2000在at89c55的数据存储空间中占用8000h~9fffh的地址范围。
软件移植
这是本文讨论的重点。m-systems公司将doc内部flash存储介质以“分区”的形式加以组织。有两种类型的分区:二进制分区和文件分区。二进制分区又称为bdk(boot developers kit)分区,可用于存储嵌入式操作系统的二进制映像(image)和其他二进制数据,但不支持坏块管理和损耗平衡(wear-leveling)技术。应用程序不能以文件形式访问bdk分区中的数据,只能通过m-systems公司提供的bdk api读/写bdk分区。bdk api以c语言源代码形式提供,可由嵌入式系统的引导程序使用;文件分区又称为trueffs(true flash file system)分区,它使应用程序可以通过操作系统的文件系统象访问磁盘文件一样来读/写doc,并采用坏块管理、损耗平衡等手段,实现了更高的存储可靠性和更长的flash寿命。trueffs是纯软件技术,通过驱动程序实现。m-systems公司为windows、wince、linux、vxworks等常见操作系统都提供了trueffs驱动程序,并以c语言源代码形式提供了trueffs sdk,供开发者将trueffs移植到新的操作系统下或无操作系统的环境。
8051单片机对doc中数据的存储和访问类似地也有两种情形,一种是以二进制形式,另一种是以文件形式。m-systems公司提供的trueffs sdk实现了一个简化的文件系统fat-lite,可移植到无操作系统的环境。但8051单片机的程序存储器和数据存储器最大都只有64kb,而trueffs sdk比较复杂,不易移植到8051上。因此对于8051系统来说,比较适合直接以二进制形式来访问doc 2000。为了在8051单片机上编程实现对doc 2000的访问,必须了解doc 2000的软件接口的技术细节。如前文所述,doc 2000在系统中占用8kb的地址空间,微处理器通过这8kb的窗口访问doc内部的控制寄存器并进行数据的传输,但m-systems公司未公开寄存器的定义和操作流程的技术细节,所以只能从m-systems公司提供给应用开发者的bdk api源代码入手进行移植。由于bdk api的较新版本采用了比较复杂的软件架构,致使移植到8051难度较大,因此本文采用较早期的版本bdk 1.25,这个版本虽然只能支持128mb以下的doc 2000和doc millennium(8mb),但已可满足绝大多数情况下8051应用系统对非易失存储器的容量要求。
bdk 1.25向开发者提供了读/写bdk分区的一系列api函数,其源代码采用ansi c编写,并采用条件编译以适应各种硬件平台和操作系统,具有很好的可移植性。本文参考这些源代码自行设计了一个适用于8051单片机的api函数库,采用keil c51编写,提供了对doc 2000或doc millennium的基本存储单元(块、页)进行读、写、擦除操作的功能,实现了8051单片机以二进制形式读写doc 2000或doc millennium。
由于篇幅所限,本文不详述具体的移植过程,在此只说明移植时主要考虑的几个问题:
* bdk api的源代码缺省适用于x86处理器和dos环境。为此需修改有关的条件编译选项以使之适用于8051系统;
* 对源代码进行最大程度的简化和定制。为此修改了某些数据类型以减小ram占用量,简化了某些数据结构,重写了部
摘??? 要:本文以8051单片机为例探讨了在8位单片机应用系统中,使用m-systems公司的diskonchip作为大容量非易失数据存储器的可行性,给出了在8051单片机应用系统中使用diskonchip的软、硬件实现方案。
关键词:单片机;嵌入式系统;diskonchip
前言
随着各种8051兼容单片机的功能和性能越来越强,其应用系统的智能化程度和复杂度也在不断提高。在某些场合下对数据非易失存储的容量要求已远远超过了64kb。为此,通常的解决方法是采用nor型flash存储器,并采用分段式存储器访问技术以扩展8051的寻址空间。这种方法增加了软硬件设计的复杂性且可靠性较低,成本也较高。而diskonchip(简称doc)是一种基于nand型flash存储器的大容量固态存储系列产品,在单一封装内集成了大容量nand flash memory和对flash进行操作的微控制器nfdc(nand flash disk controller),其存储容量从8mb直到1gb。各种容量均采用统一的dip32封装,并且管脚排列完全兼容,具有一致的外部硬件接口。如果能够将其直接应用于8051单片机系统,则不仅扩展了diskonchip的应用范围,而且对于这类系统来说将是一种非常理想的大容量、非易失数据存储解决方案。为此本文探讨了在8051单片机应用系统中使用diskonchip的可行性及软、硬件实现方案。
硬件连接
由于doc的外部硬件接口非常简单,以doc 2000为例,它类似于一个标准的sram,在系统中只占用8kb的地址空间,未超过8051单片机64kb的寻址范围。因此,8051单片机可以很方便地与各种容量的doc 2000直接连接,而无需扩展其寻址范围。
在实际系统中,所选用的8051单片机的型号和生产厂商不限,但必须具有外部数据总线、地址总线及读、写信号线,以便与doc 2000连接。图1是atmel公司的8051兼容单片机at89c55与一片doc 2000连接实例的示意图,其中doc 2000在at89c55的数据存储空间中占用8000h~9fffh的地址范围。
软件移植
这是本文讨论的重点。m-systems公司将doc内部flash存储介质以“分区”的形式加以组织。有两种类型的分区:二进制分区和文件分区。二进制分区又称为bdk(boot developers kit)分区,可用于存储嵌入式操作系统的二进制映像(image)和其他二进制数据,但不支持坏块管理和损耗平衡(wear-leveling)技术。应用程序不能以文件形式访问bdk分区中的数据,只能通过m-systems公司提供的bdk api读/写bdk分区。bdk api以c语言源代码形式提供,可由嵌入式系统的引导程序使用;文件分区又称为trueffs(true flash file system)分区,它使应用程序可以通过操作系统的文件系统象访问磁盘文件一样来读/写doc,并采用坏块管理、损耗平衡等手段,实现了更高的存储可靠性和更长的flash寿命。trueffs是纯软件技术,通过驱动程序实现。m-systems公司为windows、wince、linux、vxworks等常见操作系统都提供了trueffs驱动程序,并以c语言源代码形式提供了trueffs sdk,供开发者将trueffs移植到新的操作系统下或无操作系统的环境。
8051单片机对doc中数据的存储和访问类似地也有两种情形,一种是以二进制形式,另一种是以文件形式。m-systems公司提供的trueffs sdk实现了一个简化的文件系统fat-lite,可移植到无操作系统的环境。但8051单片机的程序存储器和数据存储器最大都只有64kb,而trueffs sdk比较复杂,不易移植到8051上。因此对于8051系统来说,比较适合直接以二进制形式来访问doc 2000。为了在8051单片机上编程实现对doc 2000的访问,必须了解doc 2000的软件接口的技术细节。如前文所述,doc 2000在系统中占用8kb的地址空间,微处理器通过这8kb的窗口访问doc内部的控制寄存器并进行数据的传输,但m-systems公司未公开寄存器的定义和操作流程的技术细节,所以只能从m-systems公司提供给应用开发者的bdk api源代码入手进行移植。由于bdk api的较新版本采用了比较复杂的软件架构,致使移植到8051难度较大,因此本文采用较早期的版本bdk 1.25,这个版本虽然只能支持128mb以下的doc 2000和doc millennium(8mb),但已可满足绝大多数情况下8051应用系统对非易失存储器的容量要求。
bdk 1.25向开发者提供了读/写bdk分区的一系列api函数,其源代码采用ansi c编写,并采用条件编译以适应各种硬件平台和操作系统,具有很好的可移植性。本文参考这些源代码自行设计了一个适用于8051单片机的api函数库,采用keil c51编写,提供了对doc 2000或doc millennium的基本存储单元(块、页)进行读、写、擦除操作的功能,实现了8051单片机以二进制形式读写doc 2000或doc millennium。
由于篇幅所限,本文不详述具体的移植过程,在此只说明移植时主要考虑的几个问题:
* bdk api的源代码缺省适用于x86处理器和dos环境。为此需修改有关的条件编译选项以使之适用于8051系统;
* 对源代码进行最大程度的简化和定制。为此修改了某些数据类型以减小ram占用量,简化了某些数据结构,重写了部