基于C#的瑞芯微写号系统设计与实现

2020-07-24 02:11邓小丁谢志能
软件导刊 2020年6期

邓小丁 谢志能

摘要:为解决现有瑞芯微写号软件写号时间长、多次扫码、不能防止重复号等问题,提出采用工厂模式对IMEI、蓝牙、WiFi、SN等号码一起写入的方法。软件采用C/S架构,使用SQL Server数据库,基于C#语言实现。写号前将IMEI、蓝牙、WiFi、SN等号码的对应关系导入数据库。写号时,扫描任何一个号码都可将其它几个对应号码提取出来。检查这些号码之前是否用过,然后在bootloader时进入工厂模式,将号码写入设备内。与原有方法进行对比实验,结果表明,该方法写号时间缩短12秒以上,效率提高50%以上,同时能防重及快速查找未写号数据。

关键词:google key;rockchip;bootloader;IMEI;工厂模式;Android

DOI:10.11907/rjdk.201192 开放科学(资源服务)标识码(OSID):

中图分类号:TP319文献标识码:A 文章编号:1672-7800(2020)006-0146-04

0 引言

国家大力发展芯片产业,很多高科技企业投入芯片制造。福州瑞芯微电子提供了平板电脑、手机、POS机等芯片解决方案。平板电脑、手机、POS机等产品在研发、测试、生产时,需要将国际移动设备识别码(International MobileEquipment Identity,IMEI)、蓝牙地址(Bluetooth address,BT)、无线保真(Wireless-Fidelity,WIFI)的MAC地址(Media Access Control Address,MAC)、SN码(Serial Number,SN)等写入设备。谷歌从Android 8.0开始要求每个设备有Google key密钥,这就需要将Google key密钥写入设备。现有写号软件存在以下问题:①需要进入Android系统后利用adb命令写号,系统启动时间长、写号慢;②同时写入IMEI等多个号码时,需要扫描每个号码的条形码或手工输入号码,操作步骤多、效率低;③不能同时将Google key和IMEI等号码写入设备,需要用2个软件分别写入,影响效率;④对写入的号码无防错功能,容易将号码写混,如将SN写入到IMEI;⑤对已经写过的号码无记录,不能防止重复写入同一个号码;⑥不能查询出未写号数据。

瑞芯微是国内新兴的芯片企业,国内外对其芯片写号研究寥寥无几,但在嵌入式引导加载程序(bootloader)上研究很多。bootloader通过硬件触发或软件命令可以让设备快速进入一个微小系统。对智能设备写号不需要完整的Android系统,只需要简单的USB通信及读写存储器特殊区域即可。本文设计新的瑞芯微写号系统,在设备开机时通过bootloader引导进入一个简易工厂模式,使设备能进行USB通信及对存储器进行读写即可。通过SQL获取其对应的所有号码并检查是否重复使用,将所有号码同Google key一起写入设备以缩短写号时间,提高生产效率。

1 软件设计需求

1.1 使用环境及功能要求

Windows XP以上系统均能使用,CPU 1GHz以上,内存512MB以上,硬盤512MB以上。功能要求如下:

(1)在bootloader时引导进入工厂模式,避免进入耗时很长的Android系统。

(2)扫描IMEI、BT、WiFi、SN中的任意一个号,提取出对应的其它几个号。

(3)同时写入IMEI、BT、WiFi、SN和Google key。

(4)同一个号普通模式下只写一次;同一个号用管理员帐号可重复写多次。

(5)IMEI、BT、WiFi、SN可以根据第一个号和数量自动计算全部号码并记录到数据库中,也可用Excel表将这些号码直接导人数据库。

(6)IMEI、BT、WiFi、SN与工单号绑定,写号时如果号码对应的工单与软件设置不一致则进行拦截。

(7)能查询已写号数据,也能查询一个生产工单未写号数据。

1.2 现有写号工具分析

对现有写号工具各项耗时进行测试统计,结果如表1、表2所示。

对表1分析如下:①启动Android系统消耗总时间的60%以上,达17.5s。这样快速进入工厂模式写号可缩短写号总时间;②查看设备管理器这个动作耗时3s,可修改成由软件判断从而节省时间;③扫描条形码,写1个号时,需要4s,写2个号时,需要5.8s,写5个号时,需要7.7s,可修改成只扫描其中一个号,然后通过数据库提取其它号码,使时间减少为4s左右;④写号时间不管写1个号还是5个号,都需要16ms,只占总时间0.1%不到,无需优化。因此,通过优化软件,可以节省的时间是:①Android系统启动时间。利用bootloader进人工厂模式估计需要7s,时间减少60%;②查看设备管理器3s及扫描多个号码时间。

对表2进行分析,其动作除写key外,其它操作和写号是一样的。如果将写号工具与写key工具合并成一个工具,则写key只需要0.03s,时间减少99.7%。另外,这两个工具是在两个工位上操作的,优化成1个工位操作,节省时间会更多且节省一个操作员。

2 软件设计与实现

2.1 软件流程设计

软件流程如图1所示:①导人SN、IMEI、BT、WiFi、key等号码的对应关系表,或自动生成这些号码并导人数据库;②扫描设备上的任意一个条形码,根据扫描的条形码从数据库中提取相对应的其它号码;③读取数据库判断是否重复写号;④连接设备并写号;⑤将记录上传数据库。

2.2 设备端工厂模式设计

设备启动前先启动bootloader,在bootloader程序中判断是正常启动还是进人工厂模式。工厂模式设计成maskrom、loader两种方式。进入maskrom方式需要对芯片的Flash CLK引脚进行短接;进入loader方式,在设备开机时按住“音量+”键。设计成maskrom和loader两种模式主要是应对SMT贴片生产和组装生产两种情况。SMT贴片生产的主板没有按键,所以采用CLK引脚进行短接。

2.3 自动检测设备连接电脑

瑞芯微终端要在正常连接电脑后才能对其进行读写等操作,因此可在程序中不断读取设备管理器中的信息,以此判断瑞芯微终端有无连接电脑。实现方法是利用setupapi.dll中的SetupDiGetClassDevs、SetupDiEnumDeviceInfo、SetupDiGetDeviceRegistryProperty、SetupDiDestroyDevicelnfoList函数获取电脑设备管理器上的所有信息,然后判断有无Rockusb Device信息即可。

2.4进入Rockusb模式

只有进入Rockusb模式后,才能对特定的VENDOR分区写入用户定义的数据,如WiFi、SN等。如果是其它模式,则需要通过RK_SwitchToRockusb或RK_AdbToRock.usb将设备切换成loader模式。相应代码如下:

2.5 写入WiFi地址数据

目前大多数芯片厂家的WiFi地址都是以6个字节的16进制数据存储于特定分区,而扫描枪扫描或手工输入的WiFi地址是12位字符串,因此在写入WiFi地址前需要进行转换才能将其写入特定分区内。相关代码如下:

2.6 写入GoogleKey数据

Google Key密钥数据非常重要,需要将其写入受保护的分区,以防黑客盗取。瑞芯微可选择将GooCle Key密钥数据写入Android的MISC分区和vendor分区,通过指定不同的nID将密钥存储于某个存储区域。可调用RK_WriteProvisioningData(USHORT nID,PBYTE pDataBuf-fer,USHORT nBufferSize,DWORD dwLayer=0)函数写入Google Key密钥。

2.7数据库设计

数据库采用ms sql 2008,设计两个表,一个是DataTable,存储用户的IMEI、SN、BT、WIFI等信息。用户在扫描一个条形码后,可用查询语句在此表中查询到对应的数据信息,实现扫描一次即获得所有数据,节约员工扫描时间,表结构如图2所示。

另一个表是Record,表结构如图3所示。Record用于存储用户的写号记录。当写号时,员工扫描条形码,通过查询语句联合表Record和DataTable。如果Record表中存在此条码记录,则此号码之前已经写过,不能重复写号,除非利用重写权限重写。

3 主要界面及效果

经过测试验证,系统运行正常,软件主界面如图4所示。

设备开机时按住“音量+”键进入loader模式。通过扫描一个条码后获取其它对应的数据并判断是否重复写号,然后通过USB线对设备进行IMEI、SN、BT、WiFi、GooZlcKey写入并记录到数据库中。

对新旧工具的设备启动时间进行测试对比,如表3所示。新写号系统开机时进入maskrom或loader模式需要7s左右,比旧工具具节约50%以上时间。

采用新旧工具进行人工操作,测试耗时并进行对比,结果如表4所示。新写号系统通过自动检测设备方式比旧工具节约80%以上时间。扫描条码耗时,当只写一个号时,新旧工具无差异,当写两个号时,新系统比旧工具节约30%以上时间,当写4个号时,新系统比旧工具节约40%以上时间,原因是节省了多次扫描时间。

对新开发的写号系统总耗时进行测试统计并与原写号工具比对,结果如表5所示。

统计结果显示,采用新写号系统后,在不写google key前提下不管写几个号,写号时间都节约50%左右,这是因为设备启动时间占总时间比值高,因此查看管理器及扫描等人工操作时间节省对总时间影响不大。在同时写SN、WiFi、BT、IMEI和Google key情况下节约70%以上时间,同時减少一个专门写Gooclc key的员工,因为旧工具需要用两个工具操作。因此,采用bootloader进人工厂模式写号方法写号总时间缩短12s以上,效率提高50%以上。

4 结语

本文分析了现有写号工具存在的问题。基于C#的瑞芯微写号系统,利用bootloader、工厂模式、Android分区、SQL数据库、C#等技术设计开发了新的写号系统。实践表明该系统节约了写号时间、减少了操作员工,为企业节约了成本,提高了国产瑞芯微公司“一站式”解决方案竞争力。