liubinghui 发表于 2012-5-21 16:02:16

LPC1768 GCGUI SD FATFS

在论坛里学了很多东西,回报一下将LPC1768开发板上的UCGUI SD FATFS 给正在学习的朋友一点帮助。

sanliu85 发表于 2012-5-21 16:36:27

下载了,谢谢楼主分享

WWC 发表于 2012-5-21 20:22:55

谢谢分享~~~

windboy 发表于 2012-5-22 10:24:37



sanliuyaoling 发表于 2012-5-24 19:43:04

谢谢楼主分享

zhengoogle 发表于 2012-5-25 00:12:58

谢谢楼主分享

汪长鸿 发表于 2012-6-1 18:26:15

想请教楼主一个关于fatfs的问题,我现在的片子是lpc1850,自带sd控制器,代码已经移植好,f_mount正常返回0,然后我调用f_open(),返回1.单步跟进去,发现在f_open()函数中的chk_mounted()函数中有这样几句话:
        /* Search FAT partition on the drive. Supports only generic partitionings, FDISK and SFD. */
        fmt = check_fs(fs, bsect = 0);                /* Load sector 0 and check if it is an FAT-VBR (in SFD) */
        if (LD2PT(vol) && !fmt) fmt = 1;        /* Force non-SFD if the volume is forced partition */
        if (fmt == 1) {                                /* Not an FAT-VBR, the physical drive can be partitioned */
                /* Check the partition listed in the partition table */
                pi = LD2PT(vol);
                if (pi) pi--;
                tbl = &fs->win;/* Partition table */
                if (tbl) {                                                /* Is the partition existing? */
                        bsect = LD_DWORD(&tbl);                /* Partition offset in LBA */
                        fmt = check_fs(fs, bsect);                /* Check the partition */
                }
        }
        if (fmt == 3) return FR_DISK_ERR;
        if (fmt) return FR_NO_FILESYSTEM;
第一句话返回1,然后进入下面的if,执行fmt = check_fs(fs, bsect);bsect此时等于243,然后进入这个函数,执行if (disk_read(fs->drv, fs->win, sect, 1) != RES_OK),再进入,执行disk_read(这里的sd卡驱动我是按照裸机下的sd卡读写代码加进来的),然后进入执行if (sdmmc_read_blocks((void *) buff, sector, count) != 0),这个函数内有句话:    if ((end_block < start_block) || (start_block < 0) || (end_block > g_card_info->blocknr)) return 0;        此时参数end_block=1,start_block=243,很显然返回0,那么依次网上类推到最开始的地方,fmt = check_fs(fs, bsect);这个函数返回的就是1,然后f_open就返回FR_NO_FILESYSTEM。我非常郁闷,这是sd自带的驱动程序。而且我也在1788上测试这个代码,fmt正常返回0。不知道这个问题怎么解决?麻烦楼主指点一二!谢谢!

汪长鸿 发表于 2012-6-7 14:26:01

上次发的问题现在找到关键点了,但是没有解决,贴上来大家集思广益一下啊
fmt = check_fs(fs, bsect = 0);                /* Check sector 0 if it is a VBR */
      //fmt = check_fs(fs, 243);
        if (fmt == 1) {                                                /* Not an FAT-VBR, the disk may be partitioned */
                /* Check the partition listed in top of the partition table */
                tbl = &fs->win;        /* Partition table */
                if (tbl) {                                                                        /* Is the partition existing? */
                        bsect = LD_DWORD(&tbl);                                        /* Partition offset in LBA */
                        fmt = check_fs(fs, bsect);                                        /* Check the partition */
                        //fmt = check_fs(fs, 0);
                }
        }
第一句话fmt = check_fs(fs, bsect = 0);是去读sd卡的MBR,即第0扇区,数据正常,且根据里面的数据经过bsect = LD_DWORD(&tbl);这句话计算正确得到启动扇区的位置(243),然后fmt = check_fs(fs, bsect);这句话就是去读这个启动扇区内的数据,这里面的数据
非常重要,就像我们电脑的C盘,但是返回来全部是0,导致fatfs失败。然后同一张卡在另一块板子的代码上测试正常,里面的数据也正常。
那么可以说明一点的是,既然可以读0扇区数据正常那么说明sd的底层读函数是对的,那么为什么读不出来第243扇区的数据?
同事怀疑是sd卡初始化中设置成了只能读一次,那么我一开始就读第243扇区,也是返回全0.这就郁闷了。在另一块板子的代码上测试,一开始读243扇区的数据是正常的。
最后,我将sd卡格式化,用winhex查看其扇区内容,发现0扇区和243扇区的数据没变。
以上是我调试的总结以及遇到的问题,希望楼主能耐心看看,谢谢!

mugangqin 发表于 2012-6-17 14:31:04

为什么下载完了,解压提示说,还缺少压缩包?能不能传个完整的啊?

Excellence 发表于 2012-6-19 08:19:22

谢谢分享。。。。。。。

liurm0 发表于 2012-6-19 11:58:41

感谢分享

lpc1788 发表于 2012-6-19 17:40:18

不支持你都不行呀,楼主好样的。

cy_ygs 发表于 2012-6-20 18:50:15

cool,mark!

sea_star 发表于 2012-6-24 11:48:54

mark, mark

sbgavin 发表于 2012-6-26 15:07:04

{:lol:}谢谢分享

hmsfeng 发表于 2012-6-26 15:21:50

下载了,谢谢楼主分享

enlaihe 发表于 2012-7-11 21:18:12

解压不了

pchf005 发表于 2012-7-12 12:01:19

{:lol:}{:lol:}{:lol:}

panshaoming 发表于 2012-7-21 21:35:26

像楼主学习

panshaoming 发表于 2012-7-22 07:37:22

楼主,你好,请教个问题,我用SSp1读写SD卡什么不稳定啊

fengtao612 发表于 2012-8-9 22:42:26

mark   

guokeqin 发表于 2012-9-28 09:32:02

学习中多谢

xuchess 发表于 2012-11-1 22:57:37

谢谢,下载了,抽时间试一下!

airob 发表于 2012-11-19 15:38:18

汪长鸿 发表于 2012-6-1 18:26 static/image/common/back.gif
想请教楼主一个关于fatfs的问题,我现在的片子是lpc1850,自带sd控制器,代码已经移植好,f_mount正常返回0 ...

我在调试fatfs时也出现了相同的问题,请问您这个问题解决了么?怎么解决的啊?谢谢!

汪长鸿 发表于 2012-11-19 15:57:32

airob 发表于 2012-11-19 15:38 static/image/common/back.gif
我在调试fatfs时也出现了相同的问题,请问您这个问题解决了么?怎么解决的啊?谢谢! ...

早就解决了,是disk_initialize()函数没写好,返回值写的不对,另外就是换了张32g的卡就好了。一切正常。

dengfeng5357 发表于 2015-1-17 17:55:06

谢谢您的分享!感谢。

shijy1977 发表于 2015-5-15 11:07:02

谢谢,参考一下

videofun 发表于 2015-6-2 03:41:35

下载了,谢谢楼主分享

zsfddd 发表于 2015-7-4 20:02:06

谢谢分享

weiwei4 发表于 2015-7-5 18:07:30

谢谢楼主分享

小Z 发表于 2016-6-12 16:26:06

这个例程支持大容量的SD卡吗?

B.O.B 发表于 2016-12-8 21:58:43


感谢分享,正在学习!

龙井茶 发表于 2018-11-2 08:50:47

感谢分享,正在学习!

jdlee 发表于 2019-8-8 10:43:47

谢谢分享   
页: [1]
查看完整版本: LPC1768 GCGUI SD FATFS