RL-ARM版本:4.22
NAND Flash芯片:K9F1208U0C
处理器:STR912FAW4x
软件平台:裸奔
编译环境:MDK-ARM Professional Version: 4.23
目标:基本文件系统操作
RL-FlashFS是RL-ARM的一部分,它可以脱离RTX内核独立运行,所以为了降低调试难度,我采用了裸奔的方式。
1. 添加RL-FlashFS函数库
将\Keil\ARM\RV31\LIB下的FS_ARM_L.lib复制出来,并添加到MDK项目中。
2. 添加并修改File_Config.c
从\Keil\ARM\RL\FlashFS\Config目录复制File_Config.c,并修改。下图是对该文件的配置,只修改了与处理器和K9F1208相关的内容,其它的保持默认:

3. 添加Retarget.c并预定义STDIO宏
从\Keil\ARM\RL\FlashFS\Config目录复制Retarget.c。
为了使用printf等标准输入输出功能,需要预定义STDIO宏。
在MDK中右击Retarget.c,选择“Options for File 'Retarget.c' ...”,然后选择“C/C++”标签,在“Define”中填入STDIO,如下图:

当然,也可以直接在Retarget.c中修改:
/* The following macro definitions may be used to translate this file:
STDIO - use standard Input/Output device
(default is NOT used)
*/
#define STDIO
4. 编写sendchar和getkey函数
这两个函数在Retarget.c中调用。
int sendchar(int ch) {
while (UART_GetFlagStatus(UART0, UART_FLAG_TxFIFOFull) == SET);
UART_SendData(UART0, (u8)ch);
return ch;
}
int getkey(void) {
while (UART_GetFlagStatus(UART0, UART_FLAG_RxFIFOEmpty) == SET);
return (UART_ReceiveData(UART0));
}
5. 配置启动代码中的heap大小
RL-FlashFS使用了动态内存分配来缓存数据,手册给的堆空间最小值是0x1000,这里我用了大一点的值:
修改STR91x.s:
Heap_Size EQU 0x00002000
6. 编写NAND Flash芯片驱动
这一步是实现文件系统的关键,也是相对有难度的地方,因为这里需要搞清楚NAND Flash芯片的操作。Keil的例子可作为参考,位置在\Keil\ARM\RL\FlashFS\Drivers目录。
不过如果已经将NAND Flash芯片使用于其它文件系统,那问题就比较简单了,将原来的驱动贴过来稍微改一下就可以了。
此外,驱动函数中的NAND_DRV_CFG *cfg参数的作用是为了同一类型

本文介绍了如何在RL-ARM环境下,基于NAND Flash芯片K9F1208U0C和STR912FAW4x处理器实现RL-FlashFS文件系统。首先,添加RL-FlashFS库和File_Config.c,接着配置Retarget.c以支持标准输入输出。然后,调整启动代码中的堆大小,并编写NAND Flash驱动,参考Keil提供的驱动示例。最后,移植并修改例程NAND_File.c,使其适应当前硬件,通过UART0串口测试文件系统功能。
最低0.47元/天 解锁文章
2406

被折叠的 条评论
为什么被折叠?



