APP下载

基于STM32的通用高速编程器的设计与实现

2016-03-27何晋红潘桃于婷马义德兰州大学信息科学与工程学院兰州资源环境职业技术学院

数码世界 2016年7期
关键词:PC机脱机固件

何晋红潘桃于婷马义德.兰州大学信息科学与工程学院 .兰州资源环境职业技术学院



基于STM32的通用高速编程器的设计与实现

何晋红1潘桃2于婷1马义德1
1.兰州大学信息科学与工程学院 2.兰州资源环境职业技术学院

文章设计并实现了一种针对FLASH、EEROM等存储器进行数据更新的高速通用编程器。该编程器是一个以STM32为核心,能对24、25等系列的存储器完成数据写入、读出等操作的嵌入式系统。系统具备USB连接PC机的联机操作模式和基于UCGUI的脱机操作模式。它可以控制接口电压以适用更多的芯片,与当前常见编程器进行性能比较,其具有更好的兼容性、更快的操作速度和更高的数据正确率。

编程器 STM32 嵌入式系统 UCGUI

随着信息时代的快速前进,物联网、汽车电子等都有了前所未有的发展,智能家居、可穿戴设备也应运而生。这些数字化、智能化的产品与我们的日常生活已密不可分。而它们的固件升级,程序更新和量产都需要相关人员对其存储器内的数据进行读写操作。然而目前所见存储器种类繁多,编程接口和时序也不尽相同,这就要求我们设计一个能够操作常见存储器的多功能、通用编程器,它不仅要有足够快的写入速度,而且需要保证写入数据的正确性。目前市面上有一些类似的产品,如XTW100、 TL866CS等,然而它们一般都针对某一特定系列的存储芯片并且读写速度比较慢。基于这样的现状,这里设计了一个基于ST(意法半导体)公司的STM32F207单片机的编程器。凭借其120MHz的工作频率、400Kb/S的I2C接口,30Mb/S的SPI接口以及 硬件SD卡接口,该编程器拥有了非常优越的性能。

1 系统原理概述

本文所设计的编程器主要完成24,、25、26、45、95系列存储芯片的读写、擦除等,同时可以用作SD卡读卡器。它由硬件和软件两部分组成。其中硬件部 分以STM32为核心,软件包括PC机应用程序、USB 驱动程序以及编程器固件。固件程序运行于硬件平台之上构成 整个系统的核心。它接受来自PC机的数据和指令,并根据指令对连接其上的存储芯片进行操作。编程器与PC机通信使用USB2.0协议标准。该系统还使用触摸屏进行人机交互来完成脱机操作。

1.1编程器硬件平台

硬件平台是系统重要组成部分,采用STM32F207 Contex-M3[2]芯片作为控制器,含有 供电系统、触摸屏、SD卡以及电平转换电路的编程器平台。

系统电源含两部分:3.3伏固定电压与程序可调电源。其中3.3伏为MCU,触摸屏,SD卡等供电, 而可调电源的输出电压受MCU控制。在MCU与 存储芯片之间接有电平转换接口芯片SN74LVC8T245,该芯片分A、B两个端口,A、B 两端的数字电平可以独立进行设置。同时这里还使 用了TCA9517,它是I2C接口专用电平转换芯片。

SD卡上存放编程器的配置数据、脱机操作文件、 脱机读取的芯片内数据和脱机芯片参数库。它通过SD卡接口与STM32连接,MCU上移植了嵌入式文件系统FatFs以对SD卡进行基于文件的读写操作。

在SD卡根目录下有data子目录用来存放脱机操作的数据。名为Chipinfo的文件存放芯片参数库。Dat文件存放文件命名编号信息。执行读取操作时,读出来的数据保存在命名为被操作芯片型号-文件编号.bin的文件内。每次读取完成后文件编号增一并保存到Dat里面。例如连续读取两次EN25Q80芯片就会创建两个文件,分别为EN25Q80-00006. bin和 EN25Q80-00007.bin。在SD卡根目录下还有一个文件LCD_CONFIG,它存储了LCD触摸屏的配置参数。

系统采用240*320分辨率的LCD作显示,电阻式触摸屏作触控感应。触摸控制芯片使用 XTP2046。它将模拟电压值进行数字采样量化并通过SPI接口将数据传输给MCU。LCD界面的开发使用了UCGUI。编程器启动时会判断LCD_ CONFIG 文件是否存在,不存在时将会调用校准代码进行触摸屏校准并生成该文件。编程器上有一个32Pin的锁紧座。编程器与待编程存储器的连接会根据具体芯片选择使用SPI或I2C接口。

1.2编程器固件程序

固件程序主要完成PC机控制指令的解析和执行, 同时响应触摸输入。固件程序解析执行PC机指令然后返回执行结果 和数据。PC机应用通过USB接口连接编程器并结合固件程序对存储芯片进行操作,同时操作SD卡上的编程数据和脱机芯片库等。固件程序含有大量的代码,编程器会根据待操作芯片进行适配选择。固件程序还提供了脱机操作的功能。在脱机的情况下固件程序会通过用户的交互输入执行操作,并将结果反馈显示给用户。脱机操作的实现依赖于触摸屏交互和SD卡上的芯片库以及文件系统。

1.3PC机软件系统

PC机程序开发使用MFC类库。借助PC机优越的运算性能,联机的情况下比脱机操作具有更快的速度,而且在联机的情况下还可以对编程文件进行可视化编辑。PC机软件提供的操作包括:文件加载、芯片选择、芯片自动识别、编程、擦除、读取、向数据库中添加芯片以及对SD卡的操作。在程序中动态地建立ODBC数据源,并将芯片信息存储进ACCESS数据库中。数据库里记录了常用的24,25,26,45,95等系列的芯片,对于一些未收录的,用户可以自己将芯片信息添加进数据库,编程器会根据芯片的特性自动选择合适的读写时序尝试操作。PC程序根据待编程的芯片从数据库中读取芯片参数。从PC文件系统中读取Hex或Bin格式文件并进行解码,然后将指令包和数据传送给编程器。从存储芯片读取数据的时,首先将读到的数据使用 CListCt r l控件显示给用户,用户可以将该数据保存在PC上指定的位置。PC也通过USB访问编程器上的SD卡。由于使用了USB接口进行通信,所以这里还需要为编程器开发USB驱动[7]来负责应用层和USB 总线层的数据传递。驱动程序还进行数字签名,以便自动安装。

2 系统关键技术

2.1编程器电源系统及接口电压转换

本系统需要两种电压。一个3.3V和一个编程可调 的电源。它们都通过对5V输入电压进行降压得到。采用LM1117-3.3稳压芯片产生3.3V电压。在其输入和输出端分别接入两个滤波电容,一个容值较大,滤去电源的低频成分,而另外一个容值较小,对高频成分呈现较低的阻抗,主要滤除由负载电流变化而引起的高频成分。

可调电压用STM32的一路DAC和LM1117-ADJ可调三端稳压芯片产生。使用DAC的输出来抬高 ADJ端的电压,调节DAC的输出就可以达到调节输 出电压的目的。

从DAC到LM1117的ADJ端使用运放LM358做了电压跟随。因为LM1117工作的时候ADJ端会有微弱的电流流出,而DAC输出阻抗较大,该电流如果直接流经DAC的输出端,对ADJ端的电势会有影响。

设计中还将两个110欧姆串联,然后接到其输出端,从两个电阻的中间取得电压接至STM32的ADC上面,STM32对此电压进行实时监测,防止电压设置不当造成器件损坏。

2.2控制指令格式

由于数据较大,本编程器使用USB批量传输方式。编程器配置了两个USB端点,一个控制端点,用来进行USB的枚举等,另外一个批量端点,用来批量传输数据。

2.2.1命令包结构

在USB枚举完成以后,PC机会根据用户所选择 的操作构建一个命令块包,然后发给编程器。命令块包的结构总共有30个字节。

dSignature字段是控制命令包标志,为字符串 USBC。

dTag是命令包标签,由PC机程序随机生成。当编程器完成该命令返回状态的时候,需要在状态包的dTag字段中填入对应命令的dTag。

dDataLength指定在数据阶段需要传输的数据长度。

fVol是待操作芯片电压信息,是一个浮点数。编程器根据fVol设置接口电压。部分指令的fVol域无效。

bFlags最高位(D7)表示数据方向,0表示输出,1表示输入。

bCBLength表示后面CB的长度。

CB是需要执行的命令和命令对应的参数。12字节数据不一定完全使用,有效长度由bCBLength指定。

2.2.2状态包结构

编程器执行完操作后会返回执行结果给PC。dSignature为状态包标志。字符串USBS。dTag为状态包标签,其值为命令封包中的dTag。

bStatue标识命令执行结果,0x00表示成功, 0x01表示失败。

2.2.3编程器命令结构

命令包含存储芯片操作命令和SD卡操作命令。接口类型分为两类:0x01表示SPI,0x02表示 I2C;芯片类型使用24、25等作为区分。接口速率占 一个字节,I2C以K为单位,SPI以Mb/s为单位。

2.3芯片参数库设计

为支持多种芯片,设计了芯片参数库。在芯片操作时需要获取数据库中的芯片信息。下面给出数据表中所有字段及说明。

Chip Index:芯片的索引编号。

ManuID:厂商ID,主要用来芯片的自动识别。Chip ID:芯片ID号。用来芯片的自动识别。RomSize:芯片的存储容量,以字节为单位。PageSize:存储器的页大小。芯片编程采用页编程方式,有利于编程速度的提高。

VectorName:芯片厂商名称简称,方便用户选 择芯片。

InterFace:芯片的编程接口类型。

Vol:编程接口电压信息。

Speed:芯片编程接口支持的最大读写速率。 设置正确的读写速率,才能保证读写的正确率。 Type:芯片类型。24、25系列等。

在进行操作之前一般会自动识别或者手动选择 芯片。选定芯片后应用程序会从数据库获取芯片的 信息,然后构建命令块包并发送给编程器。

3 结论

在此将对该编程器的性能参数做一些测试。这里将抽取不同系列、不同厂商的不同容量存储器进行测试。测试相关数据,包括对编程器来讲至关重要的一项指标:写入数据的正确率。分析结果可以发现,不同的芯片操作速度相差较大,尤其是写入和擦除的速度。这主要是受芯片自身性能和芯片容量的影响。同时,这里还跟其他的编程器,如XTW100、TL866CS等做了性能对比,发现该编程器跟其他相比速度平均提升了1.5倍左右,而这主要得益于我们MCU良好的处理性能、高效的通信协议以及我们优异的编程算法。而前面所提两 款编程器只支持24、25系列的部分存储器,且不具备脱机操作的功能。另外值得一提的是本编程器数据写入的正确率。由于采用了可靠的通信协议,使得对所有支持的存储器都达到了百分之百正确写入的效果。

[1] USB Imp lementer’s Forum. USB Speci f ication Rev2.0. http://www.usb.org,2000.

[2] 喻金钱,喻斌.STM32F系列ARMCor tex-M3核微控制器开发与应用[M].北京:清华大学出版社, 2011.

[3] 王兰英.基于STM32嵌入式系统的uCGUI移植与实现.四川理工学院学报(自然科学版). 2012年01期.

[4] 动态注册ODBC数据源的方法[OL]. ht tp://wenku. baidu.com,2013.

[5] (美)帕罗赛斯.MFC Windows程序设计[M].北京:清华大学出版社,2007.

[6] 亓兰武,周晓.OBJ文件和HEX文件相互转换原理与实现[J].电子技术应用.1996年07期.

[7] 刘荣.圈圈教你玩USB[M].北京:北京航空航天大学出版社,2009.

猜你喜欢

PC机脱机固件
浅快呼吸指数相关指标预测脱机结局的价值分析
改良程序化脱机在老年患者呼吸机撤离中的应用
中心静脉血氧饱和度监测在机械通气患者脱机过程中的意义※
基于三菱FXPLC的感应淬火机床与PC机的串行通信实现
VC.NET下实现dsPIC单片机与PC机的通信
排除OLT设备登录故障
基于UEFI固件的攻击验证技术研究*
基于固件的远程身份认证
两种不同脱机方法在ICU老年机械通气患者拔管中的应用
提取ROM固件中的APP