OpenEdv-开源电子网

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

ALIENTEK_STM32_SDIO+4位_DMA模式(寄存器+精简+稳定版)驱动,长期运行,会死。

[复制链接]

4

主题

11

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2014-11-27
在线时间
0 小时
发表于 2015-1-21 14:23:33 | 显示全部楼层 |阅读模式
5金钱
用的是原子的 ALIENTEK_STM32_SDIO+4位_DMA模式(寄存器+精简+稳定版)驱动,项目上的要求是1s往sd卡 写一次数据,长期运行后 偶尔会死在截图红色箭头这里,请问各位 大概是怎样的原因呢?谢谢

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-1-21 17:18:53 | 显示全部楼层
禁止中断试试.
我发现SDIO操作时受到中断,则容易死
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2014-11-27
在线时间
0 小时
 楼主| 发表于 2015-1-22 08:55:33 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
禁止sdio的中断,还是系统的其他的中断?
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2014-11-27
在线时间
0 小时
 楼主| 发表于 2015-1-22 09:05:00 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
static u8 DeviceMode=SD_DMA_MODE;     //工作模式,注意,工作模式必须通过SD_SetDeviceMode,后才算数.这里只是定义一个默认的模式(SD_DMA_MODE)
是把这个模式改为SD_POLLING_MODE 这样吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-1-22 23:26:01 | 显示全部楼层
回复【3楼】ouyang1990:
---------------------------------
所有中断。
回复【4楼】ouyang1990:
---------------------------------
我们的模式设置,最终是在SD卡初始化函数里面配置的,你这修改没用。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2014-11-27
在线时间
0 小时
 楼主| 发表于 2015-1-23 08:54:18 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
恩,后来我看到了,在初始化里面 看到了,改成了查询模式,不过,文件 读写都不成功。
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2014-11-27
在线时间
0 小时
 楼主| 发表于 2015-1-23 08:57:52 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
既然长期运行会死在 while循环里面,出不来,跟你前面的一样,加了个timeout,这样可以吗?
//检查卡是否正在执行写操作
//pstatus:当前状态.
//返回值:错误代码
SD_Error IsCardProgramming(u8 *pstatus)
{
  vu32 respR1 = 0, status = 0;
        u32 timeout=0;
   SDIO_Send_Cmd(SD_CMD_SEND_STATUS,1,(u32)RCA<<16); //发送CMD13     
   status=SDIO->STA;
        timeout=SDIO_DATATIMEOUT;
while((!(status&((1<<0)|(1<<6)|(1<<2))))&&timeout)
        {
            status=SDIO->STA;//等待操作完成
            timeout--;
        }
        if(timeout==0)return SD_DATA_TIMEOUT;
    if(status&(1<<0)) //CRC检测失败
{
SDIO->ICR|=1<<0; //清除错误标记
return SD_CMD_CRC_FAIL;
}
    if(status&(1<<2)) //命令超时 
{
SDIO->ICR|=1<<2; //清除错误标记
return SD_CMD_RSP_TIMEOUT;
}
  if(SDIO->RESPCMD!=SD_CMD_SEND_STATUS)return SD_ILLEGAL_CMD;
SDIO->ICR=0X5FF;   //清除所有标记
respR1=SDIO->RESP1;
*pstatus=(u8)((respR1>>9)&0x0000000F);
return SD_OK;
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-1-23 23:59:05 | 显示全部楼层
回复【7楼】ouyang1990:
---------------------------------
试试吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-26 14:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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