worldsing 发表于 2016-5-29 11:10:22

关于新版本的RL-FlashFS文件系统fileSystem移植问题

在Keil 5.0之后RL-Flashfs的改变不少
最近想在SPI Flash上跑新版本的filesystem
与之前的RL-Flashfs不是的是驱动接口也变了
RL-Flashfs 基本是只要提供初始化、读、写、擦出接口即可。
Keil 5.0之后为了Pcak 包方便配置做了修改
大概的看了层次如下:
fileststem- > flash api(初始化、读、写、擦出接口) -> cmsis driver -> device


其中flash api是需要针对片子移植的,其它分部都是标准Pack里选和配置
且没有专门的SPI Flash选项,在安装目录下找到了模版文件,
C:\Keil_v5\ARM\PACK\Keil\MDK-Middleware\7.1.0\FileSystem\Driver\Flash
Flash_Template.c
Flash_Template.h
目前正在移植到W25xxx
还没有成功
大家有空一起研究。

eric2013 发表于 2016-5-29 11:19:24

帮顶

worldsing 发表于 2016-5-29 12:36:56

需要针对芯片实现以下几个接口:
ARM_DRIVER_VERSION(*   GetVersion )(void)
   Pointer to ARM_Flash_GetVersion : Get driver version.

ARM_FLASH_CAPABILITIES(*   GetCapabilities )(void)
   Pointer to ARM_Flash_GetCapabilities : Get driver capabilities.

int32_t(*   Initialize )(ARM_Flash_SignalEvent_t cb_event)
   Pointer to ARM_Flash_Initialize : Initialize Flash Interface.

int32_t(*   Uninitialize )(void)
   Pointer to ARM_Flash_Uninitialize : De-initialize Flash Interface.

int32_t(*   PowerControl )(ARM_POWER_STATE state)
   Pointer to ARM_Flash_PowerControl : Control Flash Interface Power.

int32_t(*   ReadData )(uint32_t addr, void *data, uint32_t cnt)
   Pointer to ARM_Flash_ReadData : Read data from Flash.

int32_t(*   ProgramData )(uint32_t addr, const void *data, uint32_t cnt)
   Pointer to ARM_Flash_ProgramData : Program data to Flash.

int32_t(*   EraseSector )(uint32_t addr)
   Pointer to ARM_Flash_EraseSector : Erase Flash Sector.

int32_t(*   EraseChip )(void)
   Pointer to ARM_Flash_EraseChip : Erase complete Flash.

ARM_FLASH_STATUS(*   GetStatus )(void)
   Pointer to ARM_Flash_GetStatus : Get Flash status.

ARM_FLASH_INFO *(*   GetInfo )(void)
   Pointer to ARM_Flash_GetInfo : Get Flash information.



而且这几个接口依赖于cmsis driver包。

worldsing 发表于 2016-5-29 16:17:53

在Keil 5.20中官方给的模块文件最后一个有问题:
错误:

/**
\\fn          int32_t ARM_Flash_GetInfo (ARM_FLASH_INFO *info)
\\brief       Get Flash information.
\\paraminfoPointer to Flash information \\ref ARM_FLASH_INFO retrieved.
\\return      \\ref execution_status
*/
static int32_t GetInfo (ARM_FLASH_INFO *info) {

if (info == NULL) {
    return ARM_DRIVER_ERROR_PARAMETER;
}
info = &FlashInfo;
return ARM_DRIVER_OK;
}



正确的应该是:
/**
\\fn          int32_t ARM_Flash_GetInfo (ARM_FLASH_INFO *info)
\\brief       Get Flash information.
\\paraminfoPointer to Flash information \\ref ARM_FLASH_INFO retrieved.
\\return      \\ref execution_status
*/
static int32_t GetInfo (ARM_FLASH_INFO *info) {

if (info == NULL) {
    return ARM_DRIVER_ERROR_PARAMETER;
}
info = &FlashInfo;
return ARM_DRIVER_OK;
}

worldsing 发表于 2016-5-30 13:57:14



创建了文件,再删除,占用的空间不释放
之前使用的RL-FlashFs也是这样
站长没有测试过fdelete()
调用fdelete()后文件系统剩下的空间没有增加。
修改一个文件也是,比如原来文件是1KByte,
我改成1byte的内容,文件系统剩下的空间也没有增加。

很是奇怪。

worldsing 发表于 2016-5-30 15:55:02

http://www.keil.com/forum/20206/

应该是驱动层写的有问题

worldsing 发表于 2016-5-30 17:31:53

芯片换成w25Q128
支持64K 擦出
删除文件时会多删除其它文件

好郁闷啊

raulyourhero 发表于 2016-5-30 17:53:11

回 worldsing 的帖子

worldsing:芯片换成w25Q128
支持64K 擦出
删除文件时会多删除其它文件

好郁闷啊
....... (2016-05-30 17:31) images/back.gif

如果用KEIL4.74版本的flashfs 就不会出现这个问题了吧?

worldsing 发表于 2016-5-30 20:33:44

回 raulyourhero 的帖子

raulyourhero:如果用KEIL4.74版本的flashfs 就不会出现这个问题了吧? (2016-05-30 17:53) images/back.gif

明天安装一个4.7的看看

worldsing 发表于 2016-5-30 21:03:29

试验了几次,删除文件是读sector 然后擦出sector
基本能验证我说的
64K内存在两个文件删除其中一个
那就整个64K擦出另外一个文件也没有了
打断点测试的

worldsing 发表于 2016-5-30 21:06:45

我把移植完的代码传上

大家有空验证一下看看

但愿不是官方库的bug

PS:使用的是官方提供的模版文件改的,其中在3楼就发现了一个BUG

worldsing 发表于 2016-5-30 21:10:08


硬件:W25Q128
些代码只使用了4Mbyte

music1273 发表于 2018-2-28 15:26:46

谢谢

ruboss 发表于 2020-2-21 15:59:34

用模板改,让我有点望而却步,看见有N25Q032A的驱动,就稍微一改试了下手上的N25Q128A。驱动成功了但还没有实际用上,一看不支持文件夹,还和FAT不兼容,还是等有这方面需求的时候再试吧:)

eric2013 发表于 2020-2-21 16:03:15

ruboss 发表于 2020-2-21 15:59
用模板改,让我有点望而却步,看见有N25Q032A的驱动,就稍微一改试了下手上的N25Q128A。驱动成功了但还没有 ...

FlashFS用于nor型flash,属于嵌入式类文件系统,而用于其它类型设备是FAT类,也就说FlashFS支持两种类型文件系统。

之所以这么整,主要是因为NOR性的Flash容量比较小,用FAT太浪费。

jiulinzeng 发表于 2020-7-3 09:09:17

请问BUG后来解决了吗,是官方驱动的问题么

eric2013 发表于 2020-7-3 11:08:33

jiulinzeng 发表于 2020-7-3 09:09
请问BUG后来解决了吗,是官方驱动的问题么

不是,是修改了底层驱动的实现方式,进入MDK5后,全部开始采用CMSIS-Driver了

jiulinzeng 发表于 2020-7-3 14:30:07

eric2013 发表于 2020-7-3 11:08
不是,是修改了底层驱动的实现方式,进入MDK5后,全部开始采用CMSIS-Driver了

硬汉哥,有没有采用CMSIS-Driver,在W25Q128上面搞文件系统的例子,尝试了一下,没成功

eric2013 发表于 2020-7-3 17:13:17

jiulinzeng 发表于 2020-7-3 14:30
硬汉哥,有没有采用CMSIS-Driver,在W25Q128上面搞文件系统的例子,尝试了一下,没成功

本帖12楼,楼主发了他的测试代码,你看看是否正常。

jiulinzeng 发表于 2020-7-10 14:29:08

worldsing 发表于 2016-5-29 16:17
在Keil 5.20中官方给的模块文件最后一个有问题:
错误:


正确的代码和错误的代码怎么是一样的啊

jiulinzeng 发表于 2020-7-17 13:40:27

eric2013 发表于 2020-7-3 17:13
本帖12楼,楼主发了他的测试代码,你看看是否正常。

楼主的代码用不起来,一直想搞RL-TCPnet的FTP的,就卡在文件系统这儿了,搞了快一周了

eric2013 发表于 2020-7-17 14:39:35

jiulinzeng 发表于 2020-7-17 13:40
楼主的代码用不起来,一直想搞RL-TCPnet的FTP的,就卡在文件系统这儿了,搞了快一周了

还是你之前数的W25Q的SPI Flash?

jiulinzeng 发表于 2020-7-17 16:25:03

eric2013 发表于 2020-7-17 14:39
还是你之前数的W25Q的SPI Flash?

是的,官方没有提供W25Q的驱动,自己改的驱动,各种小问题,一会不能读,一会删除有问题。
页: [1]
查看完整版本: 关于新版本的RL-FlashFS文件系统fileSystem移植问题