搜索
bottom↓
回复: 33

LPC1768 GCGUI SD FATFS

[复制链接]

出0入0汤圆

发表于 2012-5-21 16:02:16 | 显示全部楼层 |阅读模式
在论坛里学了很多东西,回报一下将LPC1768开发板上的UCGUI SD FATFS 给正在学习的朋友一点帮助。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

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

出0入0汤圆

发表于 2012-5-21 16:36:27 | 显示全部楼层
下载了,谢谢楼主分享

出0入0汤圆

发表于 2012-5-21 20:22:55 | 显示全部楼层
谢谢分享~~~

出0入0汤圆

发表于 2012-5-22 10:24:37 | 显示全部楼层


出0入0汤圆

发表于 2012-5-24 19:43:04 | 显示全部楼层
谢谢楼主分享

出0入0汤圆

发表于 2012-5-25 00:12:58 | 显示全部楼层
谢谢楼主分享

出0入0汤圆

发表于 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[MBR_Table + pi * SZ_PTE];/* Partition table */
                if (tbl[4]) {                                                /* Is the partition existing? */
                        bsect = LD_DWORD(&tbl[8]);                /* 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。不知道这个问题怎么解决?麻烦楼主指点一二!谢谢!

出0入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[MBR_Table + LD2PT(vol) * 16];        /* Partition table */
                if (tbl[4]) {                                                                        /* Is the partition existing? */
                        bsect = LD_DWORD(&tbl[8]);                                        /* 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[8]);这句话计算正确得到启动扇区的位置(243),然后fmt = check_fs(fs, bsect);这句话就是去读这个启动扇区内的数据,这里面的数据
非常重要,就像我们电脑的C盘,但是返回来全部是0,导致fatfs失败。然后同一张卡在另一块板子的代码上测试正常,里面的数据也正常。
那么可以说明一点的是,既然可以读0扇区数据正常那么说明sd的底层读函数是对的,那么为什么读不出来第243扇区的数据?
同事怀疑是sd卡初始化中设置成了只能读一次,那么我一开始就读第243扇区,也是返回全0.这就郁闷了。在另一块板子的代码上测试,一开始读243扇区的数据是正常的。
最后,我将sd卡格式化,用winhex查看其扇区内容,发现0扇区和243扇区的数据没变。
以上是我调试的总结以及遇到的问题,希望楼主能耐心看看,谢谢!

出0入0汤圆

发表于 2012-6-17 14:31:04 | 显示全部楼层
为什么下载完了,解压提示说,还缺少压缩包?能不能传个完整的啊?

出0入0汤圆

发表于 2012-6-19 08:19:22 | 显示全部楼层
谢谢分享。。。。。。。

出0入0汤圆

发表于 2012-6-19 11:58:41 | 显示全部楼层
感谢分享

出0入0汤圆

发表于 2012-6-19 17:40:18 | 显示全部楼层
不支持你都不行呀,楼主好样的。

出0入0汤圆

发表于 2012-6-20 18:50:15 | 显示全部楼层
cool,mark!

出0入0汤圆

发表于 2012-6-24 11:48:54 | 显示全部楼层
mark, mark

出0入0汤圆

发表于 2012-6-26 15:07:04 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2012-6-26 15:21:50 | 显示全部楼层
下载了,谢谢楼主分享

出0入0汤圆

发表于 2012-7-11 21:18:12 | 显示全部楼层
解压不了

出0入0汤圆

发表于 2012-7-12 12:01:19 | 显示全部楼层

出0入0汤圆

发表于 2012-7-21 21:35:26 | 显示全部楼层
像楼主学习

出0入0汤圆

发表于 2012-7-22 07:37:22 | 显示全部楼层
楼主,你好,请教个问题,我用SSp1读写SD卡什么不稳定啊

出0入0汤圆

发表于 2012-8-9 22:42:26 | 显示全部楼层
mark   

出0入0汤圆

发表于 2012-9-28 09:32:02 | 显示全部楼层
学习中多谢

出0入0汤圆

发表于 2012-11-1 22:57:37 | 显示全部楼层
谢谢,下载了,抽时间试一下!

出0入0汤圆

发表于 2012-11-19 15:38:18 | 显示全部楼层
汪长鸿 发表于 2012-6-1 18:26
想请教楼主一个关于fatfs的问题,我现在的片子是lpc1850,自带sd控制器,代码已经移植好,f_mount正常返回0 ...

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

出0入0汤圆

发表于 2012-11-19 15:57:32 | 显示全部楼层
airob 发表于 2012-11-19 15:38
我在调试fatfs时也出现了相同的问题,请问您这个问题解决了么?怎么解决的啊?谢谢! ...

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

出0入0汤圆

发表于 2015-1-17 17:55:06 | 显示全部楼层
谢谢您的分享!感谢。

出0入0汤圆

发表于 2015-5-15 11:07:02 | 显示全部楼层
谢谢,参考一下

出0入0汤圆

发表于 2015-6-2 03:41:35 | 显示全部楼层
下载了,谢谢楼主分享

出0入0汤圆

发表于 2015-7-4 20:02:06 | 显示全部楼层
谢谢分享

出0入13汤圆

发表于 2015-7-5 18:07:30 来自手机 | 显示全部楼层
谢谢楼主分享

出0入0汤圆

发表于 2016-6-12 16:26:06 | 显示全部楼层
这个例程支持大容量的SD卡吗?

出0入0汤圆

发表于 2016-12-8 21:58:43 | 显示全部楼层

感谢分享,正在学习!

出0入0汤圆

发表于 2018-11-2 08:50:47 | 显示全部楼层
感谢分享,正在学习!

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-3-29 22:16

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

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