OpenEdv-开源电子网

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

使用STM32读取内存卡数据,使用SPI通信,中断是否会影响内存卡读写?

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-11-4
在线时间
1 小时
发表于 2016-11-4 19:18:26 | 显示全部楼层 |阅读模式
1金钱
使用UCOSIII系统,一共两个任务,一个读数据,一个负责往内存卡写数据,任务的轮转或中断是否会影响内存卡的读写?谢谢

最佳答案

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

如果是SPI读写内存卡,只有这种情况才会出错:任务A正在读/写数据的时候被任务B打断,然后任务B直接开始读/写数据。也就是说一次读、写操作不能被另一次读、写操作打断。 除此之外,不会有影响。因为SPI是同步通信,不存在读写超时的情况(比如读写中途加入断点CPU停止,继续运行之后可以继续读写。像是IIC、异步串口这样的对时序有严格要求的通信就不行)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-11-4 19:18:27 | 显示全部楼层
如果是SPI读写内存卡,只有这种情况才会出错:任务A正在读/写数据的时候被任务B打断,然后任务B直接开始读/写数据。也就是说一次读、写操作不能被另一次读、写操作打断。
除此之外,不会有影响。因为SPI是同步通信,不存在读写超时的情况(比如读写中途加入断点CPU停止,继续运行之后可以继续读写。像是IIC、异步串口这样的对时序有严格要求的通信就不行)
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-11-4
在线时间
1 小时
 楼主| 发表于 2016-11-4 19:19:29 | 显示全部楼层
刚注册,金钱不多,希望帮我解答
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-11-4
在线时间
1 小时
 楼主| 发表于 2016-11-4 21:58:58 | 显示全部楼层
yyx112358 发表于 2016-11-4 19:18
如果是SPI读写内存卡,只有这种情况才会出错:任务A正在读/写数据的时候被任务B打断,然后任务B直接开始读/ ...

谢谢了,有点理解了
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-11-4
在线时间
1 小时
 楼主| 发表于 2016-11-5 17:23:46 | 显示全部楼层
yyx112358 发表于 2016-11-4 19:18
如果是SPI读写内存卡,只有这种情况才会出错:任务A正在读/写数据的时候被任务B打断,然后任务B直接开始读/ ...

往内存卡写数据的过程中,切换到优先级更高的另外一个任务,会导致写入出错或者丢失数据吗?
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-11-5 22:25:13 | 显示全部楼层
jnsdudd 发表于 2016-11-5 17:23
往内存卡写数据的过程中,切换到优先级更高的另外一个任务,会导致写入出错或者丢失数据吗?

只要另一个任务没有进行SD卡读写就行
所以说建议把SD卡视作一个共享资源,分配一个信号量来进行保护。例如在SD卡读写函数开头加入OSSemPend(),读写完毕后用OSSemPost ()释放
回复

使用道具 举报

7

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2016-10-11
在线时间
43 小时
发表于 2016-11-5 23:29:33 | 显示全部楼层
楼上正解,,,创建信号量,,初值设置为1,然后读写SD卡的时候,第一次没写完没有释放信号量,,其他的写就不能打断,数据得到保护
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-11-4
在线时间
1 小时
 楼主| 发表于 2016-11-7 09:34:30 | 显示全部楼层
yyx112358 发表于 2016-11-5 22:25
只要另一个任务没有进行SD卡读写就行
所以说建议把SD卡视作一个共享资源,分配一个信号量来进行保护。例 ...

谢谢,我确实也是这么做的,确实没有丢失数据
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-11-4
在线时间
1 小时
 楼主| 发表于 2016-11-7 09:34:58 | 显示全部楼层
dingyu000111 发表于 2016-11-5 23:29
楼上正解,,,创建信号量,,初值设置为1,然后读写SD卡的时候,第一次没写完没有释放信号量,,其他的写 ...

是的是的,我确实没有丢失数据
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 00:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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