OpenEdv-开源电子网

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

W25Q64 移植Fatfs 请教

[复制链接]

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2012-12-21
在线时间
23 小时
发表于 2013-7-21 14:05:19 | 显示全部楼层 |阅读模式
在移植Fatfs时,提示FR_NO_FILESYSTEM错误,网上有说是底层驱动问题导致的,请问我底层驱动有什么问题(参考战舰)

/* Definitions of physical drive number for each media */
#define EX_FLASH 0 //外部flash,卷标为1

#define FLASH_SECTOR_SIZE 4096
#define FLASH_BLOCK_SIZE 16     //每个BLOCK有16个扇区
//对于W25Q64 
//前6M字节给fatfs用,6M字节后~6M+500K给用户用,6M+500K以后,用于存放字库,字库占用1.5M.    
SHORT FLASH_SECTOR_COUNT = 512*6;//6M字节,默认为W25Q64

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..128) */
)
{
// translate the arguments here
for(;count>0;count--)
{
SPI_Flash_Read((BYTE*)buff,sector*FLASH_SECTOR_SIZE,FLASH_SECTOR_SIZE);
sector++;
buff += FLASH_SECTOR_SIZE;
}

// translate the reslut code here

return RES_OK;
}

#if _USE_WRITE
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..128) */
)
{

// translate the arguments here
for(;count>0;count--)
{    
SPI_Flash_Write((BYTE*)buff,sector*FLASH_SECTOR_SIZE,FLASH_SECTOR_SIZE);
sector++;
buff += FLASH_SECTOR_SIZE;
}

// translate the reslut code here

return RES_OK;
}
#endif

我测试单独的读写flash时是可以的,移植fatfs后一直不成功


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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-7-21 14:24:41 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2012-12-21
在线时间
23 小时
 楼主| 发表于 2013-7-21 14:30:23 | 显示全部楼层
disk_initialize(0);  //init the w25q64 flash 
/* Register work area for each volume (Always succeeds regardless of disk status) */
if(f_mount(0, &fs) == FR_INT_ERR) 
{
        rt_kprintf("f_mount error\r\n");
    }
if(f_mkfs(0,0,4096) == FR_DISK_ERR)  //格式化exti flash
{
        rt_kprintf("f_mkfs error\r\n");
    }
    if(f_mkdir ("0://test1"))     //0:flash,卷标为0
rt_kprintf("f_mkdir error\r\n");
   格式化后使用mkdir建立目录时,就回返回FR_NO_FILESYSTEM
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-7-21 14:34:50 | 显示全部楼层
那得检查下你的diskio.c的代码了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2012-12-21
在线时间
23 小时
 楼主| 发表于 2013-7-21 15:08:35 | 显示全部楼层
diskio.c中涉及到w25q64的读写,disk_write和disk_read应该不会有问题的
回复 支持 反对

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2012-12-21
在线时间
23 小时
 楼主| 发表于 2013-7-21 17:20:49 | 显示全部楼层
原子哥,您再diskio.c中定义w25q64块大小时,为什么是8呢?#define FLASH_BLOCK_SIZE   8     //每个BLOCK有8个扇区
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-7-21 20:12:30 | 显示全部楼层
因为25q64的扇区是4K字节,fatfs分区是512字节每扇区,真正的扇区是fatfs分区的8倍关系.所以我这里设置为8 .
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2012-12-21
在线时间
23 小时
 楼主| 发表于 2013-7-21 21:27:09 | 显示全部楼层
原子哥,战舰有spiflash移植fatfs的例子吗?包括格式化,打开、关闭文件等等
回复 支持 反对

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2012-12-21
在线时间
23 小时
 楼主| 发表于 2013-7-21 21:36:06 | 显示全部楼层
回复【7楼】正点原子:

因为25q64的扇区是4K字节,fatfs分区是512字节每扇区,真正的扇区是fatfs分区的8倍关系.所以我这里设置为8 .

---------------------------------
fatfs扇区不是可以设置成#define _MAX_SS 4096吗?
那fatfs扇区就变成了4K,block大小又该如何设置呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-7-21 23:49:24 | 显示全部楼层
回复【9楼】很胖的瘦子:
---------------------------------
那你要4K字节内存,而且还和sd卡不共用。。。SD卡一般都是512的,你搞个4K,sd卡就不好做了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2013-1-22
在线时间
1 小时
发表于 2014-9-4 17:52:32 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
BLOCK按照W25Q64的每个BLOCK有16个扇区,移植过去,程序会跑到HardFault_Handler
回复 支持 反对

使用道具 举报

6

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2013-1-22
在线时间
1 小时
发表于 2014-9-4 17:53:17 | 显示全部楼层
回复【11楼】jzlis0202:
---------------------------------
回复【10楼】正点原子:
---------------------------------
#define EX_FLASH 0 //外部flash,卷标为0

#define FLASH_SECTOR_SIZE  4096   
//对于W25Q64 
//前6M字节给fatfs用,6M字节后~6M+500K给用户用,6M+500K以后,用于存放字库,字库占用1.5M.       
u16     FLASH_SECTOR_COUNT=256*8;//6M字节,默认为W25Q64
#define FLASH_BLOCK_SIZE   16     //每个BLOCK有8个扇区



//初始化磁盘
DSTATUS disk_initialize (
BYTE drv /* hysical drive nmuber (0..) */
)
{
u8 res=0;     
switch(drv)
{
case EX_FLASH://外部flash
SPI_Flash_Init();
if(SPI_FLASH_TYPE==W25Q64)FLASH_SECTOR_COUNT=2048;//W25Q64
  break;
default:
res=1; 
}  
if(res)return  STA_NOINIT;
else return 0; //初始化成功
}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-9-5 00:33:17 | 显示全部楼层
回复【12楼】jzlis0202:
---------------------------------
慢慢改,呵呵。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

122

帖子

0

精华

高级会员

Rank: 4

积分
638
金钱
638
注册时间
2014-6-20
在线时间
169 小时
发表于 2014-10-31 16:17:31 | 显示全部楼层
回复【9楼】很胖的瘦子:
---------------------------------
请问你的问题解决了吗?是什么原因呢,我也遇到了
回复 支持 反对

使用道具 举报

20

主题

122

帖子

0

精华

高级会员

Rank: 4

积分
638
金钱
638
注册时间
2014-6-20
在线时间
169 小时
发表于 2014-10-31 16:39:16 | 显示全部楼层
回复【6楼】很胖的瘦子:
---------------------------------
问题解决了,这个帖子看到的http://www.amobbs.com/thread-5567948-1-1.html
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-1-14
在线时间
3 小时
发表于 2016-4-21 11:58:06 | 显示全部楼层
第一次发帖,有点小激动!  原子哥,  //前6M字节给fatfs用,6M字节后~6M+500K给用户用    这句话是什么意思呢?  意思是光文件系统就需要占用6M字节吗?用6M字节的空间去维护500K的空间吗?还是 6M字节内可以实现文件的读写操作呢?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-1-14
在线时间
3 小时
发表于 2016-4-21 14:53:54 | 显示全部楼层
正点原子 发表于 2014-9-5 00:33
回复【12楼】jzlis0202:
---------------------------------
慢慢改,呵呵。

第二次发帖,还是有点小激动!  原子哥,  //前6M字节给fatfs用,6M字节后~6M+500K给用户用    这句话是什么意思呢?  意思是光文件系统就需要占用6M字节吗?用6M字节的空间去维护500K的空间吗?还是 6M字节内可以实现文件的读写操作呢?
回复 支持 反对

使用道具 举报

6

主题

315

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1669
金钱
1669
注册时间
2018-1-29
在线时间
160 小时
发表于 2018-2-1 03:23:07 | 显示全部楼层
liuyuanjie_123 发表于 2016-4-21 14:53
**** 作者被禁止或删除 内容自动屏蔽 ****

是把flash一物多用。 前6MB建立一个FATFS,剩余的2MB用来采用直接读写方式,例如保存一般情况下不需要修改的字库。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 18:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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