SD卡文件系统

凹特慢 2017-07-28 08:27:20
最近在做一个SD卡文件系统读写,有个问题没搞懂。SD卡和MCU是通过SDIO连接的,也就是WP,CD,SDIO1~SDIO3,CLK等信号连接。如果以文件系统形式读写SD卡,那SD卡的上述几个信号岂不是没作用,我觉得应该是有作用,这其中是怎么关联的啊?
...全文
525 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
of123 2017-08-03
  • 打赏
  • 举报
回复
引用 10 楼 zengzx0107 的回复:
[quote=引用 9 楼 of123 的回复:] 这里需要分层这个概念。 首先,如果从底层做起,你要借助这些信号线的功能,完成物理层的传输功能函数库,一般称为底层驱动。这些功能函数,是面向逻辑地址进行读写的。(实际上,在 SD 卡的底层,还有将逻辑地址对物理地址转换的 FTL 层和对 Flash 存储器读写的底层操作函数。)你可以将 SD 卡看作可随意读写的存储器。 很多情况下,SD 卡的物理层已经由 MCU 的 SD 接口模块以硬件方式提供了。实际上,如果没有这种模块,你以 GPIO 的方式去实现 SD 卡的读写,很难达到需要的速率。你需要做的,仅仅是利用它所提供的接口调用 SD 卡的物理层规范定义的命令,以及按照协议传输数据。你可以写一套函数来完成 SD 卡数据的写入和读出。 文件系统管理程序,应该建立在物理层的上面。在这一层,你只考虑文件系统数据的架构和维护,认为数据的读写都是天然的。 总结一下,可以这样理解:你所说的这些信号,是连接到 MCU 的 SD 接口模块的,由它来处理。如果你的 MCU 没有这种模块,建议你采用 SPI 模式来连接 SD 卡。因为物理层规范是规定 SD 卡必须支持 SPI 模式,且选择哪种模式由主机端决定。
您的意思,我在上层文件操作往SD里写文件和读文件,是上层来调用SD的驱动。其实最终还是靠SD的接口,也就是上述那几个信号线与MCU通讯的。但是至于文件系统怎么调用SD的驱动,不必深究。[/quote]完全正确。
凹特慢 2017-08-03
  • 打赏
  • 举报
回复
引用 9 楼 of123 的回复:
这里需要分层这个概念。 首先,如果从底层做起,你要借助这些信号线的功能,完成物理层的传输功能函数库,一般称为底层驱动。这些功能函数,是面向逻辑地址进行读写的。(实际上,在 SD 卡的底层,还有将逻辑地址对物理地址转换的 FTL 层和对 Flash 存储器读写的底层操作函数。)你可以将 SD 卡看作可随意读写的存储器。 很多情况下,SD 卡的物理层已经由 MCU 的 SD 接口模块以硬件方式提供了。实际上,如果没有这种模块,你以 GPIO 的方式去实现 SD 卡的读写,很难达到需要的速率。你需要做的,仅仅是利用它所提供的接口调用 SD 卡的物理层规范定义的命令,以及按照协议传输数据。你可以写一套函数来完成 SD 卡数据的写入和读出。 文件系统管理程序,应该建立在物理层的上面。在这一层,你只考虑文件系统数据的架构和维护,认为数据的读写都是天然的。 总结一下,可以这样理解:你所说的这些信号,是连接到 MCU 的 SD 接口模块的,由它来处理。如果你的 MCU 没有这种模块,建议你采用 SPI 模式来连接 SD 卡。因为物理层规范是规定 SD 卡必须支持 SPI 模式,且选择哪种模式由主机端决定。
您的意思,我在上层文件操作往SD里写文件和读文件,是上层来调用SD的驱动。其实最终还是靠SD的接口,也就是上述那几个信号线与MCU通讯的。但是至于文件系统怎么调用SD的驱动,不必深究。
of123 2017-08-03
  • 打赏
  • 举报
回复
这里需要分层这个概念。 首先,如果从底层做起,你要借助这些信号线的功能,完成物理层的传输功能函数库,一般称为底层驱动。这些功能函数,是面向逻辑地址进行读写的。(实际上,在 SD 卡的底层,还有将逻辑地址对物理地址转换的 FTL 层和对 Flash 存储器读写的底层操作函数。)你可以将 SD 卡看作可随意读写的存储器。 很多情况下,SD 卡的物理层已经由 MCU 的 SD 接口模块以硬件方式提供了。实际上,如果没有这种模块,你以 GPIO 的方式去实现 SD 卡的读写,很难达到需要的速率。你需要做的,仅仅是利用它所提供的接口调用 SD 卡的物理层规范定义的命令,以及按照协议传输数据。你可以写一套函数来完成 SD 卡数据的写入和读出。 文件系统管理程序,应该建立在物理层的上面。在这一层,你只考虑文件系统数据的架构和维护,认为数据的读写都是天然的。 总结一下,可以这样理解:你所说的这些信号,是连接到 MCU 的 SD 接口模块的,由它来处理。如果你的 MCU 没有这种模块,建议你采用 SPI 模式来连接 SD 卡。因为物理层规范是规定 SD 卡必须支持 SPI 模式,且选择哪种模式由主机端决定。
mcu_fan123 2017-08-03
  • 打赏
  • 举报
回复
引用 7 楼 mcu_fan123 的回复:
[quote=引用 楼主 zengzx0107 的回复:] 最近在做一个SD卡文件系统读写,有个问题没搞懂。SD卡和MCU是通过SDIO连接的,也就是WP,CD,SDIO1~SDIO3,CLK等信号连接。如果以文件系统形式读写SD卡,那SD卡的上述几个信号岂不是没作用,我觉得应该是有作用,这其中是怎么关联的啊?
如果你用的是四线的spi传输,那么你可以把你的系统理解为上位机,SD卡为下位机。首先CS引脚,也就是Chip Selction会被拉低以表明改下位机被选中以通讯,所以CS引脚被设置为输出,默认值为高电平。随后,你每传输一个数据,CLK时钟引脚都会输出相应的时钟信号,同时由于SPI的特性,在MOSI输出一个字符时,MISO会同时默认读入一个0xFF的字符到读寄存器。如果你用到中断的时候就要注意始终序列和读写寄存器清除的问题。[/quote] CS打错了,是chip selection
mcu_fan123 2017-07-30
  • 打赏
  • 举报
回复
引用 楼主 zengzx0107 的回复:
最近在做一个SD卡文件系统读写,有个问题没搞懂。SD卡和MCU是通过SDIO连接的,也就是WP,CD,SDIO1~SDIO3,CLK等信号连接。如果以文件系统形式读写SD卡,那SD卡的上述几个信号岂不是没作用,我觉得应该是有作用,这其中是怎么关联的啊?
如果你用的是四线的spi传输,那么你可以把你的系统理解为上位机,SD卡为下位机。首先CS引脚,也就是Chanel Selction会被拉低以表明改下位机被选中以通讯,所以CS引脚被设置为输出,默认值为高电平。随后,你每传输一个数据,CLK时钟引脚都会输出相应的时钟信号,同时由于SPI的特性,在MOSI输出一个字符时,MISO会同时默认读入一个0xFF的字符到读寄存器。如果你用到中断的时候就要注意始终序列和读写寄存器清除的问题。
jklinux 2017-07-28
  • 打赏
  • 举报
回复
首先确定一点先,如要读写sd上的内容肯定是需要你所提的信号吧。 sd上文件系统意味着有没有需要读写sd上的内容? 在操作系统里, 硬件由设备驱动负责的吧。 像linux里,sd卡被驱动后,设备驱动会产生设备文件/dev/mmcblk0p1 /dev/mmcblk0p2, 这样设备文件分别对应sd上的逻辑分区。你对sd分区的操作时是mount挂载上来再用的吧,当前对设备文件操作时,实际上是经过设备驱动产生相应的信号与sd卡进行通信的,用户只管调用驱动就可以了,驱动负责底层的信号而已
jklinux 2017-07-28
  • 打赏
  • 举报
回复
引用 2 楼 zengzx0107 的回复:
[quote=引用 1 楼 jklinux 的回复:] 首先确定一点先,如要读写sd上的内容肯定是需要你所提的信号吧。 sd上文件系统意味着有没有需要读写sd上的内容? 在操作系统里, 硬件由设备驱动负责的吧。 像linux里,sd卡被驱动后,设备驱动会产生设备文件/dev/mmcblk0p1 /dev/mmcblk0p2, 这样设备文件分别对应sd上的逻辑分区。你对sd分区的操作时是mount挂载上来再用的吧,当前对设备文件操作时,实际上是经过设备驱动产生相应的信号与sd卡进行通信的,用户只管调用驱动就可以了,驱动负责底层的信号而已
sd上文件系统需要读写SD卡上的内容。需要往SD卡保存数据。那这样是不是不用SDIO来读写数据,直接用文件形式往里读写数据呢?[/quote] 一个文件需要存起来肯定是得把文件的数据存放到sd卡的扇区上的, 也就是肯定需要用SDIO产生时序信号与sd卡通信。 你可以查下文件系统里的操作是否有调用sdio的驱动, 单片机应是用spi的接口来操作sd卡。 其实这个文件最简单的证明手段就是,用示波器抓取在文件系统里的操作的信号看看就一目了然了
Acuity. 2017-07-28
  • 打赏
  • 举报
回复
引用 4 楼 zengzx0107 的回复:
[quote=引用 3 楼 qq_20553613 的回复:] 1、文件即是数据,通俗理解,把文件当做一堆数据,这堆数据根据我们自己定义的格式写入sd卡,对于最底层同样是一个字节一个字节写入sd卡; 2、对于用户来说,加入文件系统,那么操作最小的单位就是“文件”了,如果想理解文件系统,可以查看源码,比如开源的FAT文件系统。
您说的意思我理解。我的意思是假设我们MCU外设相机拍到的视频以文件形式写到SD卡,那SD卡与MCU硬件上连接的是SDIO,clk,WP,CD这些信号。那这些信号与文件系统是怎么关联起来的?因为MCU读写操作SD卡肯定是通过上述几个信号[/quote] 如果你移植过文件系统(如FAT)在单片机上,就明白这是如何关联的(就几个接口),真正要完全理解,那就得研究透文件系统源码。很多时候我们都是做应用,写好SD卡驱动,然后关联到FAT底层接口上,然后就使用文件系统,置于文件系统是如何工作的,还是需要点功力才能看懂所有源码。
凹特慢 2017-07-28
  • 打赏
  • 举报
回复
引用 3 楼 qq_20553613 的回复:
1、文件即是数据,通俗理解,把文件当做一堆数据,这堆数据根据我们自己定义的格式写入sd卡,对于最底层同样是一个字节一个字节写入sd卡; 2、对于用户来说,加入文件系统,那么操作最小的单位就是“文件”了,如果想理解文件系统,可以查看源码,比如开源的FAT文件系统。
您说的意思我理解。我的意思是假设我们MCU外设相机拍到的视频以文件形式写到SD卡,那SD卡与MCU硬件上连接的是SDIO,clk,WP,CD这些信号。那这些信号与文件系统是怎么关联起来的?因为MCU读写操作SD卡肯定是通过上述几个信号
Acuity. 2017-07-28
  • 打赏
  • 举报
回复
1、文件即是数据,通俗理解,把文件当做一堆数据,这堆数据根据我们自己定义的格式写入sd卡,对于最底层同样是一个字节一个字节写入sd卡; 2、对于用户来说,加入文件系统,那么操作最小的单位就是“文件”了,如果想理解文件系统,可以查看源码,比如开源的FAT文件系统。
凹特慢 2017-07-28
  • 打赏
  • 举报
回复
引用 1 楼 jklinux 的回复:
首先确定一点先,如要读写sd上的内容肯定是需要你所提的信号吧。 sd上文件系统意味着有没有需要读写sd上的内容? 在操作系统里, 硬件由设备驱动负责的吧。 像linux里,sd卡被驱动后,设备驱动会产生设备文件/dev/mmcblk0p1 /dev/mmcblk0p2, 这样设备文件分别对应sd上的逻辑分区。你对sd分区的操作时是mount挂载上来再用的吧,当前对设备文件操作时,实际上是经过设备驱动产生相应的信号与sd卡进行通信的,用户只管调用驱动就可以了,驱动负责底层的信号而已
sd上文件系统需要读写SD卡上的内容。需要往SD卡保存数据。那这样是不是不用SDIO来读写数据,直接用文件形式往里读写数据呢?
慧龙照片恢复软件是一个特殊的数据恢复工具,专门用于恢复误删除、格式化、文件系统错误、分区打不开等造成的照片文件丢失;支持硬盘、光盘、U盘、MP3、数码相机、手机、存储卡等存储介质。支持FAT、FAT32、NTFS、CDFS等各种分区格式,但不能恢复在NTFS分区中压缩存储的文件,也不能恢复加密的文件。全盘扫描查找照片数据,不放过任何一个可恢复的照片文件。   慧龙照片恢复软件在恢复文件过程中不会往源分区写入数据,因此可保证不会对源数据造成再次损害,可放心使用。软件还支持从磁盘映像文件中恢复照片文件,方便进行异地数据恢复,软件本身也具有制作磁盘映像文件的功能。   本软件目前仅支持恢复JPG格式的照片文件(更多文件格式正在增加中),JPG格式是最流行的数码照片文件格式,绝大多数数码相机及拍照手机均采用该格式存储照片,因此慧龙照片恢复软件能胜任绝大多数照片文件的恢复任务,照片恢复的成功率也很高。   慧龙照片恢复软件会提取照片文件中的拍照时间,作为恢复出来的文件修改时间,方便恢复后对照片进行整理。只要在文件夹里选择按“修改时间”排序,照片就是按拍照的先后顺序排列了,非常方便。   提示: 不要下载软件到要恢复数据的盘符里,也不要解压文件到要恢复的盘符里,否则可能再次破坏源数据。如果是相机直接连接电脑进行数据恢复,请保证电池电量足够,免得恢复过程中耗完电了,下次又要重新扫描。   为什么选择慧龙照片恢复软件?与其他数据恢复软件相比,慧龙照片恢复软件具有以下特点:   1. 逐一扫描存储扇区,寻找照片数据,提高照片文件恢复成功率;   2. 使用超简单,鼠标点击几下即可开始恢复;   3. 体积小,下载快,绿色软件,无需安装,不会在系统里留下任何垃圾;   4. 不依赖于文件系统,即使目录区、文件分配表完全损毁也能进行恢复;   5. 支持从映像文件恢复照片,因而可完全避免反复扫描对源数据造成损害;软件本身也包含制作映像文件的功能。

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧