OpenEdv-开源电子网

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

SDIO里面的读写函数一定要是四字节对齐的数组吗?如果不是 是不是会出错?

[复制链接]

115

主题

548

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2100
金钱
2100
注册时间
2013-11-27
在线时间
518 小时
发表于 2015-4-7 16:25:05 | 显示全部楼层 |阅读模式
5金钱
SDIO里面的读写函数一定要是四字节对齐的数组吗?如果不是 是不是会出错?


原子的例程里面的里面单独写的两个函数,就是为了四字节对齐。现在我做的一个程序,跑了一上午了,中午吃了个饭回来,然后就卡死了。昨天我在家里把SDIO换成了原子的例程了,然后 只要点开mp3播放 程序就根本动不了,后来又还原了。

我看到论坛有一个人发的官方SDIO完美解决办法,
第一,把fatfs的多次读写去掉,我仿真看了的,根本就没有用到多次读写,count只会等于1.
第二,就是把读写函数里面,配置DMA的设置 放在上面去。然后我也试了的,结果还是有时候会卡死。


我在我的程序里面,只要是open和close的操作都加了关闭滴答时钟。如果不加的话,程序完全动不了。

还有一个问题,使用ucos的话,如果使用了中断,就需要加进入临界区的函数,然后中断的那个标志加1,貌似不加 也是可以的。

最佳答案

查看完整内容[请看2#楼]

1,字节对齐是要的。 2,SDIO我们现在在M3,M4都可以跑得比较好,不会出现你这种卡死的情况。 注意点:1,fatfs操作的时候,一定要锁死文件系统,否则可能造成hardfault。 2,SDIO读写操作的时候,关闭全局中断/进入临界区。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-7 16:25:06 | 显示全部楼层
1,字节对齐是要的。
2,SDIO我们现在在M3,M4都可以跑得比较好,不会出现你这种卡死的情况。
注意点:1,fatfs操作的时候,一定要锁死文件系统,否则可能造成hardfault。
2,SDIO读写操作的时候,关闭全局中断/进入临界区。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

115

主题

548

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2100
金钱
2100
注册时间
2013-11-27
在线时间
518 小时
 楼主| 发表于 2015-4-7 20:22:56 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我没有用ucos的时候,SDIO没有对齐很好啊,一点问题没有啊。


你说的锁死文件系统是如何操作啊?
是不是那个file的结构体?

SDIO读写操作的时候关闭全局中断 ,那DMA中断 不是也进不去了啊?我只是单独的把滴答时钟关闭了。


SysTick->CTRL&=~SysTick_CTRL_TICKINT_Msk;    //????SYSTICK????
res = f_mount(0, &fs);  // ????????????
res = f_open(&file, font, FA_OPEN_EXISTING | FA_READ);   //?ò??×???????  
if(res != FR_OK)  
{  
//?ò???§°?????????           
}            
res = f_lseek(&file,oft);                            //?????×???· 
res = f_read(&file, ptr, bytes, &br);                //????32??×??????ó????
res = f_close(&file);                                //??±?×???
     f_mount(0, 0);                                      //????????????
SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;    //????SYSTICK????


第一行 和最后一行,这只是一个子函数。


最后一个问题,不是用了ucos的话,只要进入中断就要加两个函数吗?我不加的话,也没什么问题列
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-7 20:29:25 | 显示全部楼层
回复【3楼】wmh19910511:
---------------------------------
你可以不加,死的不明不白,就勿谓言之不预....
一时半会可以,不能包你高枕无忧,你不去预防问题,问题自然会找上你。放心吧。等你的批量产品到客户手里,就知道问题了。
到时候看你还偷着乐不了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-7 20:30:26 | 显示全部楼层
SDIO的文件系统读写处理,可以参考探索者的处理方式,看探索者综合实验的diskio.c也许可以帮到你。
另外,凡是你认为不加可以运行的,不需要告诉我了,自己用着爽就好,我不会羡慕的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

115

主题

548

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2100
金钱
2100
注册时间
2013-11-27
在线时间
518 小时
 楼主| 发表于 2015-4-7 22:06:01 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
我不是那个意思啊。。刚刚看了数据手册,上面写的需要四字节对其,还有我看了探索者的综合例程里面SDIO的处理,貌似 使用的是查询的方式列,里面把所有中断都关闭了。是没有用到SDIO中断。可是我使用的DMA方式,DMA方式里面是要看SDIO中断的。


不知道我理解 的对不对。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-24 01:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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