资讯详情

用单片机的RAM虚拟U盘(文件系统:Fat16)

操作系统:rt-thread 文件系统:Fat16 硬件平台:stm32f103c8

描述:利用mcu的ram虚拟一个 ,用于存储即时小数据,通过usb以u盘的方式供上位机读取。 一:硬盘篇 1、硬盘物理结构: 盘片(platter):硬盘由很多盘片组成,每个盘片的每个面都有一个读写磁头(heads)。N个盘片,就有2N个面,对应2N个磁头,从0、1、2……开始编号; 磁道:同一个盘片不同半径的同心圆为磁道(注意,是指圆周线或圆环); 柱面(cylinders):不同盘片相同的磁道,构成柱面,由外至里编号0、1、2…… 扇区(sector):每道磁道被划分成几十个扇区,通常,一个扇区容量为512B,并按照一定规则编号1、2、3…… 簇:另外,由于扇区实在太多了,文件分配表没办法一一描述,所以,就把一定数量的扇区分为一个簇。所以文件系统是以一簇为最小单位的。 注意:磁头和柱面都是从0开始编号的,扇区搞毛特殊从1开始。 总扇区数量=柱面数×磁头数×每道扇区 2、磁盘引导: 下图是一个4个分区的 ,开头的主引导记录就是上面介绍的MBR,其中4个分区表分别指出了4个分区的位置,上位机获取MBR之后,就知道了硬盘的总体结构,包括硬盘的大小、每个分区的位置、每个分区的大小等等。 隐藏区(hidden sector):在分区之前的部分,而下面介绍的MBR就是隐藏区的第一个扇区。隐藏区不是必须的,它和系统启动有关,如果仅仅是作为存储,那么隐藏区可以没有。比如,标题说的用RAM虚拟的U盘。 注意:在我理解中,严格地说,隐藏区应该是指每个分区之内,位于保留区之前的扇区,也就是说,每个分区都有一套隐藏区+保留区。只是在唯一存储介质的第一个分区的隐藏区才是必须的,因为它需要用于系统的启动。而其他分区的隐藏区则一般被省略。如果不被省略,比如SD的开头就有一部分隐藏区,这时,引导代码部分是空的(因为不需要它来做系统启动),只有 T分区表才有意义,用于划分SD的分区情况。 MBR(master boot record)扇区: 即 主引导记录,有时也叫主引导扇区 ,位于硬盘的0柱面0磁头1扇区,也就是所谓是第0扇区,也是整个存储介质的首个扇区。其中 前446字节为引导程序,紧跟着的是64字节的硬盘分区表DPT,最后2个字节是“0x55 0xAA”,为磁盘有效结尾标志。 MBR 是不随操作系统的不同而不同的,具有公共引导特性。(在双系统中,一般先装Windows再装linux,原因是,linux会修改这段代码,让用户可以选择进去哪个系统,但Windows却是没有,如果后装Windows,那么linux的引导就会被忽略??) (1)0x000-0x1bd:mbr引导代码(有些地方也叫MBR??) , 446字节 ,pc的bios执行完自举之后,会将cpu控制权交给此间的446个字节的loader程序; (2)0x1be-0x1fd:DPT分区表, 64字节, 每16字节描述一个分区, 所以硬盘的主分区+扩展分区不能大于4个,另外扩展分区数不能大于1。(现实中,不止4个,其实是扩展分区里面分出来的逻辑分区,对于逻辑分区的问题上面的链接也有提到,可以参考。) 0x1fe-0xff: 0x55 0xAA。 主引导记录部分如下表:
偏移(字节) 长度(字节) 说明
0x00 3 跳转指令(跳过开头一段区域)
0x03 8 OEM名称(空格补齐)。MS-DOS检查这个区域以确定使用启动记录中的哪一部分数据[3]。常见值是IBM 3.3(在“IBM”和“3.3”之间有两个空格)和MSDOS5.0.
0x0b 2 每个扇区的字节数。基本输入输出系统参数块从这里开始。
0x0d
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台