当前位置: 永盛彩票网站  >> 工科专业  >> 机电自动化  >> 查看详情

机电工程----基于NorFlash 的TFFS 文件系统移植

来源: 长沙中视澜庭教育咨询有限公司  日期:2018-02-24 17:14:45  点击:102 
分享:

您若需要更全面指导,咨询请加QQ:157677920(张老师)2593328532(李老师),微信(电话同号):17051272921。

VxWorks 是风河于1983 年设计开发的一种实时操作系统(RTOS)。其凭借良好的可靠性和卓越的实时性被广泛应用于通信、军事、航空、航天等高精尖技术领域。目前,在嵌入式系统中很少使用硬盘作为存储设备, 一般会选择Flash 设备作为存储介质。而Flash 设备具有不同于硬盘设备的特性和操作方式,传统的文件系统不能满足这些要求,目前主要有两种解决方案: 在操作系统和Flash 存储之间增加FTL 翻译层, 从而屏蔽Flash 和普通硬盘的差异;设计新的文件系统, 这种新型的文件系统在各项操作上都已经考虑到了Flash 的各种特性,能够直接被系统引用。VxWorks 操作系统为Flash 设备提供的TFFS 就是一种使用FTL 层的Flash 文件系统,该中间层负责直接与底层Flash 设备的交互,并为上层dosFs 文件系统提供接口,以方便数据存取。在移植过程中, 出现了很多问题, 比如由于芯片型号不同,需要修改底层驱动代码;底层设备为NorFlash,不同于前面的NandFlash, 需要配置不同翻译层;处理器由16 位变为32 位, 需要根据地址线改变修改代码中地址等。本文介绍TFFS 文件系统的基本组成,重点分析该文件系统在移植过程中出现的主要问题。

  1 TFFS 文件系统组成及移植

  1.1 文件系统组成

  根据分层设计思想,TFFS 文件系统内部分为4层,结构如 所示,包括:

  (1)核心层。该层可将其他层连接起来协同工作,负责接收从上层发送的设备操作请求,调用其他三个子层次完成功能请求, 并对全局资源进行分配和释放。

  (2)翻译层。该层是整个TFFS 文件系统的核心组成部分,主要实现dosFs 和TFFS 之间的交互,支持文件系统针对Flash 设备实现的各种机制,如磨损均衡、错误恢复、垃圾回收、虚实地址转换等,对设备使用寿命起着关键作用。

  (3)Socket 层。该层提供底层块设备硬件的控制函数实现,包括设备探测、Socket 层注册等函数,主要提供与具体硬件板相关的驱动。本次移植使用的NorFlash 芯片直接焊接在主板上, 所以没有对该层进行修改。

  (4)MTD 层。该层提供了Flash 识别、擦除、读写、地址映射函数的代码实现,属于Flash 设备驱动层,不同种类的芯片由不同的MTD 层实现。该层是移植过程中开发人员需要编写和修改的主要部分。

  1.2 NorFlash 芯片连接

  NorFlash 芯片提供类似SRAM 的接口, 所以NorFlash 可以直接使用内存读取函数memcopy, 无需编写特殊的驱动。本次移植实验基于两片相同的norFlash 芯片S29GL01GP, 每片大小为128MB, 两片norFlash 芯片都采用16 位模式,通过位扩展的方式构成256MB 存储空间, 支持每次32 位数据的读写。NorFlash 芯片与CPU 地址线连接方式如 所示。

  CPU 的地址线address2 与NorFlash 芯片的地址线A0 相连,参考“S29GL01GP 芯片手册”,应将程序中的地址左移2 位, 才能正常地向Flash 芯片控制寄存器的地址写入数据。例如:

  *((volatile unsigned int *)(0x555<<2))=0xaaaaaaaa;

  *((volatile unsigned int *)(0x2aa<<2))=0x55555555;

  *((volatile unsigned int *)(0x555<<2))=0x80808080;

  *((volatile unsigned int *)(0x555<<2))=0xaaaaaaaa;

  *((volatile unsigned int *)(0x2aa<<2))=0x55555555;

  *((volatile unsigned int *)(0x555<<2))=0x10101010;

  执行完以上指令,NorFlash 芯片将会执行整片擦除的内嵌算法,即将整个空间的所有位都置为1。

  1.3 TFFS 文件系统移植过程

  针对项目中的TFFS 文件系统的移植需求, 首先需要得到一个可用的BSP 包,然后在此包的基础之上添加TFFS 文件系统实现所需的文件到项目中, 根据已有的模板编写和修改MTD 层驱动程序, 修改配置文件,逐步编译、调试,最终在目标板上的NorFlash 芯片S29GL01GP 上搭建起TFFS 文件系统。移植流程如 所示。

  (1)安装Tornado2.0 开发环境,获得可以创建工程、VxWorks 操作系统能够正常启动的BSP 包,然后,通过修改该BSP 包建立可引导型工程。

  (2)从Tornado2.2 开发环境中的targetsrctffs 取得TFFS 源码, 并将相应的.h 文件拷贝到tffs 文件夹下,将tffs 文件夹拷贝到Tornado2.0 开发环境建立的工程目录下。

  (3)将sysTffs.c 文件拷贝到工程目录下。Socket 层实现代码必须定义在sysTffs.c 文件中,sysTffs.c 文件中必须实现如下函数:sysTffsInit()初始化函数,该函数调用所有Socket 层注册函数,对Socket层分配一个驱动号;rfaRegister 注册函数, 该函数将Socket 层实现的驱动函数注册到TFFS 核心层, 以便之后操作Flash 设备时使用。

  修改sysTffs.c 中的定义:

  #define INCLUDE_TL_FTL

  系统通过包含NorFlash 设备的转换层(翻译层)选择NorFlash 设备的特定的格式化函数(formatFTL)和挂载函数(mountFTL)。

  (4)将tffsConfig.c 和S29GL01GP.c 两个文件添加到BSP 包中。

  MTD 层涉及的需要修改的文件主要是tffsConfig.c 和S29GL01GP.c, 其中tffsConfig.c 中包括两个重要数组mtdTable[和tlTable[。mtdTable[数组中包含了全部的Flash 设备识别函数, 系统将依据该数组对底层的Flash 设备进行识别;tlTable[数组将被TFFS翻译层使用, 根据Flash 设备种类不同调用不同的格式化和挂载函数。S29GL01GP.c 文件中实现了MTD 层所有的函数。在设备识别函数中对norFlash 的参数进行配置:vol.noOfChip = 1; 将两片Flash 当做逻辑上的一片;因为Flash 格式化比较慢,影响实验、调试过程的进行,所以使用Flash 的一部分空间搭建文件系统,vol.chipSize=0x800000,将芯片大小定义为8MB(使用norFlash 的前面的8MB 空间),vol.erasableBlockSize=0x40000, 将norFlash 的可擦除Unit 的大小定义为256KB。

  修改config.h 中的宏定义(使VxWorks 系统镜像包含dosFs 文件系统):

  #define INCLUDE_DOSFS

  在sysTffs.c 文件中设置Flash 设备偏移地址为0:

  #define NOR_FLASH_OFFSET 0

  用修改好的BSP 包建立“可引导类型”的工程即可。

  (5)修改完成后,编译、下载工程。将编译好的系统镜像通过烧写工具, 写入NorFlash, 通过串口调试助手可以看到系统启动后的画面,如 所示。

  执行sysTffsFormat()函数,usrTffsConfig(0,0,”/tffs0”)函数后,文件系统显示创建成功,如 所示。

  通过devs 命令,可以看到TFFS 挂载点“/tffs0”。通过tffsShow 命令,可以看到具体的TFFS 文件系统的参数包括设备大小为8MB、设备可擦除单元大小为256KB,socket 号、type 参数都为定义的内容,TFFS 文件系统创建成功。

  sysTffsFormat()函数定义在sysTffs.c 文件中,可以看到其部分参数:

  #ifdef HALF_FORMAT

  {0x00200000, 99, 1, 0x100001, NULL, {0,0,0,0},

  NULL, 2, 0, NULL},

  #else

  {0x00200000, 99, 1, 0x10000l, NULL, {0,0,0,0},

  NULL, 2, 0, NULL},

  #endif /* HALF_FORMAT */

  该函数的作用是在一个偏移的基础上格式化偏移地址后的Flash 空间,第一个参数0x00200000 表示前2MB 空间预留给系统镜像使用, 而使用后面的6MB 空间搭建文件系统。系统调用tffsDevFormat 函数专门对Flash 设备进行预格式化,即在Flash 设备上建立元数据, 这些数据将被TFFS 中间层使用, 对Flash 设备中的各个块进行定位和管理, 并完成文件系统层块到Flash 块的映射。usrTffsConfig(0,0,”/tffs0”)函数的作用是在Flash 设备上创建dosFs 文件系统。

  2 测试TFFS 文件系统

  TFFS 文件系统创建完成后, 在S29GL01GP.c 文件中添加文件系统测试代码,测试文件系统功能是否正常。测试文件系统需要调用I/O 系统函数(open()、create()、read()、write()、close()等)、文件系统函数(rename()、mkdir()、rmdir()等)。系统启动后,首先调用tffsDrv()函数进行初始化, 接着通过usrTffsConfig(0,0,”/tffs0”)挂载文件系统, 输入devs 命令查看系统中的当前设备,检查是否挂载成功,最后运行测试函数testall(),进行文件系统级别的测试。测试的主要内容包括创建文件夹、删除文件夹、创建文件、删除文件、写文件、读文件等功能,如 所示。

  3 控制策略

  采用一种复合控制策略,即对电网电流和负载电流都进行检测,检测电网电流的作用是抑制无源部分与电网之间的串、并连谐振,并补偿电网谐波电压产生的谐波电流, 且主要的谐波补偿作用不需承担,所以控制参数不需要太大的余量。

  4 实验结果

  由式(2)可以看出,K 值越大,系统的补偿效果越好,理想情况K 趋近于无穷大,ish就趋近于0,达到最佳的补偿效果。但在这种情况下APF 所需的容量达到最大,会增加成本;另外,复合式控制策略采用的是闭环系统,存在惯性和延时,如果K 值取得很大,系统会不稳定,从而影响补偿效果。

  为了验证以上理论的正确性和实效性,选取不同的K 值进行实验,根据国内某著名盾构制造商的电流数据,对其进行等比缩小,设置电流基波为100A,电网电感为3mH, 注入电容为19.6μF,5 次谐波的幅值为10A,7 次谐波的幅值为8A,11 次谐波的幅值为6A,13 次谐波的幅值为3.5A, 无源部分的参数如所示。

 

相关新闻

    暂无信息