OpenEdv-开源电子网

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

一个关于原子哥SD卡FATFS的一个BUG,返回FR_NO_FILESYSTEM的问题

[复制链接]

55

主题

243

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1608
金钱
1608
注册时间
2012-12-30
在线时间
241 小时
发表于 2021-1-12 19:44:41 | 显示全部楼层 |阅读模式
可能很多人的SD卡都是移植原子哥,这几天调试发现如果卡是带MBR的话是读不出来的,SDIO驱动会返回读取超时,文件系统则返回FR_NO_FILESYSTEM的问题。一步一步调试发现,是扇区地址问题。直接上代码吧!u8 SD_ReadDisk(u8*buf,uint32_t sector,u8 cnt)
{
        u8 sta=SD_OK;
        long long lsector=sector;
        u8 n;
        if(CardType!=SDIO_STD_CAPACITY_SD_CARD_V1_1)lsector<<=9;
//        if((uint32_t)buf%4!=0)
//        {
//                 for(n=0;n<cnt;n++)
//                {
//                         sta=SD_ReadBlock(SDIO_DATA_BUFFER,lsector+512*n,512);//μ¥&#184;&#246;sectorμ&#196;&#182;á2ù×÷
//                        memcpy(buf,SDIO_DATA_BUFFER,512);
//                        buf+=512;
//                }
//        }else
//        {
                if(cnt==1)sta=SD_ReadBlock(buf,lsector,512);            //μ¥&#184;&#246;sectorμ&#196;&#182;á2ù×÷
                else sta=SD_ReadMultiBlocks(buf,lsector,512,cnt);//&#182;à&#184;&#246;sector  
//        }
        return sta;
}


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 */
)
{
        uint8_t res=0;
    if (!count)return RES_PARERR;//count2&#187;&#196;üμèóú0£&#172;·&#241;&#212;ò·μ&#187;&#216;2&#206;êy′í&#206;ó                          
        switch(pdrv)
        {
                case SD_CARD://SD&#191;¨
                        res=SD_ReadDisk(buff,sector*FLASH_SECTOR_SIZE,count);         
                        if(res){
                        }                       
                        break;
                case EX_FLASH://ía2&#191;flash
                        for(;count>0;count--)
                        {
                                SPI_Flash_Read(buff,sector*FLASH_SECTOR_SIZE,FLASH_SECTOR_SIZE);
                                sector++;
                                buff+=FLASH_SECTOR_SIZE;
                        }
                        res=0;
                        break;
                default:
                        res=1;
        }
   //′|àí·μ&#187;&#216;&#214;μ£&#172;&#189;&#171;SPI_SD_driver.cμ&#196;·μ&#187;&#216;&#214;μ×a3éff.cμ&#196;·μ&#187;&#216;&#214;μ
    if(res==0x00)return RES_OK;         
    else return RES_ERROR;       


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

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-14 19:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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