OpenEdv-开源电子网

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

原子哥,为什么移植了你的SDIO,数组出现问题了。

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2014-3-5
在线时间
1 小时
发表于 2014-3-5 10:18:41 | 显示全部楼层 |阅读模式

/*********************************************************************************************************
  头文件
*********************************************************************************************************/
#include "stm32f10x.h"
#include "sdio_sdcard.h"
#include "usart.h"
#include "diskio.h"
#include "ff.h"
#include "delay.h"
#include "malloc.h"
#include <stdio.h>

/*********************************************************************************************************
  变量定义
*********************************************************************************************************/
SD_Error Status = SD_OK;
u8 buff[256] = {"0123456789abcd"};          /*一个char 4个字节,一个字节1byte,0.5KB*/

/*********************************************************************************************************
** Function name:           CardInfo
** Descriptions:            储存卡的相关信息
** input parameters:        none
** output parameters:       none
** Returned value:          none
*********************************************************************************************************/
void CardInfo()
{
 switch(SDCardInfo.CardType)
 {
  case SDIO_STD_CAPACITY_SD_CARD_V1_1:printf("Card Type:SDSC V1.1\r\n");break;
  case SDIO_STD_CAPACITY_SD_CARD_V2_0:printf("Card Type:SDSC V2.0\r\n");break;
  case SDIO_HIGH_CAPACITY_SD_CARD:printf("Card Type:SDHC V2.0\r\n");break;
  case SDIO_MULTIMEDIA_CARD:printf("Card Type:MMC Card\r\n");break;
 } 
   printf("Card ManufacturerID:%d\r\n",SDCardInfo.SD_cid.ManufacturerID); /*制造商ID*/
  printf("Card RCA:%d\r\n",SDCardInfo.RCA);        /*卡相对地址*/
 printf("Card Capacity:%d MB\r\n",(u32)(SDCardInfo.CardCapacity>>20)); /*显示容量*/
  printf("Card BlockSize:%d\r\n\r\n",SDCardInfo.CardBlockSize);   /*显示块大小*/
}


/*********************************************************************************************************
** Function name:           TestWriteRead
** Descriptions:            测试读和写
** input parameters:        none
** output parameters:       none
** Returned value:          none
*********************************************************************************************************/
void TestWriteRead()
{
   FRESULT res;                      /*Result code */
   FATFS fatfs;                      /*File system object */
   FIL fil;                          /*File object */
   UINT br;
   char  diskname[20] = {"newdir"}; /*创建文件夹名字*/
   disk_initialize(0);    /*初始化磁盘*/
   f_mount(0, &fatfs);        /*为磁盘挂载一个空间*/
   res = f_mkdir(diskname);   /*创建一个新文件夹*/

   /*打开一个文件并且以写得形式*/
   res = f_open(&fil,"123.txt", FA_OPEN_EXISTING | FA_WRITE);
   if(res==FR_OK)
   printf("open file successfully.........\r\n");
   else   
   printf("open file fail .........%d\r\n",res);
   res = f_write(&fil, buff, sizeof(buff), &br);
   /*写数据在文件*/
   if(res == FR_OK)
   printf("write data ok! %d\n\r",br);
   else
   printf("write data error : %d\n\r",res);
   /*读数据在文件*/
   res = f_open(&fil,"123.txt", FA_OPEN_EXISTING | FA_READ);
   res = f_read(&fil, buff, sizeof(buff), &br);
   if(res==FR_OK)
 { 
     printf("read data num : %d\n\r",br); 
     printf("%s\n\r",buff);
 }
   else
  printf("read data error : %d\n\r",res);
  f_close(&fil);
  f_mount(0, NULL);
}


/*********************************************************************************************************
** Function name:           TestWriteRead
** Descriptions:            测试读和写
** input parameters:        none
** output parameters:       none
** Returned value:          none
*********************************************************************************************************/
voidTestSpeed(void)
{
   FRESULT res;                      /* Result code */
   FIL fil;                          /* File object */
   UINT br;
   u8 i;
   for(i=0;i<2000;i++)
 {
     f_lseek(&fil,f_size(&fil));
     res = f_write(&fil, buff, sizeof(buff), &br);
  if(res==FR_OK)
     f_sync(&fil);
 }

 f_close(&fil);
 f_mount(0, NULL);
 
}
/*********************************************************************************************************
** Function name:           main
** Descriptions:            主函数,指定函数执行
** input parameters:        none
** output parameters:       none
** Returned value:          none
*********************************************************************************************************/

int main(void)
{
  RCC_Configuration();
  NVIC_Configuration();
  uart_init(9600);
  while (1)
    ;
}


/*********************************************************************************************************
** Function name:           USART1_IRQHandler
** Descriptions:            串口一中断服务函数
** input parameters:        none
** output parameters:       none
** Returned value:          none
*********************************************************************************************************/
void USART1_IRQHandler(void)                                 /*中断服务标志,详情查DS*/
{
    u8 dat;
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)    /*若接收数据寄存器满*/
     {    
       dat = USART_ReceiveData(USART1);         
       if(dat == 0x63)                                       /*如果接收到是0X63则处理函数,对应的相关操作*/               
   {     
       dat = 0;     
    if(((Status = SD_Init())== SD_OK))
        {
   CardInfo();
   TestWriteRead();         /*串口1输出SD卡相关信息*/
        }              /*串口1输出SD相关读写操作*/
     }
   }
}


 

u8 buff[256] = {"0123456789abcd"}; /*一个char 1个字节,一个字节1byte,0.5KB*/  这个数组不能超过512,否则就不能res = f_write(&fil, buff, sizeof(buff), &br);,为什么呀!


 


 

 

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

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2014-3-5
在线时间
1 小时
 楼主| 发表于 2014-3-5 10:22:06 | 显示全部楼层
各位大哥,有没有人知道的。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-3-5 12:56:23 | 显示全部楼层
帮顶
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-3-5 13:32:02 | 显示全部楼层
估计是溢出了吧
回复 支持 反对

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1815
金钱
1815
注册时间
2011-10-9
在线时间
230 小时
发表于 2014-3-5 13:58:15 | 显示全部楼层
貌似是 FATFS的问题  读写一次 只能写512个字节
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-5 17:12:33 | 显示全部楼层
回复【楼主位】5780358:
---------------------------------
没这个限制。
有问题的话,只能说明底层驱动存在bug。
你可以把SDIO时钟频率降低一点试试。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-5 04:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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