基于STM32硬件平台的嵌入式虚拟技术应用论文_袁利军

(珠海优特电力科技股份有限公司,广东 珠海 519000)

摘 要: 随着科学技术的不断进步和发展,可灵活定制的嵌入式产品,已在我们社会各行业、各类生产和生活当中运用的越来越多、越深入。而产品提供厂商,在各自产品的数据上、下载,固件升级等调试维护过程中,大多采用各自私有工具和协议,并且同一厂商不同产品之间也存在工具和协议多样化的情况。本文提出一种基于意法半导体STM32硬件平台的嵌入式产品虚拟U盘和虚拟文件系统技术。利用本技术及思路,可将STM32硬件平台的片内及外围存储器件虚拟成U盘,并通过虚拟文件系统技术,将嵌入式产品的数据虚拟成U盘中的文件,以供上位机进行数据的上、下载,或固件的升级等工作。

关键词: STM32;虚拟U盘; 虚拟文件系统; 数据上下载;固件安全升级;

1 引言

随着科学技术的不断进步和发展,可灵活定制的嵌入式产品,已在如国防、工控、商用、办公、医疗等各领域运用得越来越多,如我们常见的移动电话、掌上电脑、数码相机、机顶盒等。在工业领域,嵌入式产品由于其专用、软硬件可剪裁可配置;低功耗、高可靠性、高稳定性、实时性等优点,在自动控制、设备监测、辅助生产等诸多环节广泛应用。常见嵌入式产品的调试、维护数据交互接口有串口、网口,以及蓝牙等无线通讯接口。近年来,各半导体厂商根据嵌入式产品市场的需求,越来越多的推出具有通用串行总线(英语:Universal Serial Bus,缩写:USB)接口的微控制器,为嵌入式产品的开发提供了多一种接口选择。

本文提出一种基于意法(ST)半导体STM32硬件平台的嵌入式产品虚拟U盘和虚拟文件系统技术。利用本技术及思路,可将STM32硬件平台的片内及外围存储器件虚拟成U盘,并通过虚拟文件系统技术,将嵌入式产品的数据虚拟成U盘中的文件。无需专用工具,通过基本的复制、拷贝等操作,便可以实现对产品数据的上、下载,或固件升级等工作。

2 创建虚拟U盘工程

2.1 STM32微控制器

STM32系列32位闪存微控制器基于Arm? Cortex?-M处理器,旨在为MCU用户提供新的开发自由度。它包括一系列产品,集高性能、实时功能、数字信号处理、低功耗与低电压操作、连接性等特性于一身,同时还保持了集成度高和易于开发的特点。

2.2 STM32CubeMX

STM32CubeMX是ST意法半导体公司推出的一种自动创建单片机工程及初始化代码的工具,它可以减轻开发的时间和费用。STM32CubeMX集成了一个全面的软件平台,支持STM32每一个系列的MCU开发。这个平台包括 STM32Cube HAL(一个 STM32 的抽象层集成软件,确保STM32系列最大的移植性)。再加上兼容的一套中间件(RTOS、USB、TCP/IP 和图形)。

2.3创建USB Mass Storage工程

STM32CubeMX工具详细使用见ST公司提供的教程,本文档不再描述,本文档仅描述使用此工具创建基于STM32系列微控制器USB Mass Storage工程的重要步骤(本文USB配置为全速FS模式)。

1)USB_DEVICE中的Class For FS IP配置为Mass Storage Class;

2)USB_OTG_FS中的Mode配置为Device_Only;

3)RCC中的High Speed Clock(HSE)配置为Crystal/Ceramic Resonator;

4)USB时钟配置为48MHz,否则模拟U盘无法被主机识别到;

除上述4条重要配置外,其他各项配置完成后,生成可直接用于包括 IAR EWARM、Keil MDK 或基于 GCC 的 IDE 在内的众多开发环境对应的工程文件,编译并烧写运行程序到设备,通过USB线连接设备与电脑,设备USB应能成功枚举并被电脑识别到。

3 SCSI命令集

设备插入到USB接口后,主机即对设备进行搜索,并要求设备提供相应的描述符。在主机得到设备描述符后,即完成了设备的配置,识别出为Bulk-Only的Mass Storage设备,然后进入Bulk-Only传输方式。在此方式下,主机与设备间的所有数据均通过Bulk-In和Bulk-Out来进行传输。?

在这种传输方式下,有三种类型的数据在Host和Device之间传送:CBW、CSW和普通数据。CBW(Command Block Wrapper,即命令块包)是从USB 主机发送到USB 设备的命令,命令格式遵从接口中的bInterfaceSubClass所指定的命令块,这里为SCSI传输命令集。USB设备需要将SCSI命令从CBW中提取出来,执行相应的命令,完成以后,向Host发出反映当前命令执行状态的CSW(Command Status Wrapper),Host根据CSW来决定是否继续发送下一个CBW或是数据。Host要求USB设备执行的命令可能为发送数据,则此时需要将特定数据传送出去,完毕后发出CSW,以使Host进行下一步的操作。

USB Mass Storage设备所使用的SCSI主要命令集如下:

?0x00 ?? TestUnitReady

检查U盘准备好没有,在没有其它命令进行操作时,Host端会每隔一定时间,就会发送该命令,主要是为了探测Device是否存在,由于该命令没有数据交互,我们直接返回状态Good Status的CSW状态块即可。

?0x03??? RequestSense

Host每发送一个命令后,都会检测设备返回的CSW的状态值是否为0(Good Status),如果不为0,则Host马上发送REQUEST_SENSE命令,询问出错的进一步信息。

?0x12??? Inquiry

询问Device的基本信息,如生产厂家,产品名称,产品版本等等。

?0x23??? ReadFormatCapacity

获取Device存储大小,Block长度(一般为一个扇区大小,默认为512)等信息。

?0x25??? ReadCapacity

读取容量信息,该命令返回最后一个块的索引和块的长度,其实该命令可以看着是ReadFormatCapacity命令的一个子集。

?0x28??? Read(10)

Host请求Device发送指定扇区索引、扇区个数的数据。

?0x2A??? Write(10)

host向device发送数据并写在u盘存储器相应扇区里面。

?0x2F??? Verify

在写数据时有用,表示核实数据,一般直接返回成功的CSW就可以了。

4 FAT16文件系统

Host 会依次发出Inquiry、Read Capacity、UFI Mode Sense 等请求,如果上述请求的返回结果都正确,则Host会发出READ 命令,读取文件系统0 簇0 扇区的MBR 数据,进入文件系统识别阶段。

4.1磁盘存储结构

磁盘的大致存储结构如下表1所示:

表1 磁盘存储结构

4.2 MBR

MBR(Master Boot Record),主引导区记录,位于磁盘0磁道的第一个扇区,大小正好为512字节,所以又称为主引导扇区。?

MBR由三部分构成:

1.主引导程序代码,占446字节;

2.硬盘分区表DPT,占64字节,由4个16字节的主分区表组成;

3.主引导扇区结束标志AA55H;

4.2.1 DPT

16 字节的主分区表结构如下表2所示:

表3 BPB结构

4.4 FAT分区表

FAT,英文为File Allocation Table,文档分配表。先要记住几个概念:

扇区:一般扇区为512个字节。

簇:由若干个扇区组成,是存取数据的最小单位。如果簇大小为16K,文件大小为1字节,那也要用一个簇来存,而且该簇不能再拿来他用。

FAT文件系统就是专门管理这些簇的。一个文件可能占据一个或者多个簇,按正确的顺序去读取这些簇,就可以获取这个文件的内容了。

FAT文件分配表有两份,这是出于系统冗余考虑,尽管它很少使用,即使是磁盘修复工具也很少使用它。

FAT16条目值如下表4所示:

表5 目录结构

5 虚拟文件系统及数据上下载

根据第4章FAT16文件系统知识,在通过STM32CubeMX创建的工程源码中初始化相应的配置信息,如将嵌入式片内外存储器件虚拟成的U盘盘符名称、容量大小、扇区数、以及将这些器件内的数据按类别虚拟成U盘中的目录及数据文件;并根据这些数据大小生成FAT分配表等。

嵌入式产品数据上载(到PC)时,PC根据FAT分配表自动读取文件。但从PC向嵌入式产品下载数据时(如在线固件升级),一方面要考虑下载数据的安全性,可增加如AES加密校验; 另一方面,要根据下载数据目录将数据写入到相应存储器件中,并更新FAT配置表。

6 结论

本文介绍了基于意法(ST)半导体STM32硬件平台及其开发工具,在其创建的虚拟U盘工程基础之上,通过虚拟FAT16文件系统技术,将此平台的片内及外围存储器件虚拟成U盘的一种方法。通过此方法,可将具备USB接口芯片的嵌入式产品的数据虚拟成U盘中的文件。无需专用工具,通过基本的复制、拷贝等操作,便可以实现对产品数据的上、下载,或固件升级等工作。

参考文献

[1]USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport

[2]USB Mass Storage ClassBulk-Only ransport(BOT)..

[3]USB Mass Storage Class USB Attached SCSI Protocol (UASP)

[4]UM1718 User manual:STM32CubeMX for STM32 configuration and initialization C code generation.

作者简介:袁利军(1981-),男,学士,从事电力系统继电保护装置及嵌入式产品研发。

论文作者:袁利军

论文发表刊物:《科技新时代》2019年7期

论文发表时间:2019/9/9

标签:;  ;  ;  ;  ;  ;  ;  ;  

基于STM32硬件平台的嵌入式虚拟技术应用论文_袁利军
下载Doc文档

猜你喜欢