OpenEdv-开源电子网

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

开发板的SD卡驱动程序,有的不能读写SD卡。

[复制链接]

64

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-7-23
在线时间
13 小时
发表于 2011-8-30 16:00:28 | 显示全部楼层 |阅读模式

我现在测试MSD_WriteBuffer和MSD_ReadBuffer 是否能读写buffer ,函数返回正常值0,但是不能写入和读出sd卡的内容。 我把主程序列的下面,让大家帮我看看。
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"  
#include "delay.h" 
#include "led.h"
#include "key.h"
#include "exti.h"
#include "wdg.h"
#include "timer.h"
#include "lcd.h"   
#include "rtc.h"
#include "wkup.h"
#include "adc.h"
#include "dma.h"
#include "24cxx.h"
#include "flash.h"
#include "touch.h"
#include "24l01.h"
#include "mmc_sd.h"
                                            
u8 buf[512];//SD卡数据缓存区
u8 buf_1[512];//SD卡数据缓存区
u8 buf_2[512];//SD卡数据缓存区
u8 buf_3[512];//SD卡数据缓存区

u8 cidcid[16];
u16 num;
int main(void)

 
 u32 sd_size;
 u8 t=0;        
   Stm32_Clock_Init(9);//系统时钟设置
 delay_init(72);  //延时初始化
 uart_init(72,9600); //串口1初始化    
 LCD_Init();   //初始化液晶
 LED_Init();         //LED初始化                    
       
  OINT_COLOR=RED;//设置字体为红色   
 LCD_ShowString(60,50,"Mini STM32"); 
 LCD_ShowString(60,70,"SD Card TEST"); 
 LCD_ShowString(60,90,"ATOM@ALIENTEK");
 LCD_ShowString(60,110,"2011/8/19");    
 while(SD_Init()!=0)//检测不到SD卡
 {
  LCD_ShowString(60,130,"SD Card Failed!");
  delay_ms(500);
  LCD_ShowString(60,130,"Please Check!      ");
  delay_ms(500);
  LED0=!LED0;//DS0闪烁
 }
 //检测SD卡成功               
 LCD_ShowString(60,130,"SD Card Checked OK ");
 LCD_ShowString(60,150,"SD Card Size:    Mb");
 sd_size=SD_GetCapacity();
 LCD_ShowNum(164,150,sd_size>>20,4,16);//显示SD卡容量
 while(1)
 {if(t==1)//每1s钟执行一次
  {
    
    for(num=0;num<512;num++)  //先给buf_2赋值,从0至511
    {
      buf_2[num]=num;
    }
    if(MSD_WriteBuffer(buf_2,0xb9d4,511)==0)  // 把buf_2中的值写入SD卡
    {
     LCD_ShowString(15,130,"WRITE Buffer OK!");
    }
    delay_ms(900);
    for(num=0;num<512;num++)   //再给buf_2赋值全部为0xaa
    {
      buf_2[num]=0xaa;
    }
    if(MSD_ReadBuffer(buf_2,0xb9d4,511)==0)    //从SD卡中读出的数据放入buf_2
    {
     LCD_ShowString(15,270,"READ Buffer OK!");
    }
    else
        LCD_ShowString(15,270,"MSD READ NOT OK!");
   
    LCD_ShowNum(10,150,buf_2[1],4,16);   //开始显示buf_2中的数据
    LCD_ShowNum(50,150,buf_2[2],4,16);
    LCD_ShowNum(90,150,buf_2[3],4,16);
    LCD_ShowNum(130,150,buf_2[4],4,16);
    LCD_ShowNum(170,150,buf_2[5],4,16);
    LCD_ShowNum(10,170,buf_2[6],4,16);
    LCD_ShowNum(50,170,buf_2[7],4,16);
    LCD_ShowNum(90,170,buf_2[8],4,16);
    LCD_ShowNum(130,170,buf_2[9],4,16);
    LCD_ShowNum(170,170,buf_2[10],4,16);
    
    LCD_ShowNum(10,190,106,4,16);
    LCD_ShowNum(50,190,buf_2[21],4,16);
    LCD_ShowNum(90,190,buf_2[22],4,16);
    LCD_ShowNum(130,190,buf_2[23],4,16);
    LCD_ShowNum(170,190,buf_2[24],4,16);
    LCD_ShowNum(10,210,buf_2[25],4,16);
    LCD_ShowNum(50,210,buf_2[26],4,16);
    LCD_ShowNum(90,210,buf_2[27],4,16);
    LCD_ShowNum(130,210,buf_2[28],4,16);
    LCD_ShowNum(170,210,buf_2[29],4,16);
    LCD_ShowNum(10,230,buf_2[30],4,16);
    LCD_ShowNum(50,230,buf_2[31],4,16);
    LCD_ShowNum(90,230,buf_2[32],4,16);
    LCD_ShowNum(130,230,buf_2[33],4,16);
    LCD_ShowNum(170,230,buf_2[34],4,16);   
   t=0;
  }  
  t++;
  delay_ms(900);
 } 
}


    

 

 



 

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

使用道具 举报

64

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-7-23
在线时间
13 小时
 楼主| 发表于 2011-8-30 16:02:28 | 显示全部楼层
回复【楼主位】esteem:
---------------------------------
SD_ReadSingleBlock 这个函数是正常的。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-8-30 19:48:24 | 显示全部楼层
是有可能的。开发板的SD卡部分,不是很完善,某些卡不支持的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

64

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-7-23
在线时间
13 小时
 楼主| 发表于 2011-8-31 10:06:29 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
您好,我是用的最常见的金士顿的2G的sd卡。readsingleblock()函数是正常的,我想是不是调用上的问题?MSD_ReadBuffer(buf_2,0xb9d4,511这个函数调用错误,SD卡只能整个扇区的读写?而不能任意物理地址的读取?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-8-31 10:19:22 | 显示全部楼层
回复【4楼】esteem:
---------------------------------
是可以任意地址写的。
试试光盘的SD卡读卡器实验,是否好用。里面用的就是MSD_READ和WRITE。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

64

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-7-23
在线时间
13 小时
 楼主| 发表于 2011-8-31 15:55:05 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
例程里没有啊,只有调用过readsingleblock
回复 支持 反对

使用道具 举报

64

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-7-23
在线时间
13 小时
 楼主| 发表于 2011-9-1 16:13:02 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
fat文件系统也只是用了,readsingleblock和writesingleblock,没有读写任意地址的wirtebuffer和readbuffer。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-9-1 16:25:35 | 显示全部楼层
回复【7楼】esteem:
---------------------------------
SD卡读卡器代码。
不是SD卡测试代码
有USB的那个。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

64

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-7-23
在线时间
13 小时
 楼主| 发表于 2011-9-2 15:18:35 | 显示全部楼层

终于找到了,在工程的USBCFG组里面,mass_mal.c文件里面。MAL_Read()函数调用了MSD_ReadBuffer()函数。

回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 22:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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