搜索
bottom↓
回复: 45

求助 关于SD卡把拔出,写坏文件系统的解决方法!

[复制链接]

出0入0汤圆

发表于 2012-11-24 12:53:52 | 显示全部楼层 |阅读模式
本帖最后由 BSF_RL 于 2012-11-24 12:57 编辑

我用的单片机是LPC1788 外接了一个SD卡,用的是SD卡接口,软件方面用的是UCOSII+fatfs,硬件卡槽用的是带PUSH的那种。现在的问题是单片机在操作SD卡的时候,把SD卡拔出,SD卡上的文件要么是打不开,要么是整个卡都打不开。现在想解决这个在操作SD卡的过程中移除SD卡的问题。在卡槽上没有检测要移除卡这个动作的机械,也不能向电脑那样“移除设备”。如何才能安全不损坏数据地移除SD? 等待你们的答案!谢谢!(我所谓的安全不损坏数据是指不损坏文件系统)

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入34汤圆

发表于 2012-11-24 15:00:06 | 显示全部楼层
若您使用的 FatFs 是使用 SPI 模式来对您的 SD 卡存取资料的话,您只要将 SPI 的接脚中的 CS 脚给他 Deselected 就可以将 SD 卡给予取出了! 其 CS 接脚可参考下图,希望能帮到您!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-11-24 15:12:17 | 显示全部楼层
xyz543 发表于 2012-11-24 15:00
若您使用的 FatFs 是使用 SPI 模式来对您的 SD 卡存取资料的话,您只要将 SPI 的接脚中的 CS 脚给他 Deselec ...

移除SD卡是随机的 CPU DESELECT CS 的前提是你知道要移除SD卡,我现在检测不到这个动作,

出0入34汤圆

发表于 2012-11-24 15:20:53 | 显示全部楼层
BSF_RL 发表于 2012-11-24 15:12
移除SD卡是随机的 CPU DESELECT CS 的前提是你知道要移除SD卡,我现在检测不到这个动作, ...

照您的意思是您正在对 SD 卡做写入的动作时又同时要将这 SD 卡从卡座上移除吗? 若是这样的话就我所知目前的 SD 卡都不支持热抽取的,哈~

出0入0汤圆

 楼主| 发表于 2012-11-24 15:43:18 | 显示全部楼层
xyz543 发表于 2012-11-24 15:20
照您的意思是您正在对 SD 卡做写入的动作时又同时要将这 SD 卡从卡座上移除吗? 若是这样的话就我所知目前 ...

写的过程中 热抽取了 如果能避免损坏文件系统也可以

出0入0汤圆

发表于 2012-11-24 15:48:09 | 显示全部楼层
SD卡的VDD使用三极管或者MOS管控制如下图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-11-24 15:49:27 | 显示全部楼层
在屏幕上写明正在写SD卡,切勿抽出,如果真被强行抽走,就在屏幕写“FUCU you! 损坏不赔!”

出0入34汤圆

发表于 2012-11-24 15:52:56 | 显示全部楼层
BSF_RL 发表于 2012-11-24 15:43
写的过程中 热抽取了 如果能避免损坏文件系统也可以

那我也很好奇,就就如您所说的,让我们一起期待这 SD 卡正于写入时可以热抽取然后后不使得文件系统受损的高人吧!

若真是有办法的话,那微软的 Windows 也无需对 SD 卡及 USB 随身碟或随身硬碟做卸载退出的动作了,而 Android 在那 SD 卡的选项中也无须有一个卸载 SD 卡的选项了!

出0入0汤圆

发表于 2012-11-24 16:03:30 | 显示全部楼层
也可以注意先后顺序,1.先写扇区,2.接着写FAT表,3.最后写目录,如此在1处被打断,几乎无害;2、3处被打断,只是丢失的簇;

出0入0汤圆

 楼主| 发表于 2012-11-24 16:10:02 | 显示全部楼层
xyz543 发表于 2012-11-24 15:52
那我也很好奇,就就如您所说的,让我们一起期待这 SD 卡正于写入时可以热抽取然后后不使得文件系统受损的高 ...

是一个项目上遇到的问题 领导要求把信息不时的写到SD卡上,本来是可以在操作面板上移除SD卡 然后再拔出SD卡的,可领导说了 现场的操作人员懒得去移除SD卡,会直接把SD卡拔出来的。所以就出现了这个歌问题!

出0入34汤圆

发表于 2012-11-24 16:29:58 | 显示全部楼层
BSF_RL 发表于 2012-11-24 16:10
是一个项目上遇到的问题 领导要求把信息不时的写到SD卡上,本来是可以在操作面板上移除SD卡 然后再拔出SD ...

您的问题就我所知目前无解,因为若正对 SD 卡进行写入资料的当时将 SD 卡给取出又要保证不丢失当时的数据亦或不破坏文件格式的话,这得靠一些运气了! 其运气的方式如下:

if(运气好){资料不留失;一切正常}
else {就没救了!}

不过硬是要满足您的那什么领导的这般择疼人的要求也是可以的,就是在您的装置内也装上相同容量的 SD 或 EEPROM,要存资料就先对内部的记忆体存,再对外部的 SD 卡存,但最后都要有类似 Check Sum 的机制! 若是要取资料的话,就先取外部的资料,若有错误的话就取内部的资料来使用顺便修复外部的 SD 卡损毁的文件,另在于开机时就将内外的资料都核对一遍确保资料都是相同与正常的,您若是要知道更详细的做法,建议您可以参考网上对于硬盘做 RAID 1 的叙述.

出400入0汤圆

发表于 2012-11-25 10:46:46 | 显示全部楼层
BSF_RL 发表于 2012-11-24 16:10
是一个项目上遇到的问题 领导要求把信息不时的写到SD卡上,本来是可以在操作面板上移除SD卡 然后再拔出SD ...

sd卡槽是有插卡检测的,图片中的卡槽有11个针脚,9根数据1个写保护1个插卡检测,把插卡检测用上就行了。没有插卡检测的话就是你产品设计的问题了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入90汤圆

发表于 2012-11-25 11:15:48 | 显示全部楼层
只能说你们领导想让你解决一个世界难题!鄙视他不切实际!能解决世界问题,你还在他手下干啊!

出0入0汤圆

发表于 2012-11-24 12:53:53 | 显示全部楼层
要是懒得移除这个原因的话那就做个指示灯,这个灯亮的时候不能拔出卡,要还是不听话,就直接安装个锁定装置,只有不读写的时候才能拔出。

出0入0汤圆

发表于 2012-11-25 15:12:05 | 显示全部楼层
锁定装置,只有不读写的时候才能拔出。

出0入0汤圆

发表于 2012-11-25 15:21:09 | 显示全部楼层
弄个小匣

出0入0汤圆

发表于 2012-11-25 15:25:17 | 显示全部楼层
使用FAT文件系统本身不能保证热插拔后数据完整性,你需要使用日志式的文件系统。

出0入34汤圆

发表于 2012-11-25 15:45:45 | 显示全部楼层
13 楼的 honami520 兄已经充分的将我的想法给完整的表述出来了,楼主呀! 这就是我一直不太好明讲的话了,呵呵~

出0入0汤圆

 楼主| 发表于 2012-11-26 16:06:11 | 显示全部楼层
最后商定的方法是: 在SD卡槽旁加一个LED 和 按钮 按住按钮当灯熄灭后方可拔出SD卡  谢谢各位!

出0入8汤圆

发表于 2012-11-26 16:19:01 | 显示全部楼层
BSF_RL 发表于 2012-11-24 16:10
是一个项目上遇到的问题 领导要求把信息不时的写到SD卡上,本来是可以在操作面板上移除SD卡 然后再拔出SD ...

可以解决,不用FAT文件系统

出0入0汤圆

 楼主| 发表于 2012-11-29 08:48:07 | 显示全部楼层
canspider 发表于 2012-11-26 16:19
可以解决,不用FAT文件系统

不用FAT 文件系统  那用什么文件系统?

出0入0汤圆

发表于 2012-11-29 08:57:46 | 显示全部楼层
YAFF,或者ext3。
如果是只读的卡,干脆做成cramfs得了。

出0入8汤圆

发表于 2012-11-29 09:04:42 | 显示全部楼层
BSF_RL 发表于 2012-11-29 08:48
不用FAT 文件系统  那用什么文件系统?

楼上已经回答了
说简单点,你需要一个增量式的文件系统,只写新的,不改以前的就行了
有些数据库就是这样的,如果你要删除一条记录,那就在后面加一项,删除xx内容
这样可以保证任何时候出故障都能还原以前所有的操作信息

出0入0汤圆

发表于 2012-11-29 09:28:01 | 显示全部楼层
BSF_RL 发表于 2012-11-29 08:48
不用FAT 文件系统  那用什么文件系统?

自己直接读写扇区

出0入0汤圆

发表于 2012-11-29 15:30:12 | 显示全部楼层
其实卡的主控里面已经考虑了这个问题了,如果读写过程中出现了坏文件系统的问题的话你的卡的FLASH可能是黑片的,不过市面上很多卡都是用黑片的了。

出0入0汤圆

发表于 2012-12-6 14:56:53 | 显示全部楼层
chhaich 发表于 2012-11-29 15:30
其实卡的主控里面已经考虑了这个问题了,如果读写过程中出现了坏文件系统的问题的话你的卡的FLASH可能是黑 ...

黑片是什么意思?莫非是山寨的SD卡控制器

出0入0汤圆

发表于 2012-12-7 10:07:11 | 显示全部楼层
feng200808 发表于 2012-12-6 14:56
黑片是什么意思?莫非是山寨的SD卡控制器

       黑片是指卡内的FLASH,一般合格的FLASH是没有问题的,我们称为白片。但是国内的U盘和SD卡用的基本都是不合格的FLASH(因为便宜),我们称为黑片。不合格主要就是容量不足的,比如4G的只有1点几G可以用或者2点几G、3点几G可以用,量产的时候就量产成1G的或者2G的卡或者U盘。因为FLASH是不合格的,所以FLASH很容易写坏,也就是数据在里面就极容易丢失。一旦坏了用主控厂家提供的量产工具重新量产还是可以用的,但是对一般用户来说就只能报废了。一般来说如果用的FLASH是白片,国产的主控对数据的保护也是很到位的,但是用的如果是黑片,热插拔就很容易出问题了。

出0入0汤圆

发表于 2012-12-7 10:16:31 | 显示全部楼层
我对SD卡使用的惯常操作就是读写之前先确认卡插在卡座里面,如果发现卡被拔出,那么就要走异常的流程。如果遇到最坏的情况,检测的时候卡是在卡座上的,但是进去写数据的时候卡拔出了,那也只是一个扇区的数据出现问题,假如正在写FAT,也只是坏了一个FAT而已,还有一个备份的FAT可以恢复。通常像这种突然拔卡导致卡掉电的情况下,卡的主控会在很短的时间内做出保护动作的。试着用个好一点的卡来试试,几块钱的张的卡就不要用了,增加调试烦恼。

出0入0汤圆

发表于 2012-12-7 13:50:31 | 显示全部楼层
chhaich 发表于 2012-12-7 10:07
黑片是指卡内的FLASH,一般合格的FLASH是没有问题的,我们称为白片。但是国内的U盘和SD卡用的基本 ...

学习了,谢谢你的热心解释。。。

出0入0汤圆

发表于 2012-12-18 10:20:38 | 显示全部楼层
如果要从软件上避免(不是解决),17#正解。
如果要从根本上解决,只有指示灯是不行的,必须借助机械装置,禁止拔卡。

出0入0汤圆

发表于 2012-12-18 10:21:43 | 显示全部楼层
补充,如果用FAT,则你需要跟Windows或者DOS一样,每次SD卡插入做个ScanDisk。
注意这只是补救,不能避免问题,跟不会解决问题。

出0入0汤圆

发表于 2012-12-18 11:25:04 | 显示全部楼层
给sd卡卡槽加个盖子,盖子打开就自动停止写。功能跟按钮差不多。

出0入42汤圆

发表于 2012-12-18 11:57:33 | 显示全部楼层
LS正解。
做个盖子,一旦打开,立即将缓存中的文件写入卡中,并完成卸载操作。
一般来说,很短的时间内就能完成。

出0入0汤圆

发表于 2012-12-21 23:26:51 | 显示全部楼层
是的,用个盖子保护者,你时刻监测着盖子被去掉,然后就卸载卡,你老板的要求是对的!

出0入0汤圆

发表于 2012-12-22 12:43:24 | 显示全部楼层
我也是建议装盖子,监测着盖子,但老板若还觉得麻烦,你就改成光电近接侦测,

也要考虑到能避免一般状况误判的结构,如..干扰,反射....

使用此法后还能有何刁难要求,请各位踊跃提出,  单指 "取出方便" 这方面,不涉及各种电气条件.

出0入0汤圆

发表于 2012-12-22 14:32:01 | 显示全部楼层
NOKIA N72手机的内存卡就是有个东西盖着,你把它打开它就提示内存卡已经拔出了。

出0入0汤圆

发表于 2012-12-23 12:51:36 | 显示全部楼层
SD卡槽加盖子方案不错,检测到盖子打开就不对卡进行读写操作,盖子盖上就对卡重新初始化。

出0入0汤圆

发表于 2012-12-30 20:17:34 | 显示全部楼层
收藏,以后也会用SD卡这类的东东

出0入0汤圆

发表于 2013-1-4 09:00:02 | 显示全部楼层
受教了,谢谢!

出0入4汤圆

发表于 2014-2-28 11:32:41 | 显示全部楼层
学习了
!!

出0入0汤圆

发表于 2014-4-15 17:38:15 | 显示全部楼层
写得数据量不大的话,写之前,可以检测SD卡,再去写数据,还是很快的,出事故的可能性也很低!!!

出0入0汤圆

发表于 2014-4-15 18:14:12 | 显示全部楼层
手机的我没关机也没事啊

出0入0汤圆

发表于 2014-4-15 18:41:35 | 显示全部楼层
chhaich 发表于 2012-12-7 10:07
黑片是指卡内的FLASH,一般合格的FLASH是没有问题的,我们称为白片。但是国内的U盘和SD卡用的基本 ...

其实黑片白片都是不合格品。

出0入0汤圆

发表于 2014-4-24 10:52:31 | 显示全部楼层
xyz543 发表于 2012-11-24 15:00
若您使用的 FatFs 是使用 SPI 模式来对您的 SD 卡存取资料的话,您只要将 SPI 的接脚中的 CS 脚给他 Deselec ...

应该还需要在fatfs的文件系统中卸载工作区。
这样下次插入使用时才会重新挂载。

出0入34汤圆

发表于 2014-4-24 11:17:54 | 显示全部楼层
lit 发表于 2014-4-24 10:52
应该还需要在fatfs的文件系统中卸载工作区。
这样下次插入使用时才会重新挂载。 ...

關於卸载的操作我想大家都應該知道,我的意思是只樓主這帖的標題所述,是面向不暗牌理出牌的操作方式來思考,若全人類都知道目前要取出 SD 卡前需先操作卸载,我估計樓主也不會發這帖來提問了,不是嗎?...

出0入0汤圆

发表于 2014-5-11 07:41:31 | 显示全部楼层
学习了,什么是黑片什么是白片
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 07:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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