您的位置 首页 技术

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

操作系统:rt-thread文件系统:Fat16硬件平台:stm32f103c8描述:利用mcu的ram虚拟一个U盘,用于存储即时小数据,通过usb以u盘的方式供上位

操作体系:rt-thread

文件体系:Fat16
硬件渠道:stm32f103c8

描绘:运用mcu的ram虚拟一个U盘,用于存储即时小数据,经过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的最初就有一部分躲藏区,这时,引导代码部分是空的(由于不需求它来做体系发动),只要DPT分区表才有含义,用于区分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 1 每簇扇区数
0x0e 2 保存扇区数(包含发动扇区)
0x10 1 文档分配表数目
0x11 2 最大根目录条目个数
0x13 2 总扇区数(假如是0,就运用偏移0x20处的4字节值)
0x15 1 介质描绘

0xF8 单面、每面80磁道、每磁道9扇区
0xF9 双面、每面80磁道、每磁道9扇区
0xFA 单面、每面80磁道、每磁道8扇区
0xFB 双面、每面80磁道、每磁道8扇区
0xFC 单面、每面40磁道、每磁道9扇区
0xFD 双面、每面40磁道、每磁道9扇区
0xFE 单面、每面40磁道、每磁道8扇区
0xFF 双面、每面40磁道、每磁道8扇区

相同的介质描绘有必要在重复复制到每份FAT的榜首个字节。有些操作体系(MSX-DOS 1.0版)悉数疏忽发动扇区参数,而只是运用FAT的榜首个字节的介质描绘确认文件体系参数。

0x16 2 每个文档分配表的扇区(FAT16)
0x18 2 每磁道的扇区
0x1a 2 磁头数
0x1c 4 躲藏扇区
0x20 4 总扇区数(假如超越65535,拜见偏移0x13)
0x24 4 每个文档分配表的扇区(FAT32)。扩展根本输入输出体系参数块从这儿开端。
0x24 1 物理驱动器个数(FAT16)
0x25 1 当时磁头(FAT16)
0x26 1 签名(FAT16)
0x27 4 ID(FAT16)
0x28 2 Flags(FAT32)
0x2a 2 版本号(FAT32)
0x2c 4 根目录启始簇(FAT32)
0x2b 11 卷标(非FAT32)
0x30 2 FSInfo扇区(FAT32)
0x32 2 发动扇区备份(FAT32)
0x34 12 保存未运用(FAT32)
0x36 8 FAT文件体系类型(如FAT、FAT12、FAT16)
0x3e 2 操作体系自引导代码
0x40 1 BIOS设备代号(FAT32)
0x41 1 未运用(FAT32)
0x42 1 符号(FAT32)
0x43 4 卷序号(FAT32)
0x47 11 卷标(FAT32)
0x52 8 FAT文件体系类型(FAT32)
0x1FE 2 扇区完毕符(0x55 0xAA)

DPT分区表:

表1 图2分区表榜首字段
字节位移 字段长度 字段名和界说
0x01BE BYTE 0x80 引导指示符(Boot Indicator) 指明该分区是否是活动分区。
0x01BF BYTE 0x01 开端磁头(Starting Head)
0x01C0 6位 0x01 开端扇区(Starting Sector) 只用了0~5位。后边的两位(第6位和第7位)被开端柱面字段所运用
0x01C1 10位 0x00 开端柱面(Starting Cylinder) 除了开端扇区字段的最终两位外,还运用了1位来组成该柱面值。开端柱面是一个10位数,最大值为1023
0x01C2 BYTE 0x07 体系ID(System ID) 界说了分区的类型,具体界说,请参阅图4
0x01C3 BYTE 0xFE 完毕磁头(Ending Head)
0x01C4 6位 0xFF 完毕扇区(Ending Sector) 只运用了0~5位。最终两位(第6、7位)被完毕柱面字段所运用
0x01C5 10位 0x7B 完毕柱面(Ending Cylinder) 除了完毕扇区字段最终的两位外,还运用了1位,以组成该柱面值。完毕柱面是一个10位的数,最大值为1023
0x01C6 DWORD 0x0000003F 相对扇区数(Relative Sectors) 从该磁盘的开端到该分区的开端的位移量,以扇区来核算
0x01CA DWORD 0x00DAA83D 总扇区数(Total Sectors) 该分区中的扇区总数

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/317500.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部