共5条 1/1
1
跳转至
页
尝试使用TrueFFS[原创]
以下是我前一段时间尝试使用TrueFFS的记录. 说是尝试, 其实基本上是自己弄着玩的. 在项目正式开始之前找了块现成的板子, 试着用一用文件系统. Flash容量只有 512KB, 目的主要是熟悉一下这方面的东西, 希望也能对别人有点帮助. 要想了解得 更多, 还是得看seasoblue的大作:-) 一. TrueFFS试验说明: 调试工具为Tornado 2.0, 目标板的CPU为MPC860,用于创建 Flash Disk的Flash Memory芯片为一片ST M29W040B,起始地址0x02880000,容量为 4M-bits,数据总线宽度8-bits。 以下所称的文件sysTffs.c是在这个文件的基础上修改得来: [Tornado]\target\src\drv\tffs\sockets\ads860-sysTffs.c 以下所称的文件stmtd.c是在这个文件的基础上修改得来: [Tornado]\target\src\drv\tffs\amdmtd.c 共试验了两种方法,即使用VxWorks自带MTD(方法A),和使用自编MTD(方法B)。 TrueFFS driver由三个软件层次构成:Translation Layer、MTD Layer和Socket Layer。 VxWorks自带的MTD Layer Driver所支持的Flash Memory芯片中,与ST M29W040B最 相似的为AMD AM29F040,两者的管脚和编程方式完全兼容,只有Manufacturer ID 和Device ID不同。故可使用的方法有两种: 方法A: (先备份[Tornado]\target\lib\libPPC860gnuvx.a) 1. 从[Tornado]\target\lib\libPPC860gnuvx.a里提取amdmtd.o: arppc xv libPPC860gnuvx.a amdmtd.o 2. 从[Tornado]\target\lib\libPPC860gnuvx.a里删除amdmtd.o: arppc dv libPPC860gnuvx.a amdmtd.o 3. 使用UltraEdit软件编辑刚才提取出来的amdmtd.o: Find: 01 A4 Replace By: 20 E3 其中01是AMD AM29F040的Manufacturer ID;A4是AMD AM29F040的Device ID; 其中20是ST M29W040B的Manufacturer ID;E3是ST M29W040B的Device ID; 4. 将修改过的amdmtd.o加入到[Tornado]\target\lib\libPPC860gnuvx.a中: arppc ruv libPPC860gnuvx.a amdmtd.o 或将修改过的amdmtd.o以EXTRA_MODULE的方式与VxWorks Image链接起来。 5. 将sysTffs.c加入到Project中,Build and Test。 方法B: (先备份[Tornado]\target\src\drv\tffs\tffsConfig.c) 1. 在[Tornado]\target\src\drv\tffs\tffsConfig.c的数组mtdTable[]中加入一项: #ifdef INCLUDE_MTD_M29W040B stMTDIdentify, #endif /* INCLUDE_MTD_M29W040B */ 并增加函数声明: extern FLStatus stMTDIdentify (FLFlash vol); 2. 将sysTffs.c和stmtd.c加入到Project中,Build and Test。 二. BSP文件修改说明: 1. config.h 定义下列宏: #define INCLUDE_TFFS #define INCLUDE_DOSFS #define INCLUDE_SHOW_ROUTINES (optional) 2. ads860.h 定义下列宏: #define FLASH_ADRS_1 0x02880000 #define FLASH_SIZE_1 0x00080000 其中FLASH_ADRS_1、FLASH_SIZE_1所指定的地址段为Flash Disk。 3. sysLib.c 在结构数组sysPhysMemDesc[]中加入 FLASH_ADRS_1、FLASH_SIZE_1所指定的地址段。 设置MMU属性时,用于Flash Disk的地址段设为VM_STATE_WRITABLE和VM_STATE_CACHEABLE_NOT。 4. sysTffs.c #define INCLUDE_MTD_AMD /* 使用方法A时 */ #define INCLUDE_MTD_M29W040B /* 使用方法B时 */ #define INCLUDE_TL_FTL /* Translation Layer:FTL,因为使用的是NOR-Flash芯片 */ #define INCLUDE_SOCKET_SIMM /* Socket Layer */ #undef INCLUDE_TFFS_BOOT_IMAGE /* 整片Flash Memory都用于Flash Disk,故不需要 */ (undef其它关于Translation Layer、MTD Layer和Socket Layer的宏定义) #define FLASH_BASE_ADRS FLASH_ADRS_1 /* ads860.h */ #define FLASH_SIZE FLASH_SIZE_1 /* ads860.h */ 删除只和ads860板有关的代码。 删除由INCLUDE_SOCKET_PCMCIA引用的代码。因为目标板上没有PC Flash Cards,故不需要这部份Socket Layer代码。 将sysTffsFormat()函数中对params{}结构的初始化改为: tffsDevFormatParams params = { {0x0L, 99, 1, 0x10000L, NULL, {0,0,0,0}, NULL, 2, 0, NULL}, FTL_FORMAT_IF_NEEDED }; 这是因为整片Flash Memory都用于Flash Disk,故不需要设置供Boot Image使用的offset。 5. stmtd.c 这是在使用方法B时为ST M29W040B编写的MTD Layer Driver,其前身是amdmtd.c。由于AMD AM29F040和ST M29W040B完全兼容,故算法不需任何修改,改动主要是简化了Flash Memory芯片的识别流程(stMTDIdentify()函数),因为目标板上用作Flash Disk的只有这一种芯片,因此可删掉繁琐的用于芯片识别的代码。 三. 试验操作: 1. Format: -> sysTffsFormat 或: -> tffsDevFormat 0,0 2. Create Device and Mount dosFs: -> usrTffsConfig 0,0,"/RFA/" 或: 自行编程,调用函数tffsDevCreate()和dosFsDevInit()来实现。 (usrTffsConfig()函数的源代码在[Tornado]\target\src\config\usrTffs.c中) (RFA stands for "resident flash array") 3. 现在可以开始试验VxWorks I/O System Interface Library中各函数的功能。 (creat, open, close, remove, rename, read, write, chdir, getwd, lseek, etc.) 四. 问题与解决: 在Link由本BSP创建的Project时,会得到如下的错误信息:对函数mountFTL()和formatFTL()的无效引用。这两个函数所在的module是ftllite.o,但不知何故ftllite.o未包含在libPPC860gnuvx.a中。该module是Translation Layer Driver的一部份。由于使用的是NOR-Flash芯片,故需用到FTL库。怀疑是Tornado的bug。 解决方法是从[Tornado]\target\lib\libPPCEC603gnuvx.a里提取ftllite.o: arppc xv libPPCEC603gnuvx.a ftllite.o 再将ftllite.o加入到[Tornado]\target\lib\libPPC860gnuvx.a(先备份之)中: arppc ruv libPPC860gnuvx.a ftllite.o 或将ftllite.o以EXTRA_MODULE的方式与VxWorks Image链接起来。 进行上述改动之后,编译链接均可通过,TrueFFS系统工作也一切正常,但不能确定是否稳定和可靠。 五. 参考文献:TrueFFS for Tornado Programmer''''s Guide 1.0 (Edition 2) ryansheng@sina.com [align=right][color=#000066][此贴子已经被作者于2003-3-17 22:28:27编辑过][/color][/align]
关键词: 尝试 使用 TrueFFS 原创 Flash To
共5条 1/1
1
跳转至
页
回复
有奖活动 | |
---|---|
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
【有奖活动】智能可穿戴设备AR/VR如何引领科技新潮流! | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! |
打赏帖 | |
---|---|
如何实现基于NXPiMX.RT1021的BH1730采集被打赏5分 | |
玩转“DFRobot盖革计数器模块”准备工作认识模块知识分享被打赏30分 | |
【换取手持数字示波器】AHT10温度检测分享被打赏40分 | |
【换取手持数字示波器】ACM32F070开发板点亮LCD屏和触控按键,串口,ADC被打赏40分 | |
【换取手持数字示波器】ACM32F070LCD屏和触控按键功驱动蜂鸣器分享被打赏40分 | |
【换取手持数字示波器】国民技术PWM功能知识分享被打赏40分 | |
【换取手持数字示波器】放大器运放知识分享被打赏40分 | |
【分享评测,赢取加热台】+开关电源AC输入知识分享被打赏30分 | |
【换取手持数字示波器】N32G430点亮数码管与串口打印、ADC被打赏40分 | |
老胖子聊电路--分析一个反馈电路被打赏50分 |