野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10837|回复: 8

sd卡为什么只能存512个字节

[复制链接]
发表于 2015-10-27 21:38:21 | 显示全部楼层 |阅读模式
sd卡创建txt存储数据只能存512个字节
回复

使用道具 举报

发表于 2015-10-28 08:55:59 | 显示全部楼层
可以存储大数据的
回复 支持 反对

使用道具 举报

发表于 2015-10-28 08:56:02 | 显示全部楼层
SD卡的块大小是512字节,所以一次读写一般以512字节来实现,这里是指一次读写是512字节,但是你可以读写多次就可以实现非常多字节的啦
实际上你使用文件系统的话,你可以直接使用f_write()、f_read()来实现多字节读写,由文件系统自己控制读写次数的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-28 18:03:45 | 显示全部楼层
亽亼 发表于 2015-10-28 08:56
SD卡的块大小是512字节,所以一次读写一般以512字节来实现,这里是指一次读写是512字节,但是你可以读写多 ...

为什么存512个字节后就存不进去了
回复 支持 反对

使用道具 举报

发表于 2015-10-28 18:29:19 | 显示全部楼层
只能说是你程序哪里问题啊
可能是SD卡驱动问题或者SD卡与文件系统接口函数问题或者本身你应用程序问题....
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-30 10:42:27 | 显示全部楼层
亽亼 发表于 2015-10-28 18:29
只能说是你程序哪里问题啊
可能是SD卡驱动问题或者SD卡与文件系统接口函数问题或者本身你应用程序问题....

#include "stm32f10x.h"
#include "bsp_sdio_sdcard.h"
#include "bsp_usart1.h"       
#include "ff.h"
#include "mpu6050.h"
#include "bsp_i2c.h"
#include "stm32f10x_it.h"
#include "stdio.h"
#define uchar unsi
#define TASK_ENABLE 0
extern unsigned int Task_Delay[NumOfTask];
FIL fnew;
u8 i=0;
u8 byte;                                                                                                        /* file objects */
FATFS fs;                                                                                                        /* Work area (file system object) for logical drives */
FRESULT res;
UINT br, bw;                                                    /* File R/W count */
BYTE buffer[10000];                         /* file copy buffer */
BYTE write_buf[10];
short Accel[3];

u8 flag=0,j=0;
short Gyro[3];
short Temp;
u16 pointer=0;


void delay (int x)
{  int i,j;
    for (i=0;i<x;i++)                  
       for(j=0;j<600;j++);
}

void read(void)
{
            res = f_open(&fnew, "0:飞行数据.txt", FA_OPEN_EXISTING | FA_READ);
                pointer=fnew.fsize;
                        res=f_read(&fnew, buffer,sizeof(buffer) , &br);
                     printf("\r\n %s ", buffer);
                    printf("\r\n完成\r\n\r\n"  );
                    f_close(&fnew);
}
int main(void)
{                                 
       
    i2c_GPIO_Config();
           MPU6050_Init();
  
                USART1_Config();
                printf("\r\n 飞行数据采集系统 \r\n");       
                NVIC_Configuration();                
                f_mount(0,&fs);               
            res = f_open(&fnew, "0:飞行数据.txt", FA_CREATE_ALWAYS | FA_WRITE );
        f_close(&fnew);
   while(1)
                 {
                     delay(10000);         
                if(Task_Delay[1]==0)
                  {
                        MPU6050ReadAcc(Accel);
                    printf("\r\n加速度参考:%8d",Accel[0] );
                        write_buf[0]='a';
                        write_buf[1]='c';
                        write_buf[2]=':';
                        write_buf[3]=Accel[0]/10000+0X30;       
                        write_buf[4]=Accel[0]%10000/1000+0X30;
                        write_buf[5]=Accel[0]%1000/100+0X30;       
                        write_buf[6]=Accel[0]%100/10+0X30;
                        write_buf[7]=Accel[0]%10+0X30;
                        write_buf[8]=0x0d;
                        write_buf[9]=0x0a;
               }


                if ( res == FR_OK )
                {                 
                        res = f_open(&fnew, "0:飞行数据.txt", FA_CREATE_ALWAYS | FA_WRITE );
                        pointer=fnew.fsize;
                        res=f_lseek(&fnew,pointer);
                        res=f_lseek(&fnew,pointer+j);
                           res = f_write(&fnew, &write_buf, sizeof(write_buf), &bw);
               
                        res=f_sync(&fnew);
                        i++;
                        // f_lseek(&fnew, f_size(&fnew));
                        f_close(&fnew);
                       printf("\r\n写成功%d",i );
                        j=j+10;
                        read();
                        delay(10000);         
                    
                }
                  
                           }
                /* Close open files */
                                              
                 
    /* Unregister work area prior to discard it */
    f_mount(0, NULL);       
}

          
回复 支持 反对

使用道具 举报

发表于 2015-10-30 10:54:14 | 显示全部楼层
你的数组开的多大 例程里面的数组定的就是512 你改大试下
回复 支持 反对

使用道具 举报

发表于 2015-10-30 14:34:29 | 显示全部楼层
if ( res == FR_OK )
                {                 
                        res = f_open(&fnew, "0:飞行数据.txt", FA_CREATE_ALWAYS | FA_WRITE );
                        pointer=fnew.fsize;
                        res=f_lseek(&fnew,pointer);
                        res=f_lseek(&fnew,pointer+j);
                           res = f_write(&fnew, &write_buf, sizeof(write_buf), &bw);
               
                        res=f_sync(&fnew);
                        i++;
                        // f_lseek(&fnew, f_size(&fnew));
                        f_close(&fnew);
                       printf("\r\n写成功%d",i );
                        j=j+10;
                        read();
                        delay(10000);         
                    
                }
觉得重点在这个参数选择上,你这样会每次都重新创建一次文件,而不是在原来基础上写入,
因为重建,所以每次文件只有512这个字节大小
回复 支持 反对

使用道具 举报

发表于 2017-7-14 09:17:32 | 显示全部楼层
最终结论调试如何, 能否上传程序。谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-2 05:20 , Processed in 0.037357 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表