共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网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 | |
【分享评测,赢取加热台】使用8051单片机驱动WS2812被打赏40分 |