| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- #include "board.h"
- #include "hpm_sdmmc_sd.h"
- #include "soft_sdcard.h"
- #include "ff.h"
- #include "hard_sdio_sd.h"
- #include "diskio.h"
- #include "my_math.h"
- #include "soft_delay.h"
- #include "soft_time.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- /*
- //==========================连续写入测试=============================
- ...
- (注释内容保持不变)
- */
- /**
- ******************************************************************************
- * 定义变量
- ******************************************************************************
- */
- FATFS fs; /* FatFs文件系统对象 */
- FIL fnew_data, fnew_log; /* 文件对象 */
- FRESULT res_sd; /* 文件操作结果 */
- UINT frnum; /* 文件成功读数量 */
- UINT fwnum; /* 文件成功写数量 */
- // BYTE ReadBuffer[_MAX_SS] = {0}; /* 读缓冲区 */
- // BYTE WriteBuffer[_MAX_SS] = {0}; /* 写缓冲区*/
- BYTE work[FF_MAX_SS] = {0}; /* 工作区 (larger is better for processing time) */
- DIR logdir;
- DIR posdir;
- FILINFO fno;
- int file_num = 0;
- // FATFS文件名不区分大小写。默认大写。
- const char *logpath = "LOG";
- const char *pospath = "POS";
- static uint8_t _sd_init_ok = 0;
- /*========== HPM6750 适配:添加设备定义 ==========*/
- #define SDMMC_BASE BOARD_APP_SDXC_BASE
- #define SDMMC_IRQn BOARD_APP_SDXC_IRQn
- #define DEV_SD 0
- uint8_t sdcard_initok(void)
- {
- return _sd_init_ok;
- }
- /**
- * @brief 初始化 SD 卡
- * @param init_type
- * @arg 0 初始化 SD 卡, 1 格式化 SD 卡
- */
- void sdcard_inital(uint8_t init_type)
- {
- // 硬件初始化 被中间件做了?
-
- /*========== HPM6750 适配:等待SD卡插入并初始化 ==========*/
- while ((disk_initialize(DEV_SD))) // 检测不到SD卡
- {
- printf("SD CARD ERR \n");
- delay_ms(600);
- }
- /*========== HPM6750 适配:配置中断 ==========*/
- // intc_m_enable_irq_with_priority(SDMMC_IRQn, 1); 要启动中断???
- // SDIO方式挂载文件系统,文件系统挂载时会对SDIO设备初始化
- /*========== HPM6750 适配:保持空路径 ==========*/
- res_sd = f_mount(&fs, "", 1);
- /*----------------------- 格式化测试 ---------------------------*/
- /* 如果没有文件系统就格式化创建创建文件系统 */
- if (res_sd == FR_NO_FILESYSTEM || init_type == 1)
- {
- /* 格式化 */
- /*========== HPM6750 适配:MKFS_PARM结构体 ==========*/
- MKFS_PARM mkfs_parm;
- mkfs_parm.fmt = FM_ANY;
- mkfs_parm.n_fat = 0;
- mkfs_parm.align = 0;
- mkfs_parm.n_root = 0;
- mkfs_parm.au_size = 0;
-
- /* 保持空路径 */
- res_sd = f_mkfs("", &mkfs_parm, work, sizeof(work));
- if (res_sd == FR_OK)
- {
- /* 格式化后,先取消挂载 */
- res_sd = f_mount(NULL, "", 1);
- /* 重新挂载 */
- res_sd = f_mount(&fs, "", 1);
- }
- else
- {
- // 格式化失败。》》
- printf("sd card format fail!\n");
- while (1)
- ;
- }
- }
- else if (res_sd != FR_OK)
- {
- // SD卡挂载文件系统失败,可能原因:SD卡初始化不成功。\r\n");
- printf("sd card mount fail!\n");
- while (1)
- ;
- }
- else
- {
- // 文件系统挂载成功,可以进行读写测试\r\n");
- }
- // 创建文件夹
- res_sd = f_mkdir(logpath);
- res_sd = f_mkdir(pospath);
- // 检查是否存在LOG文件
- f_open(&fnew_data, "LOG/LOG_FLY.DAT", FA_CREATE_NEW);
- f_close(&fnew_data);
- DWORD nclst;
- unsigned long free_size = 0;
- FATFS *fs_p = &fs;
- // 检查剩余容量
- res_sd = f_getfree("", &nclst, &fs_p);
- free_size = nclst * fs_p->csize / 2;
- // 打开log文件夹, 读下一个的文件
- res_sd = f_opendir(&logdir, logpath);
- res_sd = f_readdir(&logdir, &fno);
- // 如果剩余容量小于96MB, 删除部分数据文件, 防止写满
- while (free_size < 96 * 1024)
- {
- if (fno.fname[0] != 'L')
- {
- char datafile_path[20] = "";
- // 拼接文件路径
- strcat(datafile_path, logpath);
- strcat(datafile_path, "/");
- strcat(datafile_path, fno.fname);
- // 删除一个文件
- f_unlink(datafile_path);
- }
- // 再读一下剩余的容量是否够用
- res_sd = f_getfree("", &nclst, &fs_p);
- free_size = nclst * fs_p->csize / 2;
- // 读下一个文件
- res_sd = f_readdir(&logdir, &fno);
- }
- _sd_init_ok = 1;
- // 关闭文件夹
- res_sd = f_closedir(&logdir);
- }
|