主题 : 求助啊,SD+FATFS,做过的大虾帮帮忙 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 33255
精华: 0
发帖: 13
金钱: 85 两
威望: 17 点
综合积分: 26 分
注册时间: 2010-11-28
最后登录: 2011-05-21
楼主  发表于: 2011-05-18 12:56

 求助啊,SD+FATFS,做过的大虾帮帮忙

我发现程序第一次在f_open函数-->res = follow_path(&dj, path)中出错,返回FR_NO_FILE
跟踪follow_path(&dj, path)-->res = dir_find(dj);    错是在这里出的

在dir_find中的
do
{
......................
}
while(res == FR_OK);
第一次循环是对的
但再次循环时,也就是第二次do时c = dir[DIR_Name];
这里C = 0
在ff.h中
#define        DIR_Name                        0
查dir[DIR_Name]地址为0X33FF3604
其数据为
0x33ff3604       00 8A 07 00
不知道是哪里设的不对了,大虾们帮帮忙吧,谢谢
级别: 新手上路
UID: 19399
精华: 0
发帖: 2
金钱: 10 两
威望: 2 点
综合积分: 4 分
注册时间: 2010-04-19
最后登录: 2011-07-01
1楼  发表于: 2011-06-22 16:32
我也遇到过这个问题,
DRESULT disk_read (
    U8 drv,        /* Physical drive nmuber (0..) */
    U8 *buff,        /* Data buffer to store read data */
    U32 sector,    /* Sector address (LBA) */
    U8 count        /* Number of sectors to read (1..255) */
)
{

    U16    i;

    if (drv || !count)
    {
        return RES_PARERR;  //仅支持单磁盘操作,count不能等于0,否则返回参数错误
    }

    if(SD_Card_Ready)//SD卡没初始化成功
    {
       return RES_NOTRDY;
    }



   //sector *= 512;        /* Convert to byte address if needed  注意!!!这里如果这里乘了512,  函数rcvr_datablock(buff,sector, 512))里就别乘了,否则读0 sector是对的,非0sector计算的地址就错了
                               */
    rsec = sector;
    if (count == 1) /* Single block read */
    {
        //Uart_Printf("SD Single block read--->\n");

                if(rcvr_datablock(buff,sector, 512))/* READ_SINGLE_BLOCK */
                        count = 0;
        }
        else /* Multiple block read */
        {
            //Uart_Printf("SD Multiple block read--->\n");

            if(rcvr_datablock(buff,sector, count*512))/* READ_SINGLE_BLOCK */
                        count = 0;
        }



    for(i=0;i<512;i++)
    {
        xbuf = buff;
    }


   return count ? RES_ERROR : RES_OK;

}