一种移动存储设备量产工具的开发

2016-11-14 02:05张萌
中国科技信息 2016年21期
关键词:固件存储设备线程

一种移动存储设备量产工具的开发

使用Norelsys主控芯片的U盘、移动硬盘等移动存储设备在出厂前需要在每个设备的SPI Flash芯片中烧录固件程序。使用传统的SPI Flash烧录机烧录固件程序费时费力,而且远远达不到工业生产中量产的要求。本文介绍了一种工具软件,可以高效的烧录SPI Flash固件程序,同时操作简单、界面友好,还有很高的安全性。

软件需求分析

使用Norelsys主控芯片的 U盘、移动硬盘等移动存储设备在出厂前需要在每个设备的SPI flash芯片中烧录固件程序。固件程序是U盘、移动硬盘等移动存储设备的核心控制程序,用于和主机建立连接,控制设备的各种行为等。

使用传统烧录方法,如果想要更新移动存储设备中的固件程序,需要使用SPI Flash烧录机。在烧录前需要先将移动设备上的SPI Flash芯片焊下来,放入SPI Flash烧录机的卡槽中,然后在烧录机的软件上进行SPI Flash芯片型号的选择,并且选择要烧录的固件程序,开始烧录,结束后将SPI Flash芯片取出重新焊接到设备上,整个操作完成。这种方法操作步骤十分繁琐,而且每次只能针对单独的一个设备进行固件更新,效率低下,不能满足工厂中大量生产的需要。

为了提高工厂中的生产效率,并使工作人员可以简单、快捷的操作,设计开发用于量产的工具软件就成为必然。该工具软件基于Windows平台,适用于Windows XP及以上各种版本的Windows系统,可以适应于产线上的各种机器配置和系统版本。该量产工具界面简洁,使用简单、方便,执行效率高,可以同时给最多16个设备进行固件更新等操作,并且结果鲜明,每个设备都有单独的条目显示,一目了然,方便产线工人剔出不良产品。

系统总体结构

系统总体结构图如图1所示。

模块UIInterface用于显示友好界面,配置操作选项,接收用户操作指令,显示当前执行状态和最终执行结果。

模块SecurityCheck是在运行UIInterface界面之前进行的安全认证检查,只有输入正确密码的管理员才能更改UIInterface界面的配置选项,如:是否选择更新固件,指定用于烧录的固件程序,是否进行分区、格式化操作,是否进行读写测试操作,选择并行的线程数量,设备列表如何排序等选项。而对于没有密码的普通操作工人,界面选项是固定的,不可以更改,只能进行执行、中断、移除等操作。

模块DeviceManager是整个程序的核心部分,管理所有连接的移动存储设备。执行操作的时候,DeviceManager为各个设备分配可用的线程,调度各个设备独立的完成各自的操作。

每个USBDevice对象代表一个连接到主机上的移动存储设备,可以通过设备ID区分不同的USBDevice。执行操作的时候,每个USBDevice会在DeviceManager安排的线程环境中顺序完成自己的任务,包括更新固件、对磁盘进行分区格式化、对磁盘进行读写测试等操作。

每个SPIFlash对象代表USBDevice中的SPI Flash芯片,它会完成SPI Flash的各种操作,包括擦除flash,写入固件到flash,验证flash等。

图1 量产工具的总体结构图

数据库FlashDataBase存储了所有的SPI Flash型号和每种Flash对应的各种参数。每连接一个新的移动存储设备,DeviceManager会生产一个USBDevice对象,并驱动这个USBDevice中的SPIFlash对象自动到FlashDataBase数据库中匹配对应的SPI Flash型号,找到相应的型号才能设置这个设备的SPI Flash的各种参数,为更新固件做准备。

系统关键部分程序的设计

安全性设计

为了让产线上所有的移动存储设备有统一的配置参数和一致的操作流程,量产工具增加了认证机制。只有管理员拥有可以更改配置的权限,其他人员只能执行管理员设置好的配置,不能随意更改。量产工具在启动时会要求输入管理员密码,密码存储在一个加密的本地文件中。如果密码验证正确就开放管理员权限,打开界面上的配置选项,包括更新固件、指定用于烧录的固件程序、分区、格式化、读写测试、线程数量、设备显示顺序等;如果密码不正确,就开放普通权限,界面上的选项变为不可选。

数据库设计

由于SPI Flash型号众多,而不同的厂家会给移动存储设备配备不同的SPI Flash型号,所以需要量产工具对所有的SPI Flash型号都能识别并支持烧录功能。数据库FlashDataBase主要有两张表,FLASH_TYPE和FLASH_PARAMETERS。表FLASH_TYPE用于通过获得的SPI Flash的ID号,找到flash型号。表FLASH_PARAMETERS用于通过flash型号找到这种SPI Flash对应的各个参数。

设备的添加和删除

图2显示了DeviceManager,USBDevice和SPIFlash几个主要模块之间的关系。移动存储设备在主机上插入和拔出都会触发系统事件,量产工具中由模块DeviceManager来获得并处理这些系统事件。每当获得插入事件,DeviceManager就会调用AddDevice生成一个USBDevice对象并初始化。USBDevice对象在初始化中会生成一个SPIFlash对象,然后SPIFlash对象会通过FlashDataBase数据库找到匹配的Flash型号和对应的各种参数。DeviceManager将完成初始化的USBDevice对象放入设备列表deviceList中,等待后续操作。

拔出或安全移除一个移动存储设备时,DeviceManager会收到系统设备移除事件的通知,然后在设备列表中通过设备ID找到这个设备,释放它所占用的所有资源并调用RemoveDevice删除这个设备。

多线程处理

为了让所有连接主机的设备可以高效率的进行操作,最理想的方法是让所有设备同时工作即并行处理,而不是一个设备等待上一个设备完成才能开始工作的串行处理。并行处理需要使用到多线程机制,线程的数量是由DeviceManger决定的。如果线程过多,会造成系统资源负载过重,不但不会提高效率,反而会降低效率;如果线程太少,并行处理不明显,又退化成串行处理,也会降低效率。所以DeviceManager会根据当前实际设备数和管理员设置的最大线程数计算出最佳的线程数量,然后启动这些数量的线程开始工作。为了避免同一个设备被多个线程重复执行,造成执行混乱,每个线程会排队依次从设备等待列表中选择等待执行的设备进行指定的操作,被选择的设备会从等待列表中移除,如图3所示。当一个设备执行完成后,完成任务的线程会再次排队到等待列表中选择还未执行的设备,直到没有未执行的设备可以选择,线程自动结束。等到所有线程都结束了,全部操作完成。

图2 设备关系类图

图3 多线程排队选取设备示意图

固件更新

固件更新操作是量产工具最重要的功能。不需要像SPI Flash烧录机那样手动焊接芯片再烧录,直接选择界面上的更新固件选项,点击执行按钮即可自动实现固件程序的更新。在连接一个移动存储设备时,DeviceManager会在USBDevice对象的初始化时就进行SPI Flash匹配。执行更新固件的操作时,直接使用匹配的flash参数先对flash进行擦除,擦除成功后将指定的固件程序写入flash的对应地址中,最后做flash的校验,检查是否写入成功。

界面显示

显示界面分为三部分,最上面部分是管理员才能操作的配置选项,包括更新固件、选择固件程序、分区、格式化、读写测试、线程数量、设备显示顺序等。只有选上的项目才能被执行,未选择的项目不会被执行。中间部分是设备列表,显示所有连接的移动存储设备,每个设备占一行,设备的排序是按照管理员选择的方式列出的。每一列显示设备的各个属性,包括厂商ID、产品ID、序列号、版本号、容量、等待执行的操作等信息。最下面部分是普通工作人员需要用到的按钮,有三个:执行、中断和安全移除。

为了减少工作人员的操作,设备的所有工作(包括更新固件、分区、格式化、读写测试)都集中在一个执行按钮中。工作人员只需要连接移动存储设备,然后按下一个执行按钮,即可在中间列表中看到各个设备实时的执行状态和工作进度。每完成一个设备,该设备所在的行会突出显示完成结果,正确的显示为绿色Pass,失败的显示为红色Fail,一目了然。如果有突发事件,工作人员可以点击中断按钮中断操作。当所有设备都完成操作时,点击安全移除按钮,所有设备都会安全移除,然后再拔出设备不会对设备造成任何损伤。

结语

与传统SPI Flash的固件烧录方法相比,量产工具更加安全可靠,它的应用极大的提高了生产效率,平均每生产一个移动存储设备只需要几秒钟时间,比烧录机方便快捷很多。量产工具不但可以烧录固件程序,还可以同时完成磁盘的分区、格式化、读写测试等操作,为移动存储设备的出厂减少了很多生产步骤。同时它的操作简单,界面友好,方便工厂产线工人在短时间内学会使用,在很多工厂都有着广泛的应用。

10.3969/j.issn.1001- 8972.2016.21.029

猜你喜欢
固件存储设备线程
基于C#线程实验探究
基于国产化环境的线程池模型研究与实现
线程池调度对服务器性能影响的研究*
基于SHA1的SCADA系统PLC固件完整性验证方法
基于固件的远程身份认证
浅析铁路视频监控存储设备设计
英特尔发布免费固件引擎
提取ROM固件中的APP
Windows环境下禁用USB存储设备程序设计与实现
防止USB接口泄密