12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- 源代码下载地址:
- http://elm-chan.org/fsw/ff/00index_e.html
- ========== R0.10b ================================
- 2014-10-13 升级到 R0.10b版本
- 1. disk_ioctl() 函数,修复获取有效容量的bug. (U盘和NAND)
- *(DWORD*)buff = NAND_FormatCapacity() / 512; /* 必须为可用的扇区个数,不是芯片的理论容量 */
- ...
- 2. f_mount() 形式参数变化
- 3. diskio.h 新增:
- /* Definitions of physical drive number for each media */
- #define FS_SD 0
- #define FS_NAND 1
- #define FS_USB 2
- /* 用于 R0.10b 新版本 */
- #define FS_SD_STR "0:"
- #define FS_NAND_STR "1:"
- #define FS_USB_STR "2:"
- 4. #define _CODE_PAGE 936
- ========== R0.09b================================
- 本移植记录对应的版本为 R0.09b
- 1. 直接下载 ff9b.zip 文件,然后解压,将其复制到自己的工程中。
- 本例子是将其存放在: \User\FatFS\src
- 2. 在工程配置中添加h文件搜索路径 \User\FatFS\src
- 3. 在工程中添加2个源代码文件:
- ff.c
- diskio.c
- cc936.c
- 4. 修改 diskio.c 文件
- 5. 为了支持长文件名,必须包含 cc936.c 文件,其中 static const WCHAR uni2oem[] 常量数组
- 是一个GB2312码和UNICODE代码的转换表,会占用程序空间约170K字节。
- ==========================================
- 【ffconf.h 修改记录】
- (1)#define _CODE_PAGE 932 /* 这是日文编码 */
- 修改为:
- #define _CODE_PAGE 936 /* 这是简体中文编码 */
- (2)#define _FS_LOCK 0 修改 3, 可以同时打开3个文件,0表示只能打开1个。
- (3)#define _USE_LFN 0 /* 0 to 3 */
- 修改为
- #define _USE_LFN 1 使能长文件名,分配静态内存用于存储长文件名
- 1: Enable LFN with static working buffer on the BSS. Always NOT reentrant.
- (4)在末尾增加 #include "diskio.h"。 主要目的是声明多个磁盘系统的ID(FS_SD和FS_NAND)
- (5) #define _VOLUMES 3 【为了同时支持SD卡,NAND Flash 和 USB 三种介质,将 1 修改为 3】
- 【diskio.c 修改记录】
- 1. 修改 disk_initialize, 添加SD卡初始化
- 2. 修改 disk_status, 返回SD卡状态
- 3. 修改 disk_read,实现读SD卡扇区
- 4. 修改 disk_write,实现写SD卡扇区
- 5. 修改 disk_ioctl, 暂时未用
- 6. 添加函数 : DWORD get_fattime (void);
- 【diskio.h 修改记录】
- 1. 文件末尾增加物理磁盘代码
- /* Definitions of physical drive number for each media */
- #define FS_SD 0
- #define FS_NAND 1
- #define FS_USB 2
- 【长文件名问题】
- 1. 部分文件的属性中只有短文件名 FileInf.fname ,长文件名域 FileInf.lfname 为空
- 2. ff_mkdir 创建目录时,无论文件名长短,均可以正确读取到长文件名FileInf.lfname
- 3. f_open 创建文件时,如果文件名长度大于 8.3格式名,则会正确填充FileInf.lfname
- 【SD_WriteMultiBlocks()函数问题】
- 1. 在 disk_write 中,如果待写入的 block大于1,可以选择 SD_WriteMultiBlocks()函数加速
- 但是最后一个形参需要是 count + 1 才能正确写入,否则最后1个扇区的数据将不正确。
- 【原因待查】
- /* 此处存在疑问: 扇区个数如果写 count ,将导致最后1个block无法写入 */
- Status = SD_WriteMultiBlocks((uint8_t *)buff, sector << 9 ,SECTOR_SIZE, count + 1);
|