第25章 串行FLASH文件系统FatFs (7)

11         *(WORD * )buff = 4096;  /*flash最小写单元为页,256字节,此处取2页为一个读写单位*/

12         break;

13     case GET_BLOCK_SIZE :      /* 同时擦除扇区个数(双字) */

14         *(DWORD * )buff = 1;   /*flash1sector为最小擦除单位*/

15         break;

16     case CTRL_TRIM:

17         break;

18     case CTRL_SYNC :

19         break;

20     }

21     return RES_OK;

22 }

TM_FATFS_FLASH_SPI_disk_ioctl函数有三个形参,lun为设备物理编号,cmd为控制指令,包括发出同步信号、获取扇区数目、获取扇区大小、获取擦除块数量等等指令,buff为指令对应的数据指针。

对于QSPI Flash芯片,为支持FatFs格式化功能,需要用到获取扇区数量(GET_SECTOR_COUNT)指令和获取擦除块数量(GET_BLOCK_SIZE)。另外,SD卡扇区大小为512字节,SPI Flash芯片一般设置扇区大小为4096字节,所以需要用到获取扇区大小(GET_SECTOR_SIZE)指令。

时间戳获取

代码清单 25-6  时间戳获取

1 __weak DWORD get_fattime(void)

2 {

3     /* 返回当前时间戳 */

4     return    ((DWORD)(2015 - 1980) << 25)  /* Year 2015 */

5               | ((DWORD)1 << 21)        /* Month 1 */

6               | ((DWORD)1 << 16)        /* Mday 1 */

7               | ((DWORD)0 << 11)        /* Hour 0 */

8               | ((DWORD)0 << 5)         /* Min 0 */

9               | ((DWORD)0 >> 1);        /* Sec 0 */

10 }

get_fattime函数用于获取当前时间戳,在ff.c文件中被调用。FatFs在文件创建、被修改时会记录时间,这里我们直接使用赋值方法设定时间戳。为更好的记录时间,可以使用控制器RTC功能,具体要求返回值格式为:

q bit31:25 ——从1980至今是多少年,范围是 (0..127) ;

q bit24:21 ——月份,范围为 (1..12) ;

q bit20:16 ——该月份中的第几日,范围为(1..31) ;

q bit15:11——时,范围为 (0..23);

q  bit10:5  ——分,范围为 (0..59);

q  bit4:0   ——秒/ 2,范围为 (0..29) 。

25.3.5  FatFs功能配置

ffconf.h文件是FatFs功能配置文件,我们可以对文件内容进行修改,使得FatFs更符合我们的要求。ffconf.h对每个配置选项都做了详细的使用情况说明。下面只列出修改的配置,其他配置采用默认即可。

代码清单 257  FatFs功能配置选项

1 #define _USE_MKFS   1

2 #define _CODE_PAGE  936

3 #define _USE_LFN    2

4 #define _VOLUMES    3

5 #define _MIN_SS     512

6 #define _MAX_SS     4096

1) _USE_MKFS:格式化功能选择,为使用FatFs格式化功能,需要把它设置为1

2) _CODE_PAGE:语言功能选择,并要求把相关语言文件添加到工程宏。为支持简体中文文件名需要使用936”,正如在 256的操作,我们已经把cc936.c文件添加到工程中。

3) _USE_LFN:长文件名支持,默认不支持长文件名,这里配置为2,支持长文件名,并指定使用栈空间为缓冲区。

4) _VOLUMES:指定物理设备数量,这里设置为3,包括预留SD卡和qSPI Flash芯片。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzsjd.html