OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6327|回复: 4

关于移植FatFs的点问题。。。求助大神

[复制链接]

7

主题

33

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2012-7-11
在线时间
0 小时
发表于 2012-7-28 09:07:28 | 显示全部楼层 |阅读模式

在一直FatFs的时候,开始好多重定义问题,后来注释了一些头文件才好了。。

后面测试的时候,可以在卡里面新建文件,可以新建多级目录。可是无法往新建的txt文件里面写数据是怎么回事?

SD卡我是调用之前用的,应该SD的驱动程序没有问题吧?是不是要修改哪里?

下面是diskio.c里面的驱动程序,求助大神帮忙看下哪里有问题没?

DSTATUS disk_initialize (
 BYTE drv    /* Physical drive nmuber (0..) */
)
{
    u8 state;

    state = SD_Init();
    if(state == 99)
    {
        return STA_NODISK;   //NO CSRD
    }
    else if(state == 1)
    {
        return STA_NOINIT;   //TIME OUT
    }
    else if(state == 0)
    {
        return STA_SUCCESS;  // SUCCESS
    }
 else return STA_NOINIT;  // Other Error
}





DSTATUS disk_status (
 BYTE drv  /* Physical drive nmuber (0..) */
)
{
    return 0;
}






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) */
)
{
     u8 res=0;    
 
    if(count==1)            //1个sector的读操作     
    {                                               
        res = SD_ReadSingleBlock(sector, buff);     
    }                                               
    else                    //多个sector的读操作    
    {                                               
        res = SD_ReadMultiBlock(sector, buff, count);
    }                                               
 /*
    do                          
    {                                         
        if(SD_ReadSingleBlock(sector, buff)!=0)
        {                                     
            res = 1;                          
            break;                            
        }                                     
        buff+=512;                            
    }while(--count);                                        
    */
    //处理返回值,将SPI_SD_driver.c的返回值转成ff.c的返回值
    if(res == 0x00)
    {
        return RES_OK;
    }
    else
    {
        return RES_ERROR;
    }
}







#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) */
)
{
     u8 res;
    // 读写操作
    if(count == 1)
    {
        res = SD_WriteSingleBlock(sector, buff);
    }
    else
    {
        res = SD_WriteMultiBlock(sector, buff, count);
    }
    // 返回值转换
    if(res == 0)
    {
        return RES_OK;
    }
    else
    {
        return RES_ERROR;
    }
}
#endif /* _READONLY */







DRESULT disk_ioctl (
 BYTE drv,  /* Physical drive nmuber (0..) */
 BYTE ctrl,  /* Control code */
 void *buff  /* Buffer to send/receive control data */
)
{
    DRESULT res;


    if (drv)
    {   
        return RES_PARERR;  //仅支持单磁盘操作,否则返回参数错误
    }
   
    //FATFS目前版本仅需处理CTRL_SYNC,GET_SECTOR_COUNT,GET_BLOCK_SIZ三个命令
    switch(ctrl)
    {
    case CTRL_SYNC:
      res = RES_OK;
        break;
       
    case GET_BLOCK_SIZE:
        *(WORD*)buff = 512;
        res = RES_OK;
        break;

    case GET_SECTOR_COUNT:
        *(DWORD*)buff = SD_GetCapacity();
        res = RES_OK;
        break;
    default:
        res = RES_PARERR;
        break;
    }

    return res;
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

33

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2012-7-11
在线时间
0 小时
 楼主| 发表于 2012-7-28 09:08:33 | 显示全部楼层
f_write()这个函数无法返回0啊。。。大概会是哪里出了问题??
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-7-28 10:11:47 | 显示全部楼层
回复【2楼】liash:
---------------------------------
返回值是什么?
根据返回值,查看错误类型,比较容易解决.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

33

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2012-7-11
在线时间
0 小时
 楼主| 发表于 2012-7-28 11:39:37 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
TAT 哭死。。。程序修改过后连文件和文件夹都不能建立了。。。忘记备份了啊。。。。

f_open的返回值是 0x06        /* (6) The path name format is invalid */
f_write的返回值是 0x09        /* (9) The file/directory object is invalid */
f_mkdir的返回值是 0x08       /* (8) Acces denied due to prohibited access */

还好后面根据这返回值查到是f_open()的参数没有设置好~~终于好了
灰常感谢原子哥的指点~
回复 支持 反对

使用道具 举报

2

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-8-13
在线时间
13 小时
发表于 2014-8-13 17:54:17 | 显示全部楼层
回复【4楼】liash:
---------------------------------
大神,怎么弄出来的啊,我最近也遇到了这个问题了。不知道改哪里啊,求帮忙一下。。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-4 02:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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