OpenEdv-开源电子网

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

请教关于FATFS实验中对外部FLASH写问题

[复制链接]

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2013-8-4
在线时间
1 小时
发表于 2013-10-27 13:50:21 | 显示全部楼层 |阅读模式
 请问,FATFS实验中,
一、为什么要设置#define FLASH_SECTOR_SIZE 512
能不能设置成4096吗?因为SPI FLASH的扇区大小是4KB,方便减少擦除次数

二、如果只能设置成512的话, 以下红色部分的外部FLASH写操作,能不能直接改成 SPI_Flash_Write((u8*)buff,sector*FLASH_SECTOR_SIZE,FLASH_SECTOR_SIZE*  count ); 
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=0;  
    if (!count)return RES_PARERR;//count不能等于0,否则返回参数错误  
switch(drv)
{
case SD_CARD://SD卡
res=SD_WriteDisk((u8*)buff,sector,count);
break;
case EX_FLASH://外部flash
for(;count>0;count--)
{    
SPI_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;  
}


三、为加快写速度,是不是应该对
count  进行判断,以下方式是否可行吗
case EX_FLASH://外部flash
            secremain=8-sector%8;//要写入扇区的剩余可写入的sector数
            while(1)
            {
                if(count<=secremain)//在一个FLASH扇区可以写完
                {    
                    SPI_Flash_Write((u8*)buff,sector*FLASH_SECTOR_SIZE,FLASH_SECTOR_SIZE*count);
                    break;
                }else 
                {
                    SPI_Flash_Write((u8*)buff,sector*FLASH_SECTOR_SIZE,FLASH_SECTOR_SIZE*secremain);
                    count -= secremain;//
                    sector += secremain;//写地址偏移
                    buff += FLASH_SECTOR_SIZE*secremain;
                    if(count>8) secremain = 8; //下一个FLASH扇区还是写不完
                    else secremain =count;     //写一个FLASH扇区可以写完啦
                }
            }
            res=0;
            break;




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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-27 14:48:51 | 显示全部楼层
1,大部分sd卡扇区是以512字节划分的,你改了这个,还需要修改FATFS,里面的_MAX_SS,这个宏定义,设置为4096,这样你需要更多的RAM用于存储。
2,你可以自己测试下。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2012-10-14
在线时间
0 小时
发表于 2013-12-13 22:29:02 | 显示全部楼层
回复【2楼】正点原子:
1,大部分sd卡扇区是以512字节划分的,你改了这个,还需要修改FATFS,里面的_MAX_SS,这个宏定义,设置为4096,这样你需要更多的RAM用于存储。 2,你可以自己测试下。
---------------------------------
请问下原子哥,如果把扇区大小改为4096的话,FATFS里面的_MAX_SS也要设置为4096,那是不是说SD卡的读写扇区也被强制设为4096?如果是4096的话,那么SD卡的mmc_sd.c里面的函数,比如SD_ReadDisk(u8*buf,u32 sector,u8 cnt)和SD_WriteDisk(u8*buf,u32 sector,u8 cnt)等等都要修改啊?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-14 00:44:48 | 显示全部楼层
你在初始化SD卡的时候,就得设置sector大小为4096.
我没有实践过这个,你可以自己试试.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-15 03:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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