当前位置:首页 > 单片机 > 电子电路开发学习
[导读]再次感谢沁恒官方寄送的这块CH32V103开发板,集成了仿真下载器,集成了USB转串口,还兼容了Arduino接口,使用起来很方便。FAT文件配置表经过多年发展(FAT、FAT12、FAT16、FAT32、exFAT),目前已经广泛应用在内存卡、U盘等小容量存储介质中。FAT~F...


再次感谢沁恒官方寄送的这块 CH32V103 开发板,集成了仿真下载器,集成了USB转串口,还兼容了Arduino接口,使用起来很方便。

FAT 文件配置表经过多年发展(FAT、FAT12、FAT16、FAT32、exFAT),目前已经广泛应用在 内存卡、U盘 等小容量存储介质中。

FAT~FAT16 由于最大容量限制等原因,目前已经逐步退出历史舞台,FAT32目前使用还比较广泛也是我正在使用的。

本文使用 FATFS,实现对文件目录的检索和长文件名的读取转换,最终将结果打印到串口调试助手。 
先看一下U盘里都存了什么(一不小心暴露了年龄):

通过FATFS,我们能轻而易举的读取到这些文件的 8.3 短文件名,8字节文件名(中文则为4字),3字节后缀。   

规规整整,但总觉得少了点什么,只有歌手名没有歌曲名?小写的后缀mp3变成大写的?然后~1又是什么?
想了解短文件名的可以搜一下论坛了解,这里就不重复,我们目的是长文件名,继续。
在 FATFS 配置中开启中文长文件名支持:#define _LFN_UNICODE    1,开启中文支持:#define _CODE_PAGE  936


成功了一半,由于长文件名是 Unicode 编码的,直接读出来,再通过串口打印显示,全是乱码??这里就涉及编码转换问题,串口助手一般都是显示GBK编码的字符,编码不同就导致乱码,需要用到 FATFS 里的编码转换函数进行转换,但由于 GBK 和 Unicode 转换是无规律的,只能纯粹的查表,老美给中国人设置的坑???为什么要为难中文和非英文??这个表还非常大,要占用 170K 以上的存储空间。。。

我这是一个 64K Flash 的单片机???
有难度才有动力啊,放入外置Flash?没有Flash,那只好放入内存卡了,刚好这些歌曲也是放在内存卡的,就建立一个目录,SYS,里面放入 Unicode 和 GBK 互转的对照表。
内存卡插入的时候,挂载文件系统,读取 Unicode 和 GBK 转换表。
        if(SD_Detect()) { if(sd_status == 0) { sd_status = 1; printf("Insert\r\n"); } } else { sd_status = 0; }
if(sd_status == 1) { path[0] = '0'; path[1] = ':'; path[2] = 0; res_sd = f_mount(
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭