OpenEdv-开源电子网

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

FATFS挂载FLASH

[复制链接]

28

主题

119

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
445
金钱
445
注册时间
2013-8-10
在线时间
37 小时
发表于 2015-7-17 10:59:30 | 显示全部楼层 |阅读模式
5金钱
我外挂的W25Q64初始化什么的都好,读写也能读写,读写超过1000都是可以的。但是初始化文件系统挂载上去的时候就挂载不 了,仿真到
[mw_shl_code=c,true]BYTE check_fs ( /* 0:FAT boor sector, 1:Valid boor sector but not FAT, 2:Not a boot sector, 3isk error */ FATFS* fs, /* File system object */ DWORD sect /* Sector# (lba) to check if it is an FAT boot record or not */ ) { fs->wflag = 0; fs->winsect = 0xFFFFFFFF; /* Invaidate window */ if (move_window(fs, sect) != FR_OK) /* Load boot record */ return 3; if (LD_WORD(&fs->win[BS_55AA]) != 0xAA55) /* Check boot record signature (always placed at offset 510 even if the sector size is >512) */ return 2; if ((LD_DWORD(&fs->win[BS_FilSysType]) & 0xFFFFFF) == 0x544146) /* Check "FAT" string */ return 0; if ((LD_DWORD(&fs->win[BS_FilSysType32]) & 0xFFFFFF) == 0x544146) /* Check "FAT" string */ return 0; return 1; }[/mw_shl_code]
这里就退出来   2了,不知道为何。下面是我硬件接口的一些配置
[mw_shl_code=c,true]#define FLASH_SECTOR_SIZE 512 u16 FLASH_SECTOR_COUNT= 2048*8; //默认为W25Q64 #define FLASH_BLOCK_SIZE 8 //每个BLOCK有8个扇区 //初始化磁盘 DSTATUS disk_initialize ( BYTE pdrv /* Physical drive nmuber (0..) */ ) { u8 res=0; switch(pdrv) { case EX_FLASH://外部flash Flash_Init(); FLASH_SECTOR_COUNT=2048*8; //W25Q64 break; default: res=1; } if(res)return STA_NOINIT; else return 0; //初始化成功 } //获得磁盘状态 DSTATUS disk_status ( BYTE pdrv /* Physical drive nmuber (0..) */ ) { return 0; } //读扇区 //drv:磁盘编号0~9 //*buff:数据接收缓冲首地址 //sector:扇区地址 //count:需要读取的扇区数 DRESULT disk_read ( BYTE pdrv, /* Physical drive nmuber (0..) */ BYTE *buff, /* Data buffer to store read data */ DWORD sector, /* Sector address (LBA) */ UINT count /* Number of sectors to read (1..128) */ ) { u8 res=0; if (!count)return RES_PARERR;//count不能等于0,否则返回参数错误 switch(pdrv) { case EX_FLASH://外部flash for(;count>0;count--) { Flash_Read(buff,sector*FLASH_SECTOR_SIZE,FLASH_SECTOR_SIZE); sector++; buff+=FLASH_SECTOR_SIZE; } res=0; break; default: res=1; } //处理返回值,将SPI_SD_driver.c的返回值转成ff.c的返回值 if(res==0x00)return RES_OK; else return RES_ERROR; } //写扇区 //drv:磁盘编号0~9 //*buff:发送数据首地址 //sector:扇区地址 //count:需要写入的扇区数 DRESULT disk_write ( BYTE pdrv, /* Physical drive nmuber (0..) */ const BYTE *buff, /* Data to be written */ DWORD sector, /* Sector address (LBA) */ UINT count /* Number of sectors to write (1..128) */ ) { u8 res=0; if (!count)return RES_PARERR;//count不能等于0,否则返回参数错误 switch(pdrv) { case EX_FLASH://外部flash for(;count>0;count--) { Flash_Write((u8*)buff,sector*FLASH_SECTOR_SIZE,FLASH_SECTOR_SIZE); sector++; buff+=FLASH_SECTOR_SIZE; } res=0; break; default: res=1; } //处理返回值,将SPI_SD_driver.c的返回值转成ff.c的返回值 if(res == 0x00) return RES_OK; else return RES_ERROR; } //其他表参数的获得 //drv:磁盘编号0~9 //ctrl:控制代码 //*buff:发送/接收缓冲区指针 DRESULT disk_ioctl ( BYTE pdrv, /* Physical drive nmuber (0..) */ BYTE cmd, /* Control code */ void *buff /* Buffer to send/receive control data */ ) { DRESULT res; if(pdrv==EX_FLASH) //外部FLASH { switch(cmd) { case CTRL_SYNC: res = RES_OK; break; case GET_SECTOR_SIZE: *(WORD*)buff = FLASH_SECTOR_SIZE; res = RES_OK; break; case GET_BLOCK_SIZE: *(WORD*)buff = FLASH_BLOCK_SIZE; res = RES_OK; break; case GET_SECTOR_COUNT: *(DWORD*)buff = FLASH_SECTOR_COUNT; res = RES_OK; break; default: res = RES_PARERR; break; } }else res=RES_ERROR;//其他的不支持 return res; } //获得时间 //User defined function to give a current time to fatfs module */ //31-25: Year(0-127 org.1980), 24-21: Month(1-12), 20-16: Day(1-31) */ //15-11: Hour(0-23), 10-5: Minute(0-59), 4-0: Second(0-29 *2) */ DWORD get_fattime (void) { return 0; } //动态分配内存 void *ff_memalloc (UINT size) { return (void*)mymalloc(size); } //释放内存 void ff_memfree (void* mf) { myfree(mf); } [/mw_shl_code]
都是参考原子大哥的。

最佳答案

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

28

主题

119

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
445
金钱
445
注册时间
2013-8-10
在线时间
37 小时
 楼主| 发表于 2015-7-17 21:21:55 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
恩,格式化了,但是我读出来的是只有7M怎么办,64不是的大小不会8M么
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-7-17 23:44:23 | 显示全部楼层
回复【3楼】飞雪飘花:
---------------------------------
7.多吧,肯定是稍微小于8M的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

28

主题

119

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
445
金钱
445
注册时间
2013-8-10
在线时间
37 小时
 楼主| 发表于 2015-7-18 23:05:45 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
这是为什么呢
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-7-19 23:16:07 | 显示全部楼层
回复【5楼】飞雪飘花:
---------------------------------
你买个500G的硬盘,有500G可用空间么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

28

主题

119

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
445
金钱
445
注册时间
2013-8-10
在线时间
37 小时
 楼主| 发表于 2015-7-31 17:25:28 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-5-15
在线时间
2 小时
发表于 2018-5-15 15:58:22 | 显示全部楼层

原子哥,这个flash如何格式化,是直接擦除flash芯片吗?
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-5-15
在线时间
2 小时
发表于 2018-5-15 16:05:15 | 显示全部楼层
飞雪飘花 发表于 2015-7-17 21:21
回复【2楼】正点原子:
---------------------------------
恩,格式化了,但是我读出来的是只有7M怎么办,6 ...

楼主,你好,我也遇到了你上述的问题,我直接擦除了这个芯片,也不行。请问如何格式化?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 05:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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