为micropython启用文件系统(2)

为micropython启用文件系统(2)

进入micropython代码目录之前

首先,要准备一些代码SDIO驱动、SD卡读写代码、fatfs的移植。

  • 在lib/mm32f3270/mm32/drivers 目录下放置hal_sdio.h/.c文件,SDIO HAL驱动
  • 在ports/mm32/boards/MB_F3270 目录下放置sdcard_sdio.h/c文件,SD卡访问函数
  • 在ports/mm32/boards/MB_F3270 目录下创建fatfs_port.c,完成oofatfs的移植
  • 更新ports/mm32/boards/MB_F3270 目录下的pin_init.c和clock_init.c,配置SD卡需要使用的引脚复用功能和时钟。

特别注意,新增加的文件还好在makefile中登记一下才能编译到系统中,同时需要登记的还有micropython代码仓库中已经存在但未编译在最小系统中的一些文件,详见下节说明。

考虑到在micropython代码量比较大,调试比较麻烦,我是在keil中用example project单独把芯片驱动代码和SD卡读写读写操作的程序都调试好之后再迁移到micropython中。

fatfs_port.c中仅仅实现get_fattime()函数。这个函数是oofatfs创建或者修改文件时给文件添加时间戳的,读文件用不到。如果以后在micropython中加入硬件RTC的驱动程序,可以在此处读取当前的时间。大多数情况下,oofatfs对时间戳没要求,支持RTC还需要硬件电路的支持,配套一块纽扣电池,板子做得也不小巧,想想还是算了吧,写个假时间确保代码能编译通过就好。

#include "py/runtime.h"
#include "lib/oofatfs/ff.h"

DWORD get_fattime(void) 
{
    // TODO: Implement this function. For now, fake it.
    return ((2016 - 1980) << 25) | ((12) << 21) | ((4) << 16) | ((00) << 11) | ((18) << 5) | (23 / 2);
}

参考了一篇帖子

此时参考了一篇帖子,介绍如何在micropython中启用文件系统的。

找到代码注入种子(接入micropython的代码入口):
https://blog.csdn.net/weixin_43624808/article/details/101550511

按照帖子实际操作了一下,不能用。作者发帖用的micropython版本可能比较老,有很多代码在v1.6上已经不适用了,文字描述内容可能也只是给自己操作做一个记录,不大适合阅读求解。但我反复阅读下来之后也大概摸清了一个思路:

  • micropython中虽然已经包含fatfs的代码,但不是直接在disk_io.c中直接添加SD卡的读写函数,而是要先SD卡的读写函数注册到VFS(Virtual File System)中,要填充一些结构体,对应打开一些宏编译选项开关。
  • 必须要实现open()函数。micropython会用open()函数打开文件并读取import模块的代码。

帖子里没说明的是,还需要在main()函数执行一些初始化操作才能把文件系统用起来。我在比对着帖子看手头的v1.6代码,定位到nrf和stm32的main.c中对vfs的初始化调用。nrf的代码版本可能比较老,stm32持续保持更新,这里有两个点要注意:

  • fs_user_mount_t结构体的定义更新了,原来直接挂在vfs下的很多属性字段,例如type、readblocks[]、writeblocks[]等,现在都挂在blockdev字段上,然后才挂在vfs
  • 注意在main()中正确使用fs_user_mount_t和mp_vfs_mount_t。

参考帖子中对这块的代码描述可能不大准确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值