首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于无文件系统SD卡分区的框架

用于无文件系统SD卡分区的框架
EN

Stack Overflow用户
提问于 2013-11-04 03:48:33
回答 2查看 246关注 0票数 0

(这个项目可能会在SuperUser或电子网站上讨论,但这个问题的焦点是实现它的可编程软件。)

我有一个嵌入式系统,它以大约100KB/s的速度产生数据,需要在Windows PC上存储和稍后处理。串行数据流可以工作,但内部存储具有明显的优势,即不需要在进行数据收集的房间中配备笔记本电脑和布线。

我的电路板有一个SD卡插座(SPI连接),我以前曾尝试将文件写入FAT文件系统。但事实证明这是一个可怕的瓶颈,尤其是因为,为了支持任意时间增长的任意长度的多个文件,FAT中的文件访问除了实际内容之外,还需要读写多层元数据--分配表本身和目录,而这些元数据不能完全放入微控制器RAM中,因此卡访问的数量被放大。更糟糕的是,一些任务,如查找新的空闲块,在卡大小方面具有线性复杂性。

对FAT的另一个打击是,如果没有事先干净的卸载,它很容易在断电的情况下损坏数据,而且我的系统没有任何可以启动卸载的用户界面。我知道包括断电中断和电容在内的技术可以让处理器和SD卡多工作几毫秒,但由于这些技术无论如何都不能帮助热移除,而且我现有的电路也没有这些技术,我正在尝试实现一种仅限崩溃的存储设计。

因此,我决定跳过文件系统,只使用卡作为原始的块序列。但是,我不希望我的用户被邀请重新格式化包含数据的卡片

因此,我想要对这些卡进行分区,并在前面放置一个小FAT分区,以便OSes能够识别,并带有一个解释性测试文件。用户需要能够更换卡,因此我需要在我的PC应用程序中自动执行分区和格式化过程。

原始访问可以通过调用CreateFile("\\\\.\\PhysicalDisk3")和类似的路径来实现,这可以在可移动磁盘上完成,而不需要管理员权限。尽管如此,这是我不希望自己写的代码。而且,在更改后,操作系统仍必须被告知重新扫描卷。

是否有内置于Windows或第三方开源框架的API,用于对SD卡进行分区,而无需直接按位访问分区表?如果没有,我应该如何在更改分区后让Windows重新扫描卷?我更喜欢在XP和更新版本上工作的方法。

EN

回答 2

Stack Overflow用户

发布于 2013-11-04 15:21:52

您的问题似乎与我目前在我们自己的一个项目中必须解决的问题几乎完全相同。

我建议让卡上的fat32文件系统保持不变。

但是,您可以创建一个或多个大的容器文件,其中包含连续的块或预缓存的分配表。

这甚至可以通过嵌入式系统本身来完成。

elm-chan's FatFs

然后,您可以访问本地容器中的所有块,而无需进一步访问fat,但该卡可以由任何操作系统处理,甚至普通用户也可以复制文件。

用于分配连续容器的Smaple函数:

Allocate a contiguous area to the file

然后,您可以在没有文件系统库的情况下访问这些块,只有在第一次访问容器时才能确定它的起始位置。

票数 1
EN

Stack Overflow用户

发布于 2013-11-04 04:49:00

看起来Windows似乎使用IOCTL机制进行分区管理。特别是,IOCTL_DISK_SET_DRIVE_LAYOUT_EX control code看起来非常有用。

我会进一步调查,然后更新这个答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19757263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档