OpenEdv-开源电子网

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

原子哥,求指点啊。FATAS移植discic.c相关问题

[复制链接]

10

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2016-1-26
在线时间
58 小时
发表于 2016-11-6 10:56:27 | 显示全部楼层 |阅读模式
5金钱
战舰开发板中在discio.c有段宏定义
#define FLASH_SECTOR_SIZE         512                                                      
u16            FLASH_SECTOR_COUNT=2048*12;        
#define FLASH_BLOCK_SIZE           8             //每个BLOCK有8个扇区。
但是W25Q128的PDF中不是这样的,我的理解是
#define FLASH_SECTOR_SIZE         1024*4               
u16            FLASH_SECTOR_COUNT=16*256;        
#define FLASH_BLOCK_SIZE           16   


但是修改了之后驱动就出问题了。
当然我也把驱动改成了这样
        DRESULT disk_read (
        BYTE pdrv,                /* Physical drive nmuber to identify the drive */
        BYTE *buff,                /* Data buffer to store read data */
        DWORD sector,        /* Sector address in LBA */
        UINT count                /* Number of sectors to read */
)
{
        u8 res=0;
       if (!count)return RES_PARERR;          
        switch(pdrv)
        {
                case EX_FLASH:
                       W25QXX_Read(buff,sector,count*FLASH_SECTOR_SIZE);
                        res=0;
                        break;               
                default:
                        res=1;
        }
}
但是就是驱动不了。
有两个问题
1:宏定义为什么这样定义?
2:驱动这样写是否正确?
跪谢各路大神来指点下小弟。

最佳答案

查看完整内容[请看2#楼]

1,因为25x系列,都是4096K一个扇区,我们作为文件系统的一个block,然后文件系统扇区是512字节 ,方便管理。 2,你这样写,得重新格式化,另外需要修改fatfs的配置
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-11-6 10:56:28 | 显示全部楼层
1,因为25x系列,都是4096K一个扇区,我们作为文件系统的一个block,然后文件系统扇区是512字节 ,方便管理。
2,你这样写,得重新格式化,另外需要修改fatfs的配置
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

10

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2016-1-26
在线时间
58 小时
 楼主| 发表于 2016-11-6 21:31:10 | 显示全部楼层
谢谢原子哥指点,我在ffconf.h改过
#define        _MIN_SS                512
#define        _MAX_SS                512
改为
#define        _MIN_SS                512
#define        _MAX_SS                4096

#define        _MIN_SS                4096
#define        _MAX_SS                4096
还是不行,是我改的不对吗?
2:您刚说的格式化是什么意思,要我重新对25x进行
   res=f_mkfs("1:",1,4096);   OR  res=f_mkfs("1:",1,512);
3:你能告诉我在哪里能找到文件系统扇区是512,这个可以改吗?
拜托了原子哥,这个问题困扰我好久了!
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-11-6 22:33:54 | 显示全部楼层
ftmcu 发表于 2016-11-6 21:31
谢谢原子哥指点,我在ffconf.h改过
#define        _MIN_SS                512
#define        _MAX_SS                512

#define        _MIN_SS                4096
#define        _MAX_SS                4096
这个设置的是扇区大小
res=f_mkfs("1:",1,4096); 这个设的应该是簇的大小。
第三个问题,没改过,不过应该是可以改的,不过你改了后,别的设备能不能识别你的存的文件就不清楚了。

另外,文件系统的扇区和你存储介质的扇区完全是2回事。
回复

使用道具 举报

10

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2016-1-26
在线时间
58 小时
 楼主| 发表于 2016-11-7 00:09:47 | 显示全部楼层
谢谢您,憨厚的大叔.按您说的我查了相关资料。
1FAT文档也说_MIN_SS 和_MAX_SS 也说根据物理存储器的扇区大小设置,一般为512,25x系列刚好是4096一个扇区,所以我设置4096.  
2:您说的f_mkfs是设置簇大小。一个簇4096个字节。
驱动按首地址+字节数写的。FAT是如何把物理存储区数据按文件管理,太难我得慢慢研究。现在如何配置FAT能让文件管理动起来,实在是让我头痛。
回复

使用道具 举报

10

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2016-1-26
在线时间
58 小时
 楼主| 发表于 2016-11-7 15:05:41 | 显示全部楼层
问题找出来了,是我设置了#define _VOLUMES         1 而且设置了#define SD_CARD         0  和#define EX_FLASH   1。(这是在我吧SD卡驱动删完的条件下这样做,因为我sd没动起来
假设:FATS在#define _VOLUMES n下回默认从0到n开始检测。
我把#define SD_CARD         xx  和#define EX_FLASH   0   测试数据正确。
#define _VOLUMES         2  状态下#define SD_CARD         0 和#define EX_FLASH   1   测试数据正确。
为什么这样,正在研究。

回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 00:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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