| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- #include "soft_sdcard.h"
- #include "ff.h"
- #include "hard_sdio_sd.h"
- #include "my_math.h"
- #include "soft_delay.h"
- #include "soft_time.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- // 掉hpm的sd fatfs库
- /*
- //==========================连续写入测试=============================
- WriteBuffer字节 写入速度 写固定字节数 写大数据块
- 512 475kb 写512字节用时1052us 写2*1024*1024字节用时4310us
- 1024 563kb 写1024字节用时1775us 写2*1024*1024字节用时3637us
- 2048 1280kb 写2048字节用时1562us 写2*1024*1024字节用时1600us
- 4096 2528KB 写4096字节用时1582us 写2*1024*1024字节用时810us
- /////////////=============实际测试==非连续写入==写512字节用时平均4500us========问题出在哪里????
- 实际测试
- 正常记录过程中拔掉TF卡不会造成死机。f_write之前会检查系统,如果CARD_ERR会直接返回。且不耗时间,直接返回。
- 不连续记录时,每次写512字节用时4000us。写5120字节用时5000us。。。所以猜测写操作的时间主要浪费在了数据发送完成后的写入环节。。
- */
- #if 0
- /**
- ******************************************************************************
- * 定义变量
- ******************************************************************************
- */
- 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;
- 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)
- {
- //while ((SD_Init())) // 检测不到SD卡
- //{
- // printf("SD CARD ERR \n");
- // delay_ms(600);
- //}
- //SDIO_NvicConfig();
- //// SDIO方式挂载文件系统,文件系统挂载时会对SDIO设备初始化
- //res_sd = f_mount(&fs, "", 1);
- ///*----------------------- 格式化测试 ---------------------------*/
- ///* 如果没有文件系统就格式化创建创建文件系统 */
- //if (res_sd == FR_NO_FILESYSTEM || init_type == 1)
- //{
- // /* 格式化 */
- // res_sd = f_mkfs("", FM_ANY, 0, 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);
- }
- #endif
|