HC32F4A0挂载FatFs(版本ff14b)文件系统。使用SD卡和W25Q64的Flash,再将其虚拟成U盘,连上电脑直接查看文件操作。

一、进行操作前的准备。

  1. 确保使用官方例程能够判断SD是否有效的,即能够正常的被识别和读写
    官方例程如下:
    SD检测
    如果你好奇,为什么我知道sd需要用到例程。关于这个问题,请看下面。
    打开官方的硬件电路文件:
    外围设备
    在文档中搜索"TF CARD",这里这个代表SD卡。出现如下图:

搜索结果
图中说错了一个地方,“去找SPI的例程”,改为去找SDIOC的例程。
2. 确保使用官方例程能够正常的读写W25Q64.
官方例程如下:
W25Q64读写测试

  1. 确保使用官方例程能够实现连接usb可以看见电脑上有SD卡的U盘。
    将SD卡通过usb虚拟成串口,以U盘的形式访问

二、将SD卡,W25Q64、FatFs的相关文件导入工程。

2.1. 导入SD卡的相关文件并配置

1.1、打开上面说的sd卡的官方例程:
例程

确保,能够出现官方描述的现象:
现象

如果没有出现,可以尝试使用读卡器,在电脑上将sd卡格式为Fat32或Fat格式,再次尝试。如果还是不成功,直接换卡尝试。当然不排除开发板故障的问题,但一般发生概率小。
1.2、接下来进行把例程移植到你的工程中
在例程进行如下操作:
文件

把上图中所涉及到的除了main.c文件以外的所有文件添加到自己工程里面去。
1.3、接下来,添加头文件路径。例程里面涉及的头文件路径
头文件

1.4、当然因为这里使用到了sdioc,所以需要使能sdioc的功能。这里打开例程的配置文件
文件
使能
可以看到例程已经使能LL_SDIOC_ENABLE。那么你的工程也需要使能这个。
1.5、接下来根据例程导入相应的头文件到自己的工程中
导入头文件

1.6、接下来移植例程里面的main.c里面的代码到你的工程里面。
移植mian
移植完成后,编译运行。一般而言都没有问题,如果有问题。那么请检查,是否是配置文件缺少了某些使能,或是有些问题没有添加到工程里面,或是缺少头文件。

2.2. 导入W25Q64的相关文件并配置

如果你仔细看了sd相关文件的添加和导入,和相关的使能等操作。那么这个部分的添加也非常简单。
第一步:还是先说说该怎么找例程吧。
打开官方的硬件电路。
外设
例程
第二步:向自己的工程里面添加例程里面的文件
文件
main.c文件和Readme不需要。
第三步:根据例程向自己的工程添加缺少的头文件路径
头文件
第四步:根据例程的hc32的配置文件中的使能配置,去配置你自己工程里面的使能配置。
使能
第五步:导入相关根据例程,导入相关头文件到自己的工程中
导入头文件
第六步:移植例程里面main.c里面的相关代码到自己工程里面

导入main.c里面的代码
移植完成后,编译运行。一般而言都没有问题,如果有问题。那么请检查,是否是配置文件缺少了某些使能,或是有些问题没有添加到工程里面,或是缺少头文件。

2.3. 导入FatFs的相关文件并配置

声明:我这里使用的是FatFs的版本是版本
工程中使用到的文件如下:
fat.c
配置FatFs头文件路径如下:
头文件路径
第一步:配置ffconf.h文件

2.3.1如果你只使用SD卡的话配置如下:

  • FF_VOLUMES这个我配置为1,因为只用到了一个存储设备。SD卡。
    在这里插入图片描述

  • FF_MAX_SS这个对于SD卡这种设备,一般都是配置为512(一个扇区大小)。当然为了跟家准确,有所使用的SD的手册最好。
    配置

  • FF_CODE_PAGE配置为936。当然如果你的不需要支持中文,或者想减少内存的使用,可以配置437.

支持中文

  • FF_USE_LFN配置为1.
    配置
  • FF_FS_NORTC配置为1:关闭时间配置,不然又得要实现文件系统的里面的时间函数,麻烦。
    配置

2.3.2如果你只使用W25Q64的话配置如下:

FF_VOLUMES这个我配置为1,因为只用到了一个存储设备。W25Q64。
在这里插入图片描述

  • FF_MAX_SS这个对于W25Q64卡这种设备,是4096(代表扇区的最大值)。为什么是4096?请看下面的W25Q64的手册截图。
    配置
    4096来源

  • FF_CODE_PAGE配置为936。当然如果你的不需要支持中文,或者想减少内存的使用,可以配置437.

支持中文

  • FF_USE_LFN配置为1.
    配置
  • FF_FS_NORTC配置为1:关闭时间配置,不然又得要实现文件系统的里面的时间函数,麻烦。
    配置

2.3.3、最后配置diskio.c文件:这里将存储设备为SD卡和W25Q64的放在一起说。懒得写见谅。

第一步:导入头文件
头文件

第二步:定义宏
如下图把源代码中宏定义注释掉,因为用不到。我这里使用了两种设备,一个W25q64Q64,一个SD卡,所以就定义两个宏。当然,我的ffconf.h文件里面的FF_VOLUMES配置的是2.

你根据前面ffconf.h文件里面的FF_VOLUMES配置为1,所以这里就定义一个宏(命名随意)。或者说你打算使用几个存储设备,这里的宏和ffconf.h文件里面的FF_VOLUMES配置就对应的配置为几。
宏
可能你会问定义这个宏有什么用?
好问题。请看下图
0:
FatFs文件系统的打开文件使用的f_open()函数,函数里面的第二个参数就是文件的路径.图中**"0:"写了数字后冒号是必须要的**,也可以写为**“1:”**。那么代表什么意思呢?

根据我在diskio.c文件里面宏定义,0代表的是W25Q64,1代表SD卡。所以"0:123.456.txt"代表W25Q64里面的123456.txt文件。

第三步:配置disk_status函数

status
REadID

第四步:配置disk_initialize函数
init
第五步:配置disk_read函数
read

第六步:配置disk_write函数
write

第七步:配置disk_ioctl函数
w25q64:
w25q64
SD卡:
sd卡

有人会说,不是说sd卡不需要配置disk_ioctl函数吗?
确实,我记得也看到这样的一句话,但是忘记在哪看到的了。只记得说的是如果下面的两个配置为一样的值的话,就不需要配置disk_ioctl函数。但是,经过我测试不配置这个函数,我的程序不行。
在这里插入图片描述
关于是否当SD卡是否需要配置disk_ioctl,我觉得,既然不确定,就配上。

第八步:定义全局变量,挂载文件系统,创建一个文件同时写入数据
测试

第九步:将开发板连接电脑通过U盘的方式查看SD卡或W25Q64里面的文件

我这里的是把W25q64和W25q64通过HC32F4A0的usb连接电脑,虚拟成U盘来查看文件的。这样方便,且简单。

如果你也想把SD卡或W25Q64虚拟通过USB虚拟成U盘的话。但不知道该怎么办的话,别急有官方例程,如图下图。
SD卡U盘
上图中的例程是将SD卡虚拟成U盘在电脑中使用,如果你不是使用SD卡,而是使用W25Q64的话,只需要修改例程中的这个文件文件
把usb_dev_msc_msd.c文件里面的有关的sd卡的操作全部换成W25Q64相关的即可。

  • 下面是我的修改截图
  • 在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

第十步:查看结果
结果如下图:

print
结果

以上就是我的所有的配置和我所知道的一些细节,希望对看文章的各位有帮助。
如果上面类容有侵权上面的,请联系删除。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值