STM32/STM8技术william hill官网
直播中

冯媛媛

7年用户 225经验值
私信 关注
[问答]

fatfs文件系统格式化代码SPI flash

fatfs文件系统格式化代码SPI flash,求大虾帮助

回帖(6)

张红

2018-10-4 14:38:13
不太清楚!我帮你把帖子顶起来
举报

李玉梅

2018-10-4 14:52:29
太谢谢了AAAAAAAAAAAAAAAAAAAAAA
举报

李林

2018-10-4 14:58:28
只是文件页大小的问题,改下宏就好了
举报

贾利利

2018-10-4 15:10:27
大师,我移植了FATFS到flash,发现格式化未成功(未移植操作系统时多扇区(512B)读写没问题,已经测试过),如何配置格式化函数呀:
#define        _MAX_SS                512                /* 512, 1024, 2048 or 4096 */
/* Maximum sector size to be handled.
/  Always set 512 for memory card and hard disk but a larger value may be
/  required for floppy disk (512/1024) and optical disk (512/2048).
/  When _MAX_SS is larger than 512, GET_SECTOR_SIZE command must be implememted
/  to the disk_ioctl function. */
 

/*-----------------------------------------------------------------------*/
/* Miscellaneous Functions                                               */
 
DRESULT disk_ioctl( 
                      BYTE drv,             /* Physical drive nmuber (0..) */
                      BYTE ctrl,            /* Control code */
                      void *buff            /* Buffer to send/receive control data */
                  )
{
    DRESULT res = RES_OK;
    //DWORD result;
    if (drv)
    { 
        return RES_ERROR;
    }
    
    switch (ctrl)
    { 
        case CTRL_SYNC:
                           break;
        case GET_SECTOR_COUNT:
        
                           *(DWORD*)buff = (DWORD) 4096;
                           break;                           //2M byte
                           
        case GET_SECTOR_SIZE:
                           
                           //*(DWORD*)buff = (DWORD) 2048;  //>512时从这里获得扇区大小
                           break;  
                                                           //单扇区字节数
        case GET_BLOCK_SIZE:
                           
                           *(DWORD*)buff = (DWORD) 4096;
                           break;                          //族大小  
                           
        case CTRL_POWER :
                                   break;
            case CTRL_LOCK :
                                   break;
            case CTRL_EJECT :
                                   break;
        default:
                           res = RES_ERROR;
                           break;        
    }
    return res;
}
 
int main(void)
{
        UARTInit ();                    /* UARTInit               */
    PINSEL0 = PINSEL0 & (~0x0F);    /* UART0,设置I/O连接到UART*/                         
    PINSEL0 = PINSEL0 | 0x05;       /* P0.0 = TXD0,P0.1 = RXD0*/   
    
        UART0SendStr("x0c");
        UART0SendStr("x0c");        //超级终端清屏
        UART0SendStr("33[1;40;32m"); //设置超级终端背景为黑色,字符为绿色
        UART0SendStr("rn*******************************************************************************");
        UART0SendStr("rn*********************** Copyright 2012-10-10, liujiehan ***********************");
        UART0SendStr("rn************************** http://www.upcomputer.com **************************");
        UART0SendStr("rn***************************** All Rights Reserved *****************************");
        UART0SendStr("rn*******************************************************************************");
        UART0SendStr("rn");
       
        /*初始化文件系统,检查芯片是否插入以及是否型号正确*/
        res = disk_initialize(NORFLASH);
        if(res == RES_OK)
        {
            UART0SendStr("initialize filesystem successed!nrnr");       
        }
        else
        {
            UART0SendStr("initialize filesystem failed!nrnr");          
        }
        /*挂载文件系统*/
        res = f_mount(NORFLASH,&fs);
        if(res == RES_OK)
        {
            UART0SendStr("mount filesystem successed!nrnr");       
        }
        else
        {
            UART0SendStr("mount filesystem failed!nrnr");          
        }
        /*格式化磁盘*/
        UART0SendStr("正在格式化磁盘,请稍候...nrnr");
        //res = f_mkfs(NORFLASH,1,4096);//4096:每簇占用字节数
        res = f_mkfs(NORFLASH,0,4096);//4096:每簇占用字节数
        if(res == RES_OK)
        {
                UART0SendStr("format filesystem successed!nr");
               
        }
        else
        {
            UART0SendStr("format filesystem failed!nr");
        }
        res = f_mount(NORFLASH,NULL);
/////////////////////////////////////////////////////////////////////////////////////////////////               
        res = f_mount(NORFLASH,&fs);
               
        /*写文件测试*/
        UART0SendStr("write file test......nr");
    res = f_open(&FileObject, "test.txt", FA_CREATE_ALWAYS | FA_WRITE);
    。。。
}
举报

贾利利

2018-10-4 15:26:18
大师,我移植了FATFS到flash,发现格式化未成功(未移植操作系统时多扇区(512B)读写没问题,已经测试过),如何配置格式化函数呀:
 
#define        _MAX_SS                512                /* 512, 1024, 2048 or 4096 */
/* Maximum sector size to be handled.
/  Always set 512 for memory card and hard disk but a larger value may be
/  required for floppy disk (512/1024) and optical disk (512/2048).
/  When _MAX_SS is larger than 512, GET_SECTOR_SIZE command must be implememted
/  to the disk_ioctl function. */
 
 
/*-----------------------------------------------------------------------*/
/* Miscellaneous Functions                                               */
 
DRESULT disk_ioctl( 
                      BYTE drv,             /* Physical drive nmuber (0..) */
                      BYTE ctrl,            /* Control code */
                      void *buff            /* Buffer to send/receive control data */
                  )
{
    DRESULT res = RES_OK;
    //DWORD result;
    if (drv)
    { 
        return RES_ERROR;
    }
    
    switch (ctrl)
    { 
        case CTRL_SYNC:
                           break;
        case GET_SECTOR_COUNT:
        
                           *(DWORD*)buff = (DWORD) 4096;
                           break;                           //2M byte
                           
        case GET_SECTOR_SIZE:
                           
                           //*(DWORD*)buff = (DWORD) 2048;  //>512时从这里获得扇区大小
                           break;  
                                                           //单扇区字节数
        case GET_BLOCK_SIZE:
                           
                           *(DWORD*)buff = (DWORD) 4096;
                           break;                          //族大小  
                           
        case CTRL_POWER :
                                   break;
            case CTRL_LOCK :
                                   break;
            case CTRL_EJECT :
                                   break;
        default:
                           res = RES_ERROR;
                           break;        
    }
    return res;
}
 
 
int main(void)
{
        UARTInit ();                    /* UARTInit               */
        PINSEL0 = PINSEL0 & (~0x0F);    /* UART0,设置I/O连接到UART*/                         
        PINSEL0 = PINSEL0 | 0x05;       /* P0.0 = TXD0,P0.1 = RXD0*/   
    
        UART0SendStr("x0c");
        UART0SendStr("x0c");        //超级终端清屏
        UART0SendStr("33[1;40;32m"); //设置超级终端背景为黑色,字符为绿色
        UART0SendStr("rn*******************************************************************************");
        UART0SendStr("rn*********************** Copyright 2012-10-10, liujiehan ***********************");
        UART0SendStr("rn************************** http://www.upcomputer.com **************************");
        UART0SendStr("rn***************************** All Rights Reserved *****************************");
        UART0SendStr("rn*******************************************************************************");
        UART0SendStr("rn");
       
        /*初始化文件系统,检查芯片是否插入以及是否型号正确*/
        res = disk_initialize(NORFLASH);
        if(res == RES_OK)
        {
            UART0SendStr("initialize filesystem successed!nrnr");       
        }
        else
        {
            UART0SendStr("initialize filesystem failed!nrnr");          
        }
        /*挂载文件系统*/
        res = f_mount(NORFLASH,&fs);
        if(res == RES_OK)
        {
            UART0SendStr("mount filesystem successed!nrnr");       
        }
        else
        {
            UART0SendStr("mount filesystem failed!nrnr");          
        }
        /*格式化磁盘*/
        UART0SendStr("正在格式化磁盘,请稍候...nrnr");
        //res = f_mkfs(NORFLASH,1,4096);//4096:每簇占用字节数
        res = f_mkfs(NORFLASH,0,4096);//4096:每簇占用字节数
        if(res == RES_OK)
        {
                UART0SendStr("format filesystem successed!nr");
               
        }
        else
        {
            UART0SendStr("format filesystem failed!nr");
        }
        res = f_mount(NORFLASH,NULL);
/////////////////////////////////////////////////////////////////////////////////////////////////               
        res = f_mount(NORFLASH,&fs);
               
        /*写文件测试*/
        UART0SendStr("write file test......nr");
    res = f_open(&FileObject, "test.txt", FA_CREATE_ALWAYS | FA_WRITE);
    。。。
}
 
举报

孙榕

2018-10-4 15:32:40
有谁知道 文件名是保存在什么地方的 系统上电后直接打开文件 读数据失败是怎么回事
举报

更多回帖

发帖
×
20
完善资料,
赚取积分