打印
[STM32F1]

USB Mass_Storage

[复制链接]
2203|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bao19830224|  楼主 | 2014-2-21 22:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟最近研究ST官方的Mass_Storage代码。在学习过程中,弄清楚了read与write等基本操作后,突然有这样一个疑问:删除数据操作是怎样实现的?
为了搞清楚,我新建一个文本文件copy到U盘中,并用USBlyzer进行了抓包,发现了其存储的逻辑地址,然后我删除该文件,并再次抓包,我发现Host并没有对存储地址进行任何操作,那它是怎样在存储介质上真正删除数据的呢?十分迷茫,求指点,多谢
另外,我用的存储介质是STM3210E上自带的Nand Flash
沙发
mmuuss586| | 2014-2-22 08:51 | 只看该作者

使用特权

评论回复
板凳
香水橙| | 2014-2-22 12:35 | 只看该作者
删除文件时根本不用对文件本身的存储地址进行操作,只需要把对应该文件的目录项标记为删除就可以了;正因为如此,在删除文件后,才有可能恢复被误删除的文件。

使用特权

评论回复
地板
bao19830224|  楼主 | 2014-2-22 23:32 | 只看该作者
本帖最后由 bao19830224 于 2014-2-22 23:34 编辑
香水橙 发表于 2014-2-22 12:35
删除文件时根本不用对文件本身的存储地址进行操作,只需要把对应该文件的目录项标记为删除就可以了;正因为 ...


感谢您的回答

但是这样的话,岂不是被删除文件的数据还是存储在Nand Flash中?长此以往下去,虽然表面上看磁盘是空的,但是实际已经被删除文件的数据填满?

我第一次做MSC,可能对这个过程理解有所偏差,还请指正

使用特权

评论回复
5
bao19830224|  楼主 | 2014-2-23 19:18 | 只看该作者
自己顶顶

使用特权

评论回复
6
香水橙| | 2014-2-23 20:48 | 只看该作者
没错,虽然表面上看磁盘是空的,但是实际已经被删除文件的数据填满。

但是,在需要拷贝新数据之前,固件程序会先擦除已经标记为空的数据块,然后再写入新数据;从这个过程可以看出,擦除是在写入新数据之前完成,而不是在删除文件时完成。

使用特权

评论回复
7
bao19830224|  楼主 | 2014-2-24 09:48 | 只看该作者
香水橙 发表于 2014-2-23 20:48
没错,虽然表面上看磁盘是空的,但是实际已经被删除文件的数据填满。

但是,在需要拷贝新数据之前,固件程 ...

刚利用了抓包软件仔细看了下,确实是重新利用了删除文件的逻辑地址,多谢指教

使用特权

评论回复
8
kz_zank| | 2014-2-24 11:00 | 只看该作者
这个和电脑的硬盘一样,并没有删除数据实体,所以你会感觉删文件比粘贴文件要快很多

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

44

帖子

1

粉丝