OpenEdv-开源电子网

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

SD卡可读可写但是用电脑就读不出来数据,显示内存有变化

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2019-8-5
在线时间
3 小时
发表于 2019-9-4 14:40:24 | 显示全部楼层 |阅读模式
1金钱
diskio.c文件填充的函数如下:
DSTATUS disk_initialize (
        BYTE pdrv                                /* Physical drive nmuber to identify the drive */
)
{
        uint8_t res;
        res = SD_init();//SD_Initialize()
                         if(res)//STM32 SPIμÄbug,Ôúsd¿¨2ù×÷ê§°üμÄê±oòèç1û2»Ö′DDÏÂÃæμÄóï¾ä,¿éÄüμ¼ÖÂSPI¶áD′òì3£
                        {
                                SPI_setspeed(SPI_BAUDRATEPRESCALER_256);
                                spi_readwrite(0xff);//ìá1©¶îíaμÄ8¸öê±Öó
                                SPI_setspeed(SPI_BAUDRATEPRESCALER_2);
                        }
        if(res)return  STA_NOINIT;
        else return RES_OK; //3õê¼»ˉ3é1|
}

---------------------------------------------------------------------------
DRESULT disk_ioctl (
        BYTE pdrv,                /* Physical drive nmuber (0..) */
        BYTE cmd,                /* Control code */
        void *buff                /* Buffer to send/receive control data */
)
{
        DRESULT res;
         switch(cmd)
           {
                  case CTRL_SYNC :
                                return RES_OK;
                  case GET_SECTOR_COUNT :
                                *(DWORD*)buff = SD0_CardInfo.Capacity/512;
                            return RES_OK;
                  case GET_BLOCK_SIZE :
                                *(WORD*)buff = 512;
                            return RES_OK;       
                  case CTRL_POWER :
                                break;
                  case CTRL_LOCK :
                                break;
                  case CTRL_EJECT :
                                break;
                      /* MMC/SDC command */
                  case MMC_GET_TYPE :
                                break;
                  case MMC_GET_CSD :
                                break;
                  case MMC_GET_CID :
                                break;
                        case MMC_GET_OCR :
                                break;
                        case MMC_GET_SDSTAT :
                                break;       
                }
                return res;
}

------------------------------------------------------------------------
DRESULT disk_read (
        BYTE pdrv,                /* Physical drive nmuber to identify the drive */
        BYTE *buff,                /* Data buffer to store read data */
        DWORD sector,        /* Start sector in LBA */
        UINT count                /* Number of sectors to read */
)
{
        int Status;
        if( !count )
        {   
                return RES_PARERR;  /* count2»Äüμèóú0£¬·ñÔò·μ»Ø2Îêy′íÎó */
        }
        switch (pdrv)
        {
                case 0:
                    if(count==1)            /* 1¸ösectorμĶá2ù×÷ */      
                    {   
                                Status =  SD_ReadSB( sector ,buff );
                                if(Status == 0){
                                        return RES_OK;
                                }else{
                                        return RES_ERROR;
                                }   
                    }                                                
                    else                    /* ¶à¸ösectorμĶá2ù×÷ */     
                    {  
                                Status = SD_ReadMB( sector , buff ,count);
                                if(Status == 0){
                                        return RES_OK;
                                }else{
                                        return RES_ERROR;
                                }
                    }                                                
                case 1:
                    if(count==1)            /* 1¸ösectorμĶá2ù×÷ */      
                    {   
                                return RES_OK;   
                    }                                                
                    else                    /* ¶à¸ösectorμĶá2ù×÷ */     
                    {  
                                return RES_OK;
                    }

                default:
                        return RES_ERROR;
        }
}

-------------------------------------------------------------------------
DSTATUS disk_status (
        BYTE pdrv                /* Physical drive nmuber to identify the drive */
)
{switch (pdrv)
        {
                case 0 :
                        return RES_OK;
                case 1 :
                        return RES_OK;
                case 2 :
                        return RES_OK;
                default:
                        return STA_NOINIT;
        }
}

-------------------------------------------------------------------------------
#if FF_FS_READONLY == 0

DRESULT disk_write (
        BYTE pdrv,                        /* Physical drive nmuber to identify the drive */
        const BYTE *buff,        /* Data to be written */
        DWORD sector,                /* Start sector in LBA */
        UINT count                        /* Number of sectors to write */
)
{
        int Status;
        if( !count )
        {   
                return RES_PARERR;  /* count2»Äüμèóú0£¬·ñÔò·μ»Ø2Îêy′íÎó */
        }
        switch (pdrv)
        {
                case 0:
                    if(count==1)            /* 1¸ösectorμÄD′2ù×÷ */      
                    {   
                                Status = SD_WriteSB( sector , (uint8_t *)(&buff[0]) );
                                if(Status == 0){
                                        return RES_OK;
                                }else{
                                        return RES_ERROR;
                                }
                    }                                                
                    else                    /* ¶à¸ösectorμÄD′2ù×÷ */   
                    {  
                                Status = SD_WriteMB( sector , (uint8_t *)(&buff[0]) , count );
                                if(Status == 0){
                                        return RES_OK;
                                }else{
                                        return RES_ERROR;
                                }   
                    }                                                
                default:return RES_ERROR;
        }
}
#endif

---------------------------------------------------------------------------------------------------------------
DWORD get_fattime (void)
{

    return 0;
}

-------------------------------------------------------------
测试行如下:
                //挂载文件系统
                res=f_mount(&fs,"0:",0);if(res!=FR_OK)printf("挂载失败%d ",res);       
                //创建文件夹
                res=f_mkdir("201908");if(res!=FR_OK){printf("创建目录失败%d ",res);}
                //打开文件
                res=f_open(&file,"test.txt",FA_READ|FA_WRITE|FA_OPEN_ALWAYS);if(res!=FR_OK){printf("打开文件失败%d ",res);}
                //写入数据
                res = f_write(&file, textFileBuffer, sizeof(textFileBuffer), &bw); if(res!=FR_OK){printf("数据写入失败%d",res);}
                //关闭文件
                f_close(&file);
                //打开文件
                res=f_open(&file,"test.txt",FA_READ|FA_OPEN_EXISTING);if(res!=FR_OK){printf("打开文件失败%d ",res);}
                //读取数据
                res = f_read(&file, buffer, sizeof(textFileBuffer), &br);  if(res!=FR_OK){printf("数据读取失败%d",res);}
                //关闭文件
                f_close(&file);
                //打印输出读取到的数据
                printf("%s\n\r",buffer);



串口输出的结果如下:
         [14:38:09.542]收←◆中英文测试字符串 hellokfdijgdoifjoigjdofjgodjfghoudfhudhfvuhhipuhsdpifuhiChinese and English test strings
但是把SD卡插电脑上用读卡器看的时候没有目录也没有test.txt文件    




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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-9-5 02:36:54 | 显示全部楼层
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2019-8-5
在线时间
3 小时
 楼主| 发表于 2019-9-6 18:26:43 | 显示全部楼层
又大神帮忙看看程序么?数据写不进去SD卡。
f_mount();
f_open();
f_write();
f_close();
返回值正常!
但是就是写不进去

串口输出结果

串口输出结果

SD_FATFS_2.zip

5.37 MB, 下载次数: 0

问题程序

回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2019-8-5
在线时间
3 小时
 楼主| 发表于 2019-9-6 18:27:31 | 显示全部楼层
hhygbt123 发表于 2019-9-6 18:26
又大神帮忙看看程序么?数据写不进去SD卡。
f_mount();
f_open();

SD卡插电脑上显示不出来 ,SD卡中的文件也读不到
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 19:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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