mumuge 发表于 2022-5-28 10:36:11

[分享]基于野火h7pro核心板的nand+levelx+fatfs适配

本帖最后由 mumuge 于 2022-5-28 11:33 编辑

前段时间折腾好了在nand flash上使用fatfs的方案,磨损均衡层使用的是微软的levelx,用levelx对接fatfs实现在nand flash上挂在fat32文件系统。
我的硬件情况如下:
核心板:野火stm32h743xih6黑色核心板
NAND型号:W29N01HVSINA

建议在移植前先把nand全片擦除一遍。还有别忘了配置mpu加速nand的读写,配置方法参考硬汉哥前几期的mpu教程。
移植顺序:
首先要移植bsp_nand.c,bsp主要实现了data区和Spare区的读写,nand的id和状态读取, 全片和block擦除等操作,是为了对接上levelx。(看附件的bsp_nand.c和.h)

然后移植levelx,下载levelx源码,将lx_nand开头的c文件都加入到工程,再将附件的lx_stm32_nand_custom_driver.c和.h加入工程,这两个文件就是移植文件,将上面的bsp_nand与levelx对接,这一步完成后可以使用levelx的读写接口测试一下移植是否正常,看看写进去和读出来数据是否一致,这里就不提供测试代码了。参考微软官网的levelx接口操作教程。

下一步就是对接fatfs了,参考附件的user_diskio.c,fatfs需要特别设置的地方就是:
#define _MAX_SS    2048/* 512, 1024, 2048 or 4096 */
因为我的nand一个page是2048字节。这是与sd卡(512)和spi flash(4096)不同的地方。

这个时候调用f_mount会失败,因为nand里面还没有文件系统,但是调用f_mkfs会出现莫名其妙的错误,所以我建议将nand再对接到usb msc,插到pc上来格式化nand成fat32文件系统。
对接usb msc也很简单,cubemx上配置好后就只要完成usbd_storage_if.c就行了,附件有提供我写好的usbd_storage_if.c。

到这一步将开发板usb插上电脑,右键此电脑-->管理-->磁盘管理。会发现有一个未分区的盘,你需要将它格式化成fat32格式。具体操作应该不用我多说。
接下来就可以愉快地使用f_mount挂载了,然后在开发板和pc都可以操作nand里的文件了!!

eric2013 发表于 2022-5-28 17:26:09

谢谢楼主分享。

Ash1n 发表于 2022-9-28 16:21:51

你好,请问可以麻烦您分享一下工程文件吗,谢谢,我这个移植后debug就Default_handler,不知道哪出了问题

Ash1n 发表于 2022-9-28 17:16:19

Ash1n 发表于 2022-9-28 16:21
你好,请问可以麻烦您分享一下工程文件吗,谢谢,我这个移植后debug就Default_handler,不知道哪出了问题

我的邮箱是1033026448@qq.com,谢谢

Ant2S 发表于 2022-11-9 10:14:08

大佬,能否分享一下完整的例程学习一下,{:8:}

missfox 发表于 2023-4-9 13:38:22

今天正好有时间,尝试移植未成功。

Vxworks 发表于 2023-7-24 09:02:17

谢谢楼主分享,正在移植到FATFS上使用。

striveyc 发表于 2023-12-23 17:59:31

ECC在Spare区的读写没有看到

wanglehui_12 发表于 2024-1-4 11:35:38

楼主你好,这个工程你那边测试性能吗?读写速度大概能达到多少?
页: [1]
查看完整版本: [分享]基于野火h7pro核心板的nand+levelx+fatfs适配