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

2019-07-14 17:06发布

fatfs文件系统格式化代码SPI flash,求大虾帮助
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
safasad21
1楼-- · 2019-07-15 00:08
 精彩回答 2  元偷偷看……
wanglq2011
2楼-- · 2019-07-15 03:28
只是文件页大小的问题,改下宏就好了
60user199
3楼-- · 2019-07-15 07:36
大师,我移植了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"); //设置超级终端背景为黑 {MOD},字符为绿 {MOD}
        UART0SendStr(" *******************************************************************************");
        UART0SendStr(" *********************** Copyright 2012-10-10, liujiehan ***********************");
        UART0SendStr(" ************************** http://www.upcomputer.com **************************");
        UART0SendStr(" ***************************** All Rights Reserved *****************************");
        UART0SendStr(" *******************************************************************************");
        UART0SendStr(" ");
       
        /*初始化文件系统,检查芯片是否插入以及是否型号正确*/
        res = disk_initialize(NORFLASH);
        if(res == RES_OK)
        {
            UART0SendStr("initialize filesystem successed! ");       
        }
        else
        {
            UART0SendStr("initialize filesystem failed! ");          
        }
        /*挂载文件系统*/
        res = f_mount(NORFLASH,&fs);
        if(res == RES_OK)
        {
            UART0SendStr("mount filesystem successed! ");       
        }
        else
        {
            UART0SendStr("mount filesystem failed! ");          
        }
        /*格式化磁盘*/
        UART0SendStr("正在格式化磁盘,请稍候... ");
        //res = f_mkfs(NORFLASH,1,4096);//4096:每簇占用字节数
        res = f_mkfs(NORFLASH,0,4096);//4096:每簇占用字节数
        if(res == RES_OK)
        {
                UART0SendStr("format filesystem successed! ");
               
        }
        else
        {
            UART0SendStr("format filesystem failed! ");
        }
        res = f_mount(NORFLASH,NULL);
/////////////////////////////////////////////////////////////////////////////////////////////////               
        res = f_mount(NORFLASH,&fs);
               
        /*写文件测试*/
        UART0SendStr("write file test...... ");
    res = f_open(&FileObject, "test.txt", FA_CREATE_ALWAYS | FA_WRITE);
    。。。
}
60user199
4楼-- · 2019-07-15 13:32
大师,我移植了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"); //设置超级终端背景为黑 {MOD},字符为绿 {MOD}
        UART0SendStr(" *******************************************************************************");
        UART0SendStr(" *********************** Copyright 2012-10-10, liujiehan ***********************");
        UART0SendStr(" ************************** http://www.upcomputer.com **************************");
        UART0SendStr(" ***************************** All Rights Reserved *****************************");
        UART0SendStr(" *******************************************************************************");
        UART0SendStr(" ");
       
        /*初始化文件系统,检查芯片是否插入以及是否型号正确*/
        res = disk_initialize(NORFLASH);
        if(res == RES_OK)
        {
            UART0SendStr("initialize filesystem successed! ");       
        }
        else
        {
            UART0SendStr("initialize filesystem failed! ");          
        }
        /*挂载文件系统*/
        res = f_mount(NORFLASH,&fs);
        if(res == RES_OK)
        {
            UART0SendStr("mount filesystem successed! ");       
        }
        else
        {
            UART0SendStr("mount filesystem failed! ");          
        }
        /*格式化磁盘*/
        UART0SendStr("正在格式化磁盘,请稍候... ");
        //res = f_mkfs(NORFLASH,1,4096);//4096:每簇占用字节数
        res = f_mkfs(NORFLASH,0,4096);//4096:每簇占用字节数
        if(res == RES_OK)
        {
                UART0SendStr("format filesystem successed! ");
               
        }
        else
        {
            UART0SendStr("format filesystem failed! ");
        }
        res = f_mount(NORFLASH,NULL);
/////////////////////////////////////////////////////////////////////////////////////////////////               
        res = f_mount(NORFLASH,&fs);
               
        /*写文件测试*/
        UART0SendStr("write file test...... ");
    res = f_open(&FileObject, "test.txt", FA_CREATE_ALWAYS | FA_WRITE);
    。。。
}
 
hfjydz2013
5楼-- · 2019-07-15 15:47
有谁知道 文件名是保存在什么地方的 系统上电后直接打开文件 读数据失败是怎么回事

一周热门 更多>