Steven.Mo 发表于 2017-11-17 14:56:03

关于FatFS移植到SDRAM的疑问?

我手上有几个项目因为要使用到在SDRAM中建立FatFS,首先在SPI FLASH中的文件拷贝到SDRAM中的FatFS,因为数据操作特别频繁,因此设定在一定时间段后将SDRAM中的文件拷贝到SPI Flash。

测试环境:STM32F429IGT6+W9825G6KH的SDRAM
软件环境:STM32CubeMX 1.8

单独测试429驱动SDRAM都是一切正常的,在加载FatFS文件系统以后,执行以下操作就出现代码标注红色地方:
打开文件就一直提示的是没有文件系统,而我在初始化FatFS之后,去观察我SDRAM首地址0xC0000000之后的512个字节,所有数据全部为0,目前不知道问题出在哪里,恳请大家帮忙分析分析?

printf("\r\n ****** FatFs Example ******\r\n\r\n");
    /*##-1- Register the file system object to the FatFs module ##############*/
                retSD = f_mount(&fs, "0:", 0);
    if(retSD)
                {
      printf(" f_mount error : %d \r\n",retSD);      
                        Error_Handler() ;
    }
    else
                {
      printf(" mount sucess!!! \r\n");
                }
                retSD = f_fdisk(0,plist,work) ;
                if( retSD )
                {
                        printf(" f_fdisk error : %d \r\n",retSD);      
                        Error_Handler() ;
                }
                else
                {
                        printf(" f_fdisk sucess!!! \r\n");
                }
                retSD = f_mkfs("0:",FM_ANY,2048,work,sizeof work) ;
                if(retSD)
                {
      printf(" mkfs error : %d \r\n",retSD);      
                        Error_Handler() ;
    }
    else
                {
      printf(" mkfs sucess!!! \r\n");
                }
                retSD = f_mount(NULL, "0:", 1);
               
                retSD = f_mount(&fs, "0:", 1);
               
    /*##-2- Create and Open new text file objects with write access ######*/
    retSD = f_open(&fil, filename, FA_CREATE_NEW | FA_WRITE | FA_READ );//在这里就提示没有文件系统,而我调试观测SDRAM的首地址,发现在首地址这里之后的512字节的数据全是0x00.
    if(retSD)
                {
      printf(" open file error : %d\r\n",retSD);
                }
    else
                {
      printf(" open file sucess!!! \r\n");
                }

    /*##-3- Write data to the text files ###############################*/

    retSD = f_write(&fil, wtext, sizeof(wtext), (void *)&byteswritten);

    if(retSD)
                {
      printf(" write file error : %d\r\n",retSD);
                }
    else
    {
      printf(" write file sucess!!! \r\n");
      printf(" write Data : %s\r\n",wtext);
    }

    /*##-4- Close the open text files ################################*/
    retSD = f_close(&fil);
    if(retSD)
                {
      printf(" close error : %d\r\n",retSD);
                }
    else
                {
      printf(" close sucess!!! \r\n");
                }
    /*##-5- Open the text files object with read access ##############*/
    retSD = f_open(&fil, filename, FA_READ);
    if(retSD)
                {
      printf(" open file error : %d\r\n",retSD);
                }
    else
                {
      printf(" open file sucess!!! \r\n");
                }
    /*##-6- Read data from the text files ##########################*/
    retSD = f_read(&fil, rtext, sizeof(rtext), (UINT*)&bytesread);
    if(retSD)
                {
      printf(" read error!!! %d\r\n",retSD);
                }
    else
    {
      printf(" read sucess!!! \r\n");
      printf(" read Data : %s\r\n",rtext);
    }
    /*##-7- Close the open text files ############################*/
    retSD = f_close(&fil);
    if(retSD)
                {
      printf(" close error!!! %d\r\n",retSD);
                }
    else
                {
      printf(" close sucess!!! \r\n");
                }
    /*##-8- Compare read data with the expected data ############*/
    if(bytesread == byteswritten)
    {
      printf(" FatFs is working well!!!\r\n");
    }
                retSD=f_mount(0, "0", 0);

阿莫西林 发表于 2018-4-8 09:47:01

可能在你红色部分之前文件系统就有问题了。你从第一个文件系统的函数查起,我记得里面一层层调用,有专门读写第一个物理扇区的函数

jcx0324 发表于 2018-4-8 13:58:49

文件系统对应的块大小都可以修改的,建议先检查文件系统最底层的读写函数是否与你芯片对应
页: [1]
查看完整版本: 关于FatFS移植到SDRAM的疑问?