智能车制作

标题: SD卡,不能写入数据,感觉在初始化的时候就有问题,求指导 [打印本页]

作者: dss875914213    时间: 2016-5-24 17:13
标题: SD卡,不能写入数据,感觉在初始化的时候就有问题,求指导
void img_sd_init(void)
{
    int     fireres;
    char    myfilename[20];
    uint16  imgsize[] = {
                            CAMERA_H,
                            CAMERA_W,
                            //CAMERA_COLOR,
                         };      //高、宽、摄像头颜色类型
    uint32  mybw;
    uint32  Imag_num = 0;

    f_mount(0, &firefs);
    printf("DSS!\n");

    do
    {
        Imag_num ++;
        sprintf(myfilename, "0:/fire%d.sd", Imag_num);
        fireres = f_open( &firesrc , myfilename, FA_CREATE_NEW | FA_WRITE);

        if(firefs.fs_type == 0)
        {
            firesrc.fs = 0;
            return;
        }

    }while(fireres == FR_EXIST);        //如果文件存在,则命名继续加1

      printf("DSS2!\n");
    if ( fireres == FR_OK )
    {
         OLED_P6x8Str(10,1,"SD Card OK!");
         printf("SD Card OK!\n");
        fireres = f_write(&firesrc, imgsize, sizeof(imgsize),&mybw);  //先写入高和宽,方便上位机处理

    }
    else
    {
        OLED_P6x8Str(10,1,"SD Card Error!");
        printf("SD Card Error!\n");
        f_close(&firesrc);
        firesrc.fs = 0;
        while(1);
    }
}

程序运行到    do
    {
        Imag_num ++;
        sprintf(myfilename, "0:/fire%d.sd", Imag_num);
        fireres = f_open( &firesrc , myfilename, FA_CREATE_NEW | FA_WRITE);

        if(firefs.fs_type == 0)
        {
            firesrc.fs = 0;
            return;
        }
就返回了,有人知道是为什么吗
硬件我检查了一下,没有问题。
SD卡使用,写入图像前,需要格式化或者新建文件吗


作者: 六步上篮    时间: 2016-5-24 20:29
*外的库,有时候需要多换几个卡试试
作者: dss875914213    时间: 2016-5-25 09:29
六步上篮 发表于 2016-5-24 20:29
*外的库,有时候需要多换几个卡试试

SD卡使用前,使用的那几个引脚不用初始化吗,感觉他们的函数都没有初始化

    FIL     fdst;   //文件
    FATFS   fs;     //文件系统

    uint32 size, sizetmp;
    int res;
    char *str = "感谢您选用 野火Kinetis开发板 !^_^\n野火初学123论坛:chuxue123.com";
    uint8 buff[BUFF_SIZE];

    memset(buff,0,BUFF_SIZE);

    f_mount(0, &fs);                                                               //挂载文件系统

    //初始化 SD卡 在 f_open 上执行,目前代码只支持打开一个文件(由 _FS_SHARE 配置),频繁打开文件会消耗CPU资源
    res = f_open(&fdst, "0:/FireDemo.txt", FA_OPEN_ALWAYS | FA_WRITE | FA_READ);  //打开文件,如果没有就创建,带读写打开

    if( res == FR_DISK_ERR)
    {
        printf( "\n没插入SD卡??\n" );
        return;
    }
    else if ( res == FR_OK )
    {
        printf( "\n文件打开成功 \n" );
    }
    else
    {
        printf("\n返回值异常");
        return;
    }


    f_puts(str, &fdst);                     //往文件里写入字符串

    f_sync(&fdst);                          //刚才写入了数据,实际上数据并没真正完成写入,需要调用此函数同步或者关闭文件,才会真正写入

    size = f_size(&fdst);                   //获取文件的大小

    printf( "\n文件大小为:%d \n" , size);  //串口打印文件的大小

    if(size > BUFF_SIZE)size = BUFF_SIZE;   //防止溢出

    f_lseek(&fdst, 0);                      //把指针指向文件顶部
    f_read (&fdst, buff, size, &sizetmp);   //读取

    printf("文件内容为:\n%s", (char const *)buff);

    f_close(&fdst);                         //关闭文件
    while(1);






欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2