STM32系列单片机脱机批量烧录器的设计与实现

2015-12-06 06:30徐岳清
关键词:脱机低电平高电平

徐岳清

(无锡机电高等职业技术学校,江苏 无锡214000)

0 引言

STM32系列单片机专为要求高性能、低成本和低功耗的应用设计,按照内核架构分别有Cortex-M0、Cortex-M3和Cortex-M4 3种,虽内核不同,但是全系列均支持片内ISP(in-system programmable,系统在线可编程)下载编程模式,并且采用同一种通信协议,因此均可以通过USART接口实现ISP编程。

在批量生产中,STM32常见的烧录方式基本为3种方式。其一为预烧录,在贴片前,使用批量烧录器对芯片进行统一烧录;其二为联机烧录,即在贴片完成后使用JLINK或者STlink和PC机,使用相应的烧录软件通过芯片的SW接口进行烧录或者通过串口进行ISP烧录;其三为脱机烧录,在贴片完成后使用单个SW接口脱机烧录器进行程序烧录。第1种方法烧录速度最快,但是需要拆包装烧录,烧录完成后还要再重新包装,操作比较烦琐;第2种方式烧录速度一般,采用SW接口稍快,但是需要占用2个IO口,如果采用ISP方式,则由于ST官方提供的Flash Loader Demonstrator软件操作步骤较多,导致烧录速度和效率最低[1];第3种较快,但是由于SW脱机烧录器只支持一个SW烧录口,因此只能一次烧录一片。

鉴于上述几种方式的优缺点,本设计采用STM32F302RBT6单片机,设计了脱机ISP烧录工具。STM32F3系列基于 Cortex-M4内核,带有DSP和FPU指令,性价比与STM32F1系列相比更好,STM32F302RBT6单片机采用TQFP64封装,具有1个USB接口,2个SPI接口、3个USART接口和2个UART口,USART口支持同步模式,本设计全部按照异步模式即UART模式使用,因此可以实现通过5路UART同时烧录5片STM32系列单片机。

1 ISP下载协议分析

STM32系列单片机通常支持3种启动模式,在上电时通过BOOT0和BOOT1管脚电平区分。当BOOT0为低电平时,从用户闪存启动,这是正常启动模式;当BOOT0为高电平时,如果BOOT1为低,则从系统存储器启动,芯片出厂时在这个区域放置了bootloader,即自举程序也叫内嵌启动代码,该程序出厂后无法修改,可用于通过USART、USB或者其他方式把应用程序烧录到用户闪存;当BOOT0为高电平时,如果BOOT1为高时,从芯片内置RAM启动。在STM32F0系列中,仅由BOOT0一个管脚用于选择下载模式,当BOOT0为低电平时,从用户闪存启动;当BOOT0为高电平时,从系统存储器启动,即启动自举程序。

通过设置BOOT0=1,BOOT0=0在 MCU启动时就可以进入自举模式,自举程序将扫描USARTx-Rx引脚,等待接收0x7F数据帧,该数据帧的持续时间经过SysTick的测量和相关计算,可以得出当前数据帧的波特率,从而MCU自动配置通信波特率,实现波特率自适应,支持的波特率范围为1 200~115 200。然后发送确认字节(0x79)返回主机,表示STM32已准备好接收命令。自举程序流程框图如图1所示。

图1 使用USART的STM32自举程序流程框图

STM32单片机自举程序支持的命令中常用的见表1,主控端的每条命令都是按照一个字节命令和一个字节命令补码方式发送,每个通信数据包结尾均包含一个字节校验,校验值为前面所有字节的异或运算结果,实现通信数据包的有效性验证。器件在每个数据包被接受后使用ACK(0x79)应答,被丢弃后使用 NACK(0x1F)应答。因此主机在发生完一条命令或者数据包后,通过接收到的应答命令,就可以判断器件是否正常接收。

表1 USART bootloader命令[3]

由于STM32是32位机,因此对器件的数据写入操作必须按照32位对齐方式写入数据,不足位使用0xFF补齐,写入数据必须为4字节的倍数,最大数据块的长度为256字节。为了提高写入的速度,本设计选用256字节作为数据块长度。

2 编程器系统设计

2.1 系统方案设计

通过前面的分析可以得知,控制一个STM32器件的启动模式,需要控制BOOT0、BOOT1和电源的上电顺序,为了减少人工操作,实现全自动化编程,需要使用MOS管控制3个信号的电平,如图2所示,其中 USART1_BOOT0,USART1_BOOT1和USART1_VCC为单片机IO口,采用NMOS管控制,高电平导通,低电平截止,右侧与USART1一起组成一组下载控制口,所使用的上电控制顺序为:USART1_BOOT0高电平,USART1_BOOT1低电平,USART1_VCC高电平启动引导程序并完成ISP下载,下载完成后USART1_VCC设置为低电平,然后再设置USART1_BOOT0为低电平,USART1_BOOT1低电平,USART1_VCC高电平启动应用程序。

图2 MOS管控制组电路图

由于串口不可以一对多组网通信,因此,每个器件均需独立的串口进行通信。本设计的硬件结构如图3所示。

本设计使用点阵显示屏作为人机显示接口,用于显示烧录文件名称、被烧录器件的芯片型号、可烧录器件数量以及烧录状态等信息。显示屏全部采用中文化菜单和提示信息,支持中英文混合显示。同时采用5个独立的三色LED,用于提示烧录的进程,对应的烧录口烧录过程中显示黄色,烧录成功时显示绿色,烧录失败时显示红色,同时使用蜂鸣器在烧录结束时进行鸣叫提示,从而可以增加操作的直观性和易用性。

按键可以用来启动烧录,设置烧录参数,包含是否启用读保护、是否限制烧录次数、是否启用保密功能、是否自动设定硬件序列号以及设置序列号的起始编码以及递增规则,当启用硬件序列号自动烧录功能时,在芯片内部flash指定地址写入唯一编码和硬件序列号。

图3 烧录器结构框图

SPI Flash用于存储待烧录二进制bin文件,可以存储多个二进制bin文件,烧录时通过按键选择其中一个进行烧录。烧录器通过USB口与PC机通信,连接PC机时,烧录器通过内置软件和对应的PC机驱动,把USB虚拟成一个串口,PC机上的专用软件通过该虚拟串口,可以完成程序下载、烧录参数设置等功能。系统供电可以使用5V直流电源适配器,也可以通过USB口的5V电源供电。

2.2 软件算法处理流程

本设计的软件流程如图4所示,系统上电后,首先进行初始化,然后等待USB口消息和按键消息,通过USB口上位机可把待下载的二进制文件下载到下载器板载的SPI Flash存储器上,同时设置待下载文件对应下载配置参数,包含起始地址、可下载最大次数、是否启用读保护等参数。每个下载文件和对应的配置参数均单独保存,使用按键选择对应的下载文件后,与之相关的配置参数也自动调取并显示。如果需要更改待下载参数,也可以通过按键修改并保存。烧录器选择好下载文件和下载配置参数后,即可以启动一键下载。一键下载启动后,每个下载端口对应的MOS开关组同时打开,然后5路串口依次发送版本读取命令0x01,得到应答后,该端口置为有效,否则置为无效,显示屏上对应组号显示“未发现可烧录芯片!”。对于有效的端口,LED亮黄灯,然后依次发送芯片ID读取命令,获取待下载芯片的ID并在液晶屏显示,然后根据待下载文件大小和起始地址,擦除待占用的芯片内部flash,擦除完成后,从SPI Flash读取下载文件内容,并依次写入有效端口连接的芯片。下载完成后,自动进行读取校验功能,即把已下载的程序全部读取出来并和待下载文件比较,如果比较结果正确无误,说明下载已成功,此时LED亮绿灯,蜂鸣器响1声;如果校验出错,说明下载失败,此时LED亮红灯,蜂鸣器连响2声。无论下载失败还是成功,下载结束后,均判断是否关机,如果不关机,则自动回到等待USB响应和按键响应。

图4 软件功能流程图

3 编程器性能测试

为了提高烧录速度,STM32F302RBT6单片机的5个串口均使用中断发送和接收,SPI Flash启用DMA读取,从而SPI Flash读写和5个串口的接收均可以并行执行。即首先启用SPI Flash DMA读取,待DMA读取256字节完成时,再启用5个串口中断发送,然后在串口发送的同时再次启用SPI Flash DMA读取,待DMA读取256字节完成时,判断串口发送中断标志是否置位,如果中断标志有效则启用再次启动串口中断发送,否则等待串口发送完成中断,从而可以大大提高并行处理性能,提高系统效率。

为了验证本设计的高效率特点,特意选用市面上常用的3种下载方式进行对比测试,即J-link,ST-link,脱机SW烧录器,这3种烧录器的共同点是全部采用SWD接口,需要在硬件电路设计时预留烧录口才能使用。本设计采用USART接口,不占用系统IO口资源,程序下载完成后可以用于通信口。本测试使用50k二进制bin文件分别进行擦除、编程和校验测试测试,测试数据见表1。其中J-Link和ST-Link均采用PC机做主机,和PC的整体响应速度相关,由于J-Link比ST-Link的速度高,因此在时间上用时较短。SWD脱机烧录器,由于响应较快,因此用时最少。本设计一次性烧录5片,平均每片只需3.86s。

从数据可以看出,由于本设计采用的STM32 F302RBT6具有灵活的DMA处理和多串口中断处理机制,通过中断触发和DMA操作,大大提高了系统的并行处理速度,从而实现编程5片比编程1片仅仅多用时3.4s,同时该MCU采用支持DSP和FPU指令,在提示并行下载速度的同时,确保了液晶屏得以流畅刷新显示。使用本文设计的编程器,如果算上装夹时间,最快在30s内就可以烧录5片单片机,可以大大提高生产效率。

表2 烧录器时间参数

4 结语

该烧录器支持STM32全系列单片机,可以实现一对五脱机编程,一键下载和加密保护功能在大大提高了生产效率同时也提高了程序安全性。其烧录方便,操作简单,可以满足生产线批量烧写需求,并且只需使用USART接口,烧录完成后,USART可以被应用程序再次使用,不浪费任何单片机资源。本方案在解决原厂提供的烧录软件不足的同时,也为推广高性价比的STM32系列单片机提供了便利。

[1]陈晨,董为云.基于STM32的 USB通信程序设计[J].电子技术与软件工程,2014(1):266.

[2]邓国荣.基于STM32SPI接口的M25P80FALSH的驱动程序设计与实现[J].机电信息,2013(6):144-145.

[3]ST.USART protocol used in the STM32bootloader[EB/OL].[2014-06-27].http://www.stmcu.org/document/download/index/id-208524.

[4]ST.STM32F301x6/8and STM32F318x8advanced ARM-based 32-bit MCUs[EB/OL].[2014-06-23].http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00094064.

猜你喜欢
脱机低电平高电平
一种基于FPGA的PWM防错输出控制电路
浅快呼吸指数相关指标预测脱机结局的价值分析
TS-03C全固态PDM中波发射机开关机控制电路原理及故障分析
改良程序化脱机在老年患者呼吸机撤离中的应用
中心静脉血氧饱和度监测在机械通气患者脱机过程中的意义※
2017款凯迪拉克2.8L/3.0L/3.2L/3.6L车型低电平参考电压总线电路图
浅谈物理电路与数字电路
PDM 1kW中波广播发射机保护电路分析
15-MeV电子直线加速器的低电平系统
两种不同脱机方法在ICU老年机械通气患者拔管中的应用