微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 用单片机的RAM虚拟U盘(文件系统:Fat16)

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

时间:12-01 来源:互联网 点击:

个文件只用一个簇,所以这个就是FFFF。0000表示此簇没有被分配。

例如,如果这里不是FFFF,而是0500(低位在前),则表示,文件的下一个簇的簇号是5,系统就会查询fat的第5簇的位置,重复上面的动作,知道遇到FFFF,表示这里是文件的最后一簇。

3、根目录数组

这里根据前一篇根目录的格式,建立一个盘符根目录(就是插入电脑的时候盘符的名字),接着是一个文件目录(因为这里只需要一个文件),起始簇为2;

4、数据数组

用于存文件的数据。

RAM虚拟的U盘结构是这样的:

DBR(1扇)-|-FAT(1扇)-| -副FAT(1扇)-|-根目录(1扇)-|-数据(4扇,其实只用1扇的一点而已,小文件嘛)

pc上显示的空间大小是2k,原因是8个扇区中,数据占了4扇,而扇区的大小为512字节,所以大小是2k。

只需修改读写函数。读函数这样修改,当读的index为512×0是,发送DBR表;当为512×1时,发FAT,当为512×3时,发送根目录;当为512×4时,发送数据。其他用00 00 00 00 ……来填充。

写函数的修改:只允许写修改数据和根目录部分,其他时候直接返回失败标志。

需要注意的是,为了节省RAM,DBR、FAT、都可以用const定义,但根目录和数据数组最好用非const全局定义,原因是上位机在读取文件的时候,会修改根目录的“最近访问时间”。

另外,如果在pc机上把文件删掉,再重新建立的时候,根目录可不是简单的覆盖,而且还有清空FAT的对应标志。所以,我这里实现,可以删除文件,但再重新新建的时候,这个文件是没有被成功记录到虚拟的U盘的,估计,把FAT也改成可修改状态就可以实现,但是,这次项目不需要用到这点,所以没有去试。

这次实现存入janho程序库“Mass_Storage(用ram虚拟u盘fat16)”中,备用。

注:根目录的文件名不能用小写,否则出错,暂时不知原因所在。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top