搜索
bottom↓
回复: 84

【已解决】每扇区4096字节的SPI Flash能用FatFS吗?

[复制链接]

出0入0汤圆

发表于 2011-2-21 13:40:54 | 显示全部楼层 |阅读模式
网上下载了例程,用的是AT45系列,512字节/每扇区的,我用的是W25x32,每扇区4096,1024扇区,共4M,但配置为这两个参数后,格式化不能成功,返回14,扇区改为512的话,格式化可以成功,但其它函数都返回13 ,no fat sytem。

还有个问题,diskio.c中,disk_write与disk_read中的sector参数,是指flash中的字节地址还是扇区地址?比如1024个扇区,sector是0-1023,还是0-4096*1024?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-2-21 13:56:15 | 显示全部楼层
可以用FAT。
1. 在diskio.c,disk_write与disk_read中的sector是指0-1023,里面加上你对SPI FLASH的操作就得*512。
2. 要想用格式化命令,除了在ffconf文件打开相应设置以外,还要在disk_ioctl中加上相应的参数。就可以成功格式化。
3. 如果还不成功,还要注意你的格式化命令第三个参数的设置。

出0入0汤圆

 楼主| 发表于 2011-2-21 14:09:21 | 显示全部楼层
感谢1楼,马上去试试。

再问一下,按我的理解,扇区大小应该是根据芯片设置的吧?那不是应该为4096?若设为每扇区512,会不会导致其它问题?

出0入0汤圆

发表于 2011-2-21 14:11:07 | 显示全部楼层
帮顶,关注

出0入0汤圆

发表于 2011-2-21 14:13:39 | 显示全部楼层
还请改动ff.c里面的
#define MIN_SECTOR 2000UL
可以参考:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4555601

出0入0汤圆

 楼主| 发表于 2011-2-21 14:16:08 | 显示全部楼层
回复【4楼】aozima
还请改动ff.c里面的
#define min_sector 2000ul  
可以参考:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4555601
-----------------------------------------------------------------------

这里一开始就改过的,我现在是 FLASH_SECTOR_SIZE = 4096  FLASH_SETOR_COUNT = 1024, min_sector 已改为1000,无法通过格式化。

先看看您给的链接 :D

出0入0汤圆

发表于 2011-2-21 14:23:01 | 显示全部楼层
应该可以,这是0.8b版本

#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 on-board flash memory, floppy disk and optical disk.
/  When _MAX_SS is larger than 512, it configures FatFs to variable sector size
/  and GET_SECTOR_SIZE command must be implememted to the disk_ioctl function. */

对于硬盘和存储卡一般为512!
如果大于512,需要将disk_ioctl函数中的GET_SECTOR_SIZE命令实现


我这是在源代码里看到的

出0入0汤圆

发表于 2011-2-21 14:23:19 | 显示全部楼层
回复【2楼】root_007
-----------------------------------------------------------------------

可以按照芯片的扇区来设置,这样带来的好处是进行大量数据的写入时,可以按芯片的一个扇区来写,速度高。
如果格式512也没问题,只不写入同样数据量时,时间要慢好多好多。

出0入0汤圆

发表于 2011-2-21 14:49:26 | 显示全部楼层
为啥还要FatFS ???

上FatFS一般都是为了 给PC读取方便。

:)

出0入0汤圆

 楼主| 发表于 2011-2-21 15:53:15 | 显示全部楼层
换成FatFS 0.08b,_MAX_SS改成4096,格式化倒是通过了,其它函数都失败,返回13,NO_FILESYSTEM

出0入0汤圆

发表于 2011-2-21 16:25:56 | 显示全部楼层
我也下个0.08b的来用用~~~~

出0入0汤圆

发表于 2011-2-21 17:50:52 | 显示全部楼层
没有价值的测试,spi flash 应该有更简单的file system.

出0入0汤圆

 楼主| 发表于 2011-2-21 21:22:11 | 显示全部楼层
回复【11楼】luzhengmao
没有价值的测试,spi flash 应该有更简单的file system.
-----------------------------------------------------------------------

还请luzhengmao 多指点一下,spi flash哪种fs更适合?

出0入0汤圆

 楼主| 发表于 2011-2-21 21:24:12 | 显示全部楼层
目前进展如下:格式化完成,创建文件提示正确,但列表文件、打开文件、删除文件都提示无文件,可能是没创建上去。

出0入0汤圆

发表于 2011-2-22 00:49:31 | 显示全部楼层
回复【13楼】root_007
-----------------------------------------------------------------------
1.可以读出FLASH内部的数据来看看是否成功格式化。我用2M的FLASH(每扇区4K)格式化后,FAT只有一个扇区。
2.如果格式化正确,不能打开文件等操作,是不是可能文件路径设置不对。
    我就有过这样的情况,在文件路径前面加个"0:"就好了。你可以试试。

出0入0汤圆

发表于 2011-2-22 08:34:17 | 显示全部楼层
回复【12楼】root_007  
回复【11楼】luzhengmao
没有价值的测试,spi flash 应该有更简单的file system.
-----------------------------------------------------------------------
还请luzhengmao 多指点一下,spi flash哪种fs更适合?

-----------------------------------------------------------------------

yaffs

出0入0汤圆

 楼主| 发表于 2011-2-22 12:51:43 | 显示全部楼层
搞定,犯下一个低级错误,写入数据前必须先擦除。
diskio.c的disk_write函数中,加入擦除指令就行了。

网上的demo用的是AT45系列SPI FLASH,难道这个Flash不用擦除就能写入?奇怪。


感谢党,感谢Z.F.,感谢CCTV,感谢Channel V,感谢楼上几位兄弟,特别要感谢 wso75839840,谢谢,非常感谢。

以下是我的DiskIO.c代码,供后来人参考。

#include "diskio.h"

#define ATA        0
#define MMC        1
#define USB        2

/*
┌───────────────┬─────────────┬───────────────┐
│Function                      │Required                  │Note                          │
├───────────────┼─────────────┼───────────────┤
│disk_initialize               │Always                    │                              │
├───────────────┼─────────────┤                              │
│disk_status                   │Always                    │                              │
├───────────────┼─────────────┤                              │
│disk_read                     │Always                    │                              │
├───────────────┼─────────────┤                              │
│disk_write                    │_FS_READONLY == 0         │                              │
├───────────────┼─────────────┤                              │
│disk_ioctl (CTRL_SYNC)        │_FS_READONLY == 0         │                              │
├───────────────┼─────────────┤                              │
│disk_ioctl (GET_SECTOR_COUNT) │_USE_MKFS == 1            │Disk I/O functions.           │
├───────────────┼─────────────┤                              │
│disk_ioctl (GET_SECTOR_SIZE)  │_MAX_SS >= 1024           │                              │
├───────────────┼─────────────┤                              │
│disk_ioctl (GET_BLOCK_SIZE)   │_USE_MKFS == 1            │                              │
├───────────────┼─────────────┤                              │
│disk_ioctl (CTRL_ERASE_SECTOR)│_USE_ERASE == 1           │                              │
├───────────────┼─────────────┤                              │
│get_fattime                   │_FS_READONLY == 0         │                              │
├───────────────┼─────────────┼───────────────┤
│ff_convert                    │_USE_LFN >= 1             │Unicode support functions.    │
├───────────────┼─────────────┤                              │
│ff_wtoupper                   │_USE_LFN >= 1             │Available in option/cc*.c.    │
├───────────────┼─────────────┼───────────────┤
│ff_cre_syncobj                │_FS_REENTRANT == 1        │                              │
├───────────────┼─────────────┤                              │
│ff_del_syncobj                │_FS_REENTRANT == 1        │                              │
├───────────────┼─────────────┤                              │
│ff_req_grant                  │_FS_REENTRANT == 1        │O/S dependent functions.      │
├───────────────┼─────────────┤Samples available in          │
│ff_rel_grant                  │_FS_REENTRANT == 1        │option/syscall.c.             │
├───────────────┼─────────────┤                              │
│ff_mem_alloc                  │_USE_LFN == 3             │                              │
├───────────────┼─────────────┤                              │
│ff_mem_free                   │_USE_LFN == 3             │                              │
└───────────────┴─────────────┴───────────────┘
*/

// Inidialize a Drive
DSTATUS disk_initialize(BYTE drv)        /* Physical drive nmuber(0..) */
{
//    DSTATUS stat;
    if(drv)
        return STA_NOINIT;
    else
        return (SPIFLASH_disk_initialize() ? STA_NOINIT : 0);

/*
#if 0
    switch(drv)
    {
        case ATA :
            result = ATA_disk_initialize();
            // translate the reslut code here
   
            return stat;
   
        case MMC :
            result = MMC_disk_initialize();
            // translate the reslut code here
   
            return stat;
   
        case USB :
            result = USB_disk_initialize();
            // translate the reslut code here
   
            return stat;
    }
    return STA_NOINIT;
#endif
*/
}



/*-----------------------------------------------------------------------*/
/* Return Disk Status                                                    */

DSTATUS disk_status(BYTE drv)            /* Physical drive nmuber(0..) */
{
    return 0;
   
#if 0
    DSTATUS stat;
    int result;

    switch(drv) {
    case ATA :
        result = ATA_disk_status();
        // translate the reslut code here

        return stat;

    case MMC :
        result = MMC_disk_status();
        // translate the reslut code here

        return stat;

    case USB :
        result = USB_disk_status();
        // translate the reslut code here

        return stat;
    }
    return STA_NOINIT;
#endif
}



/*-----------------------------------------------------------------------*/
/* Read Sector(s)                                                        */

DRESULT disk_read(
    BYTE drv,        /* Physical drive nmuber(0..) */
    BYTE *buff,        /* Data buffer to store read data */
    DWORD sector,    /* Sector address(LBA) */
    BYTE count        /* Number of sectors to read(1..255) */
)
{   
    int i;
    for(i=0;i<count;i++)
    {
        W25X_Read_Sector(sector,buff);
        sector ++;
        buff += FLASH_SECTOR_SIZE;
    }
   
    return RES_OK;
}



/*-----------------------------------------------------------------------*/
/* Write Sector(s)                                                       */

#if _READONLY == 0
DRESULT disk_write(
    BYTE drv,            /* Physical drive nmuber(0..) */
    const BYTE *buff,    /* Data to be written */
    DWORD sector,        /* Sector address(LBA) */
    BYTE count            /* Number of sectors to write(1..255) */
)
{
    int i;
    for(i=0;i<count;i++)
    {    W25X_Erase_Sector(sector);
   
        W25X_Write_Sector(sector,(u8*)buff);
        sector ++;
        buff += FLASH_SECTOR_SIZE;
    }
   
    return RES_OK;   
}
#endif /* _READONLY */




/************************************************************************************
CTRL_SYNC            Make sure that the disk drive has finished pending write process.
                    When the disk I/O module has a write back cache, flush the dirty sector immediately.
                    This command is not used in read-only configuration.
GET_SECTOR_SIZE        Returns sector size of the drive into the WORD variable pointed by Buffer.
                    This command is not used in fixed sector size configuration, _MAX_SS is 512.
GET_SECTOR_COUNT    Returns number of available sectors on the drive into the DWORD variable pointed by Buffer.
                    This command is used by only f_mkfs function to determine the volume size to be created.
GET_BLOCK_SIZE        Returns erase block size of the flash memory in unit of sector into the DWORD variable pointed by Buffer.
                    The allowable value is 1 to 32768 in power of 2.
                    Return 1 if the erase block size is unknown or disk devices.
                    This command is used by only f_mkfs function and it attempts to align data area to the erase block boundary.
CTRL_ERASE_SECTOR    Erases a part of the flash memory specified by a DWORD array {<start sector>, <end sector>} pointed by Buffer.
                    When this feature is not supported or not a flash memory media, this command has no effect.
                    The FatFs does not check the result code and the file function is not affected even if the sectors are not erased well.
                    This command is called on removing a cluster chain when _USE_ERASE is 1.
************************************************************************************/
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 nFrom,nTo;
    int i;
    char *buf = buff;
   
    switch(ctrl)
    {
        case CTRL_SYNC :
            break;
        
        //扇区擦除
        case CTRL_ERASE_SECTOR:
            nFrom = *((DWORD*)buff);
            nTo = *(((DWORD*)buff)+1);
            for(i=nFrom;i<=nTo;i++)
                W25X_Erase_Sector(i);
               
            break;
        
        case GET_BLOCK_SIZE:
            //*(DWORD*)buff = 4096*16;
            buf[1] = (u8)(FLASH_BLOCK_SIZE & 0xFF);
            buf[0] = (u8)(FLASH_BLOCK_SIZE >> 8);
            break;
   
   
        case GET_SECTOR_SIZE:
            //*(DWORD*)buff = FLASH_SECTOR_SIZE;
            buf[0] = (u8)(FLASH_SECTOR_SIZE & 0xFF);
            buf[1] = (u8)(FLASH_SECTOR_SIZE >> 8);
            break;
        
        case GET_SECTOR_COUNT:
            //*(DWORD*)buff = FLASH_SECTOR_COUNT;
            buf[0] = (u8)(FLASH_SECTOR_COUNT & 0xFF);
            buf[1] = (u8)(FLASH_SECTOR_COUNT >> 8);
            break;
            
        default:
            res = RES_PARERR;
            break;
    }
    return res;
}

DWORD get_fattime(void)
{
/*
t = Time_GetCalendarTime();
    t.tm_year -= 1980;  //年份改为1980年起
    t.tm_mon++;          //0-11月改为1-12月
    t.tm_sec /= 2;       //将秒数改为0-29
   
    date = 0;
    date = (t.tm_year << 25) | (t.tm_mon<<21) | (t.tm_mday<<16)|\
            (t.tm_hour<<11) | (t.tm_min<<5) | (t.tm_sec);

    return date;
*/
    DWORD dt = 31<<25;
    dt += 12<<21;
    dt += 12<<16;
    dt += 12<<11;
    dt += 12<<5 + 12;
    return dt;
}

出0入0汤圆

发表于 2011-2-22 13:19:15 | 显示全部楼层
yaffs 适合nand

出0入0汤圆

发表于 2011-2-22 13:36:30 | 显示全部楼层
楼主把完整的代码打包发上来吧。。。。

出50入0汤圆

发表于 2011-2-22 14:54:43 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-2-22 15:49:51 | 显示全部楼层
楼主哪里去了呢,楼主呀您的DiskIO.c中的一些定义没有标注,可否提供一下呢。

出0入0汤圆

发表于 2011-2-22 15:54:53 | 显示全部楼层
我这有两个问题,请高手解惑
1、在mmc或sd卡的例程中  GET_SECTOR_SIZE = 512,在主函数main中,对文件会使用一个缓冲区Buff【512】,如果这个缓冲区小于GET_SECTOR_SIZE可以吗??
2、假设mcu的ram 小于1024,在某Flash上使用FatFS,闪存的扇区为4096,那么能成功使用吗?

谢谢

出0入0汤圆

发表于 2011-2-22 16:31:06 | 显示全部楼层
只有当_MAX_SS不为512时才会使用GET_SECTOR_SIZE命令,此时fs的mount里面有一个_MAX_SS大小的缓冲区.
然后如果不启用_FS_TINY的话,file对象里面还会再建立一个:
BYTE        buf[_MAX_SS];        /* File data read/write buffer */

这样,至少需要        _MAX_SS X 2 字节的RAM.

1024字节还是别用FS了.

出0入22汤圆

发表于 2011-2-22 17:23:08 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-2-22 21:33:45 | 显示全部楼层
楼主有空将完整代码打包发上来吧~~~

出0入0汤圆

发表于 2011-2-23 10:28:44 | 显示全部楼层
楼主失踪了 吗???

出0入0汤圆

发表于 2011-2-23 11:10:45 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-24 09:12:24 | 显示全部楼层
Flash 使用需要FTL,上传一片相关论文
点击此处下载 ourdev_618129SO5YR4.pdf(文件大小:2.56M) (原文件名:基于NAND+Flash的嵌入式文件系统的设计与实现.pdf)

出0入0汤圆

 楼主| 发表于 2011-2-24 09:34:05 | 显示全部楼层
代码来了。

点击此处下载 ourdev_618136HT0E9N.rar(文件大小:45K) (原文件名:src.rar)

出0入0汤圆

发表于 2011-2-24 09:55:05 | 显示全部楼层
感谢楼主

出0入0汤圆

发表于 2011-2-24 15:29:56 | 显示全部楼层
不错 thanks

出0入0汤圆

发表于 2011-2-24 16:00:37 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-6 20:20:47 | 显示全部楼层
回复【17楼】luzhengmao
yaffs 适合nand
-----------------------------------------------------------------------

I'm seeking NAND operating code.I'll try it.

出0入0汤圆

发表于 2011-5-6 20:27:18 | 显示全部楼层
回复【27楼】jackielau 九天
flash 使用需要ftl,上传一片相关论文
点击此处下载  (原文件名:基于nand+flash的嵌入式文件系统的设计与实现.pdf)
-----------------------------------------------------------------------

this is empty.

出0入0汤圆

发表于 2011-5-6 20:39:32 | 显示全部楼层
mark spi flash file system

出0入0汤圆

发表于 2011-5-6 20:41:59 | 显示全部楼层
FLASH用FAT干嘛,唯一的好处就是你写程序的时候,“感觉”用的方便,实际上,效率低,而且占用不必要的资源~
因为FAT不是为FLASH设计的,也没有考虑到FLASH的特点

出0入0汤圆

发表于 2011-5-11 01:36:37 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-11 06:50:50 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-5-11 11:51:22 | 显示全部楼层
标记下吧

出0入0汤圆

发表于 2011-5-12 14:48:13 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-12 22:19:44 | 显示全部楼层
来学习

出0入0汤圆

发表于 2011-5-12 22:27:30 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-5-13 08:42:39 | 显示全部楼层
老板,上工程啊,怎么用啊,苦苦找寻了好长时间,终于给找到你了。。。。。

出0入0汤圆

发表于 2011-5-13 09:01:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-13 09:10:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-3 20:43:58 | 显示全部楼层
标记

出0入4汤圆

发表于 2011-6-12 00:11:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-15 16:19:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-15 16:27:42 | 显示全部楼层
mark,

出0入0汤圆

发表于 2011-6-28 20:04:39 | 显示全部楼层
mark!~

出0入0汤圆

发表于 2011-7-25 15:50:50 | 显示全部楼层
mark spi flash file system

出0入0汤圆

发表于 2011-11-6 15:08:06 | 显示全部楼层
回复【楼主位】root_007
-----------------------------------------------------------------------

mark~~ %>_<%

出0入0汤圆

发表于 2011-11-7 16:19:20 | 显示全部楼层
移植到自己的板子上,确实可用,感谢分享!

出0入0汤圆

发表于 2012-1-8 12:09:01 | 显示全部楼层
记号

出0入0汤圆

发表于 2012-1-8 13:44:57 | 显示全部楼层
马克思4096flash

出0入0汤圆

发表于 2012-1-8 14:49:58 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-20 23:14:19 | 显示全部楼层
标记

出0入0汤圆

发表于 2012-1-20 23:14:37 | 显示全部楼层
标记

出0入0汤圆

发表于 2012-1-21 10:06:12 | 显示全部楼层
mark

出0入30汤圆

发表于 2012-2-5 16:46:17 | 显示全部楼层
MARK

出0入0汤圆

发表于 2012-2-7 16:10:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-7 19:40:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-7 21:02:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-8 09:16:49 | 显示全部楼层
谢谢

出0入0汤圆

发表于 2012-2-22 20:17:42 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-3-28 15:22:03 | 显示全部楼层
我用的是为W25X16 怎么就不行呢?

出50入0汤圆

发表于 2012-3-28 15:33:43 | 显示全部楼层
标记一下,以后有用

出0入0汤圆

发表于 2012-3-28 15:39:51 | 显示全部楼层
非常感谢楼主的代码。学习了。

出0入0汤圆

发表于 2012-4-13 00:01:13 | 显示全部楼层
非常感谢楼组的无私

出0入0汤圆

发表于 2012-7-2 14:46:22 | 显示全部楼层
谢谢楼主分享, mark

出0入0汤圆

发表于 2012-7-7 16:36:00 | 显示全部楼层
感谢楼主,同样在做FatFS,有很多未知,感谢楼主的帮助

出0入0汤圆

发表于 2013-7-22 08:47:10 | 显示全部楼层
root_007 发表于 2011-2-22 12:51
搞定,犯下一个低级错误,写入数据前必须先擦除。
diskio.c的disk_write函数中,加入擦除指令就行了。

你好,我现在也使用w25xx移植fatfs,扇区设置成4096,格式化能通过,但是读写返回FR_NO_FILESYSTEM,写函数也添加了擦除扇区,但是还是不行,请问会是哪部分有问题?

出0入0汤圆

发表于 2013-12-29 22:37:33 | 显示全部楼层
mark!!,感谢分享,用的是SST25VF016B,也尝试移植下

出0入0汤圆

发表于 2014-3-27 16:12:58 | 显示全部楼层
root_007 发表于 2011-2-24 09:34
代码来了。

点击此处下载 ourdev_618136HT0E9N.rar(文件大小:45K) (原文件名:src.rar) ...

楼主你好,我移植的是w25x128的,已经成功,但是有个问题,就是每存4k的大小要占32k空间,我存的文件是32k,竟然占用了256k的空间。你的有这个问题不?我的移植案例:http://www.amobbs.com/thread-5573153-1-1.html

出0入0汤圆

发表于 2014-3-27 16:40:42 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2014-3-27 16:51:40 | 显示全部楼层
关注一下。

出0入0汤圆

发表于 2014-12-25 02:51:20 | 显示全部楼层
感谢楼主的经验分享

出0入0汤圆

发表于 2015-3-30 18:02:03 | 显示全部楼层
挖坟,最近搞这个片子,准备上RT-FlashFS

出0入0汤圆

发表于 2015-8-7 16:10:36 | 显示全部楼层
楼主,我的跟你一样,还是出现FR_NO_FILESYSTEM,怎么回事呢

出0入0汤圆

发表于 2015-9-24 08:54:25 | 显示全部楼层
root_007 发表于 2011-2-22 12:51
搞定,犯下一个低级错误,写入数据前必须先擦除。
diskio.c的disk_write函数中,加入擦除指令就行了。

45db,我记着应该是带自擦除的,我用4096也成功了,正常读写都没问题,但是用WINHEX打开U盘的时候提示错误,用一些恢复软件也无法恢复丢失数据,我发打开磁盘楼主遇到过吗。(易我数据恢复)

出0入0汤圆

发表于 2015-9-24 15:51:13 | 显示全部楼层
我的问题已经解决,winhex出问题是我软件的问题,至于恢复软件不能用,是他软件做的不好,我大概下了有10个软件,最后仅有两个能有,都是外国的。。。,推荐哦,finaldata3.0.exe,最主要推荐,其次,recuva.exe,第一个目录也能恢复出来。

出0入0汤圆

发表于 2015-10-21 11:52:25 | 显示全部楼层
前来学习 总是提示no filesystem

出0入0汤圆

发表于 2016-5-6 23:51:28 | 显示全部楼层
不错,正想搞FATFS

出0入0汤圆

发表于 2019-4-23 08:33:03 | 显示全部楼层
标记一下,调试也是格式化不成功。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 23:54

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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