OpenEdv-开源电子网

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

STM32 SDIO驱动SD卡遇到的比较奇葩问题

[复制链接]

8

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2012-10-31
在线时间
0 小时
发表于 2013-9-6 16:42:26 | 显示全部楼层 |阅读模式
用stm32f103  SDIO模式  驱动 SD卡,库是3.5的库     然后SDIO用的是4.5版本        能进行正常的读写         但是遇到了两个比较难缠的问题           查了论坛也有很多人遇到,但都没有找到一个解决的办法              第一个问题是:  SDIO模式读写,有时候是卡死在CmdResp1Error函数中的
while (!(SDIO->STA & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT)))
复制代码
还有有时候会卡死在读写等待函数里面的while(1)中            但是这个问题我把程序开优化,貌似就没有发现了                   第二个问题:我用定时器2测试,每100ms让他写10K数据,一般都能正常写入       但是有时候会出现一次写入化的时间很长(正常大概10ms,这次会用到80ms左右),频率不是很高,但是会每隔一段时间出现一次 (没发现周期性的规律。。。)             求各位给点建议或帮助       谢谢了!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-9-6 17:26:22 | 显示全部楼层
试试看我的,103ZET6,SD驱动是5.1.0,库函数3.6.1,FATFS 0.09B,我自己没做过测试写入,但是读是正常的。
加入了SD卡供电开关和插入监测,根据你自己的硬件在选择引脚或是屏蔽。



SDIO+FATFS+Font.zip

531.13 KB, 下载次数: 1910

回复 支持 反对

使用道具 举报

8

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2012-10-31
在线时间
0 小时
 楼主| 发表于 2013-9-6 17:31:49 | 显示全部楼层
回复【2楼】ricefat:
---------------------------------
好的     非常感谢       我测试一下        等会给你答复    谢了
回复 支持 反对

使用道具 举报

8

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2012-10-31
在线时间
0 小时
 楼主| 发表于 2013-9-6 18:00:30 | 显示全部楼层
回复【2楼】ricefat:

试试看我的,103ZET6,SD驱动是5.1.0,库函数3.6.1,FATFS 0.09B,我自己没做过测试写入,但是读是正常的。
加入了SD卡供电开关和插入监测,根据你自己的硬件在选择引脚或是屏蔽。

---------------------------------
你好,你这个初始化都过不了      卡死在SD_Error SD_WaitReadOperation(void)
{
  SD_Error errorstatus = SD_OK;
  uint32_t timeout;

  timeout = SD_DATATIMEOUT;
  
  while ((DMAEndOfTransfer == 0x00) && (TransferEnd == 0) && (TransferError == SD_OK) && (timeout > 0))(卡死在这里。。。。。)
回复 支持 反对

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-9-6 18:24:19 | 显示全部楼层
回复【4楼】gujie:
---------------------------------
你屏蔽插卡监测和电源了吗?

uint8_t SD_Detect(void)
{
  __IO uint8_t status = SD_PRESENT;

  /*!< Check GPIO to detect SD */
//  if (GPIO_ReadInputDataBit(SD_DETECT_GPIO_PORT, SD_DETECT_PIN) == Bit_RESET)
//  {
//    status = SD_NOT_PRESENT;
//  }
  return status;
}
回复 支持 反对

使用道具 举报

2

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2013-9-6
在线时间
19 小时
发表于 2013-9-6 18:37:24 | 显示全部楼层
新手调试SDIO时遇到个问题请教下:单块写时,块大小是不是必须=512,不能小于或大于呀?我用的是标准容量卡。
回复 支持 反对

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-9-6 18:38:30 | 显示全部楼层
回复【6楼】32458731:
---------------------------------
看看你的卡block大小,根据那个来。不是所有的卡block都是512
回复 支持 反对

使用道具 举报

8

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2012-10-31
在线时间
0 小时
 楼主| 发表于 2013-9-6 18:39:41 | 显示全部楼层
屏蔽了     一直卡死在那里
回复 支持 反对

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-9-6 18:41:08 | 显示全部楼层
回复【8楼】gujie:
---------------------------------
那就不清楚了啊,我这读文件正常。16G的TF卡

或是你把4b关了试试看,SD初始化那里

  if (errorstatus == SD_OK)
  {
    //errorstatus = SD_EnableWideBusOperation(SDIO_BusWide_4b);
  } 
回复 支持 反对

使用道具 举报

2

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2013-9-6
在线时间
19 小时
发表于 2013-9-6 18:45:30 | 显示全部楼层
你所指的  block大小  指的是 SDCardInfo.CardBlockSize 所读的大小吗?
回复 支持 反对

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-9-6 18:50:39 | 显示全部楼层
回复【10楼】32458731:
---------------------------------
是的
回复 支持 反对

使用道具 举报

2

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2013-9-6
在线时间
19 小时
发表于 2013-9-6 19:09:14 | 显示全部楼层
再问下,假如:卡的大小为1G  扇区大小是512。
   
我要是想在其中填入4个字节 ,是不是必须先全部读出4个字节所处的那个块(512),然后在外边修改好后,用SD_WriteBlock()写进去。是不是只能这样气操作呀? ???

能不能用 SD_WriteBlock()指定起始位置,块大小设为4来直接写入呀?
回复 支持 反对

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-9-6 19:47:57 | 显示全部楼层
回复【12楼】32458731:
---------------------------------
这个我没有研究过,我直接挂了文件系统,就没再看这个地方。
回复 支持 反对

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-9-6 20:29:11 | 显示全部楼层
回复【4楼】gujie:
---------------------------------
我在我的板子又测试下程序,读取字库正常。程序应该没有问题。
回复 支持 反对

使用道具 举报

8

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2012-10-31
在线时间
0 小时
 楼主| 发表于 2013-9-7 11:30:25 | 显示全部楼层
回复【14楼】ricefat:
---------------------------------
你好,昨天那个,我今天有测试了一下          换了一张卡   是可以读写的               但是写的情况,和我上面描述的一模一样。。。。。
回复 支持 反对

使用道具 举报

8

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2012-10-31
在线时间
0 小时
 楼主| 发表于 2013-9-7 12:30:10 | 显示全部楼层
回复【5楼】ricefat:
---------------------------------
我程序里面什么都没干        就一个定时器,然后触发SD写操作            就出现这样的情况         会不会是SD卡,物理层方面的原因??、
回复 支持 反对

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-9-7 17:38:10 | 显示全部楼层
回复【16楼】gujie:
---------------------------------
具体的测试我就没做过了,不过如果真的有这种情况,可能你需要修改你的程序了。在数据采集或是缓冲方面要做修改。
回复 支持 反对

使用道具 举报

8

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2012-10-31
在线时间
0 小时
 楼主| 发表于 2013-9-8 12:17:04 | 显示全部楼层
回复【17楼】ricefat:
---------------------------------
嗯    好的  谢谢解答
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2021-8-2
在线时间
3 小时
发表于 2023-8-1 14:05:14 | 显示全部楼层
您好,想问下您这个问题解决了嘛,想请教下如何解决,我也遇到这样的问题了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 04:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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