STM32双核板的应用设计与ISP的从机软件升级

发布者:温柔之风最新更新时间:2016-03-17 来源: 21ic关键字:STM32  双核板  ISP  软件升级 手机看文章 扫描二维码
随时随地手机看文章
引言

在单片机的应用设计中,常常会遇到如下问题:其一,某一熟悉类型的单片机功能可用,性价比也很好,但限于某种内部资源(如串口数、A/D路数等)不足,不得不选用更高档或不太熟悉的单片机,造成资源的浪费和开发周期的延长。其二,在海洋远程监测等重要领域,对控制器的可靠性要求较高,而单片机存在死机的可能性,即使可以通过配备看门狗来避免这种情况,但这种“粗暴”的复位方式并不合理(首先,复位打乱了正常的数据采集和处理工作,导致重要数据丢失;其次,即便能记录下复位时间和次数,但复位原因和复位前状态等信息无法侦测,一些本该解决的BUG被掩盖,导致频繁复位)。其三,由于开发周期不足或测试不充分,导致设备投入运行后出现故障,而这些故障往往通过软件升级的方式可以解决,但由于设备的应用场所比较特殊(如水下),导致软件升级的成本很高。

针对上述3种情况,在实际的项目应用中设计了基于STM32的双核板,较好地解决了资源不足、稳定性差和基于CAN总线的远程升级等问题,具有性价比高、开发周期短等优点。

1 双核板设计

STM32系列单片机具有高性能Cortex—M3内核和外设,功耗低,集成度高,性价比高。另外,ST公司还提供了外设的标准库函数,屏蔽了底层硬件细节,能够使开发人员轻松完成产品的开发,缩短系统开发时间。正因为如此,STM32系列单片机得到了开发者的青睐。其应用领域和客户群不断扩大。其中的 STM32F107属于互联型系列,具有以太网和CAN总线接口,在数据通信方面具有独特的优势。一种基于STM32F107的双核板如图1所示。

a.jpg

图1中,两个STM32F107最小系统模块分别称为A-CORE和M-CORE,A-CORE具有外看门狗,为主机模块;M-CORE不具有外看门狗,但其RST/BOOT0引脚受A-CORE的控制,可以通过串口实现ISP总线升级,为从机模块。由于A-CORE和M-CORE均具有电源系统、复位电路和下载接口等调试所需的基本要素,因此可以预先焊接和调试好。在具体项目的开发应用中,将双核板作为一个独立的元件嵌入,一些软件可以提前验证和编写,大大缩短了产品的开发周期。

在正常工作时,主从机两个模块独立工作,两者通过SPI总线相互通信。SPI接口传输速率可达到18 Mbps,比I2C和UART通信要快得多。由于采用双核,通用I/O引脚显著增多,不仅可以完成更加复杂的设计,而且降低了布局布线的难度。对于熟悉 STM32的开发者来说,开发难度基本不变,而可使用的资源却几乎成倍增加。

在该双核板的设计中,还考虑了A—CORE对M—CORE的在线升级问题。图1中M—CORE的RST、BOOT0两个引脚受A—CORE控制,来实现 M-CORE的复位和复位地址选择;而ISP-AT-MR和ISP-AR-MT两个引脚则是作为USART接口,实现对M-CORE的ISP升级。

2 可靠性设计

在本文的应用中,A—CORE和M—CORE分工合作。A—CORE主要完成系统的管理工作,如人机交互、数据存储、通信等;M—CORE主要完成信息采集、外部设备控制等功能,这样设计的优点是功能分明、负荷分担。负责采集控制的M—CORE可以集中精力完成数据采集和辅助的控制工作;而负责管理的A— CORE除了完成人机交互、数据存储和通信外,还需要定期发起与M—CORE的通信,以保证相互监督。

M—CORE收到A—CORE的指令后,会将当前的工作状态报告给A—CORE,再由A—CORE通过CAN总线等手段上传给更高层的通信主机。如果A— CORE发现M—CORE不能正常回复信息,则说明M—CORE处于不正常状态,必要时可实现对M—CORE的“危机干预”。例如,在连续多次均不能正常通信的情况下,可以认为M—CORE已处于死机状态,A—CORE将复位M-CORE。A—CORE和M—CORE的状态转换图如图2所示。

b.jpg

显然,这种双核结构和定时通信机制,可以使每个MCU知道对方的工作情况。虽然在结构上分出了A—CORE和M—CORE,但由于每个MCU都有CAN总线与通信主机相连,因此每个MCU都可以单独通向主机汇报工作状态,汇报的内容都可以通过CAN总线接收到,因此起到了相互监督的作用。

3 基于CAN总线的软件升级

具备远程软件升级的设备具有更广泛的适用性,可以在设备安装到位后,通过软件升级在线修复一些问题,不但节省人力物力,也可以使设备的功能逐步完善。

双核板具有CAN总线,该总线不但是数据交换的通道,也是软件升级的通道。上位机可以通过CAN总线将需要升级的程序代码下传到A—CORE,A— CORE控制M—CORE的RST/ BOOT0引脚,使M—CORE复位并进入ISP状态,从而完成在线升级。由此可见,要实现基于CAN总线的在线软件升级,需要3个条件:一是待升级系统 M—CORE本身具有ISP功能,能通过串口实现程序的下载;二是A—CORE本身集成CAN总线,可通过CAN总线接收上位机发送的待升级程序代码;三是A-CORE可以控制M—CORE的RST/BOOT0引脚,完成在线升级。

3. 1 STM32的ISP升级

ISP(In-System Programming)方式相对于传统的并行编程方式有了极大的进步,无需将单片机从电路板上卸下就可进行编程。STM32系列芯片复位时,可以通过BOOT1和BOOT0的逻辑电平来决定系统的启动模式,见表1所列。

c.jpg

系统复位时,CPU根据这两个引脚的逻辑电平把相应模式的起始地址映射到启动空间(0x 0000 0000)。在启动延迟之后,CPU从位于0x0开始的启动存储区执行代码。由于实际应用中很少从内嵌SRAM中启动,故可将BOOT1引脚直接设置为低电平,只通过判断BOOT0引脚的高低电平来选择从用户闪存或系统存储器中启动。若复位时BOOT0的逻辑电平为高,则复位后从系统存储器启动,可通过 USART1与Bootloader进行通信。

STM32芯片具有开放式的在线烧录ISP协议,允许第三方根据该协议编写ISP下载软件,对STM32芯片进行FLASH的更新操作。在进行ISP方式升级时,先发送0x7F实现自动波特率匹配,能够识别最高115 200 bps的串口波特率。如果正确回应0x79,表示命令执行正常。握手正确后,就可以通过ISP命令实现对STM32的ISP操作,完成FLASH的擦除和编程。

3.2 FLASH分区存储

STM32F107片内集成256 KB FLASH和64 KBSRAM,FLASH由主存储块(Main Block)和信息块(Information Block)组成。主存储块用于存放用户程序,每页2 KB,共128页,容量为32K×64位,地址范围为0x0800 0000~0x 0803 FFFF;信息块容量为2 360×64位,分为启动程序代码和用户选择字节。启动程序代码从0x 1FFF B000~0x 1FFF F7FF,共18 KB,用户选择字节从0x 1FFF F800~0x 1FFF F80F,共16字节。

A-CORE的FLASH存储器分区如图3所示。

d.jpg

0x0800 0000~0x0800 1FFF,共8 KB空间,为Boot-loader代码空间。

0x0800 2000~0x0801 FFFF,为120 KB空间,存放A-CORE自身程序。

0x0802 0000~0x0803 FFFF,为128 KB空间,存放M-CORE应用程序。

上述空间分配,虽然升级程序的空间受到了限制,但在大多数情况下是可行的,因为A—CORE和M—CORE任务分担,其本身的程序量均不足总FLASH容量的一半。如果出现了空间不足的现象,完全可以换用更大容量的MCU。

3.3 软件升级流程

要完成A—CORE对M—CORE的软件升级,其过程可以分为两个阶段:基于CAN总线的数据传输和基于USART的ISP过程。

(1)基于CAN总线的数据传输

当M—CORE需要更新用户程序时,上位机将编译成功的M—CORE升级程序的HEX文件通过CAN总线发送到A—CORE。上位机先发送升级指令,A—CORE接收到升级指令后,将FLASH中M—CORE升级程序区(0x 0800 2000~0x 0801 FFFF)擦除,擦除成功后回复上位机,若回复错误信息,则退出升级;上位机接收到回复后,按行发送HEX文件内容,A—CORE接收到数据后,依次写入A—CORE的M—CORE升级程序区(0x 08002000~0x 0801 FFFF)中,接收完毕后向上位机发送写入完毕指令。

(2)基于USART的ISP过程

当A-CORE接收到上位机发送的升级执行指令后,升级流程如下:

①置M-CORE的BOOT0引脚为高电平,然后置RST引脚为低电平,复位M-CORE,使其从系统的内存模式启动,然后将RST引脚拉高。

②A—CORE向M—CORE发送0x7F,M—CORE接收该数据,并根据该数据与A—CORE自动匹配波特率,进行回复。若回复0X79,则表示可以进行相关擦除和写FLASH操作了,若回复0x1F,则升级失败。

③A—CORE收到正确的应答,则发送0x44+0xBB,根据程序大小擦除FLASH,根据STM32F107内部固有的Bootloader串口协议,擦除完成后回复A—CORE。

④A—CORE等待接收M—CORE的回复,收到正确的应答之后,发送0x31+0xCE,把存储到A—COREFLASH中的M—CORE升级程序区的内容写到M—CORE的相应FLASH中,一次写256个字节,直到把所有的用户程序写入用户存储区。

⑤A—CORE控制BOOT0引脚,并控制RST为低电平,对M—CORE进行硬件复位,M—CORE重新初始化程序,从而运行刚刚更新的用户程序。

软件升级交互流程如图4所示。

e.jpg

结语

基于STM32的双核板可以有效解决单个微处理器内存资源不够的问题,在基本不增加开发难度的基础上,使系统资源加倍增加,可以完成更为复杂的应用设计;通过A—CORE和M—CORE相互监控,提高了整个系统的可靠性,能够有效发现软硬件隐患;通过双核有效的任务分工,减小了单个MCU的负担,使系统运行更加可靠;基于ISP和CAN总线的远程升级系统,有效利用了CAN总线通信速率高、抗干扰能力强、传输距离远的特点以及STM32系列自身具有的 ISP功能,在设备安装以后仍能够升级程序,既方便了智能设备的开发,又降低了维护成本。

关键字:STM32  双核板  ISP  软件升级 引用地址:STM32双核板的应用设计与ISP的从机软件升级

上一篇:具备对讲功能的矿用广播终端系统设计
下一篇:CAN总线在风力发电控制系统中的应用

推荐阅读最新更新时间:2024-03-16 14:47

stm32的swd接口的烧写协议是否公开的呢?
需要用一台好的示波器来抓才能有足够的存储深度,保证你能够过滤掉那个该死的50clock。 按照Arm的手册,每次转换发送方都需要一个TNR---但是我观察JLINK的波形却没有那个该死的TNR。 手册中说异步SWD需要,同步不需要----或者相反,但是我没有找到关于同步异步的描述。 姑且不管他,反正目前忽略掉TNR就能够读到该死IDR。 另外JLINK的复位时序很奇怪,大致是 70clk High,0xe79e(注意,SWD是LSB First), 70clk High,0xedb6(这里很奇怪,找不到描述), 70clkHigh,16clk Low,0xa5, 注意这里按照协议应该是TNR位-但是没有实际观测到这个位, 0b10
[单片机]
关于keil uvision5 Debug调试和调试STM32HAL库出现的问题
在使用Keil5调试时,发现点击Debug session调试按钮后, **调试箭头发现不是指在main函数体而是指向disassembly汇编代码区**, 这就导致我们无法调试我们的代码。以下是我的解决方法: 1.点击options for target魔法棒配置目标,选择Debug- 再如下图所示勾选红框部分。 2.再选择Output- 勾选Debug information- 点击ok. 这就可以点击Debug session完成从main函数体进行调试代码了。 当我在使用STM32HAL库进行编写程序完成后,使用keil5进行调试代码时,点击RUN后,突然弹出cannot access target
[单片机]
关于keil uvision5 Debug调试和调试STM32HAL库出现的问题
STM32串口USART1程序
原理图: 头文件及完整例程下载: http://www.51hei.com/f/stm32标准例程库函数.rar 程序分析: main.c #include stm32f10x.h #include stm32f10x_usart.h #include misc.h #include stdarg.h /* Private variables ---------------------------------------------------------*/ USART_InitTypeDef USART_InitStructure; uint8_t TxBuffer1 = USART Interrupt Ex
[单片机]
<font color='red'>STM32</font>串口USART1程序
如何利用PCB设计stm32单片机
单片机是现代电子产品中不可或缺的组成部分,它在自动化控制、通讯、仪器仪表、家电、安防等领域有着广泛的应用。而PCB(Printed Circuit Board)也是电子设计中不可或缺的一环,是来集成各种元器件的载体。那么,如何利用PCB设计stm32单片机呢?本文将为大家解答这个问题。 首先,我们需要明确stm32单片机的基本架构和性能特点。stm32单片机采用了Cortex-M内核架构,并具有低功耗、高速、低噪音等特点。在使用stm32单片机设计电路时,我们需要对其数据和控制信号进行充分的了解,从而根据自己项目的需求选择合适的芯片。 接下来,我们来介绍如何利用PCB设计stm32单片机。首先,我们需要通过软件绘制PCB电
[单片机]
高手带你解析STM32 BSRR BRR ODR 寄存器
一、用法 经常会看到类似如下的宏定义语句,用于对已经初始化后的 IO 口输出高、低电平。 #define SET_BL_HIGH() GPIOA- BSRR=GPIO_Pin_0 #define SET_BL_LOW() GPIOA- BRR=GPIO_Pin_012 其作用类似于如下两个库函数, void GPIO_SetBits(GPIO_Typedef* GPIOx, uint16_t GPIO_Pin) void GPIO_ResetBits(GPIO_Typedef* GPIOx, uint16_t GPIO_Pin) 12 而且实际上这两个库函数就是通过修改BSRR,BRR寄存器的值来实现对 IO
[单片机]
STM32串口中断使用
简介:STM32串口中断使用:配置串口时钟在void Rcc_Configuration(void)函数中实现,配置串口管脚在void UsartGPIO_Configuration(void)中实现;初始化参数设置串口中断配置。 以提高CPU的利用率。在程序中处理流程如下: 一:串口初始化 1.配置串口时钟 在void Rcc_Configuration(void)函数中实现 1.void Rcc_Configuration(void) 1.{ 2. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE); 3.
[单片机]
STM32单片机串口通讯故障排除处理过程
STM32串口发送必须先检测状态,否则第一个 字节无法发出,发送完毕,必须检测发送状态是否完成,否则,发送不成功, 使用stm32f10x调试串口通讯时,发现一个出错的现象,硬件复位重启之后,发送测试数据0x01 0x02 0x03 0x04.。接收端收到的数据为:0x02 0x03 0x04,第一个数据丢失。换成发送别的数值的数据,如0x06 0x0ff,则接收到0x0ff,0x06丢失。错误依旧。 故障排除过程: 1、刚开始怀疑是接收端的错误,我是使用电脑串口,运行串口辅助调试工具接收,换成其他软件后,发现故障依旧,而且电脑软件一直是开启状态,不像和电脑软件有关。 2、使用单步调试,单步运行各个发送指令,都正常。能收到0x
[单片机]
<font color='red'>STM32</font>单片机串口通讯故障排除处理过程
一种通用的嵌入式系统ISP方法
摘要:针对没有集成ISP功能的MCU系统,提出了一种通用的嵌入式系统Flash在线编程(ISP)方案。该方案借用RAM作为ISP的程序存储器,可降低系统成本并具有较大的灵活性。以MC68332平台为例,详细介绍了这种ISP方案的具体实现过程。 关键词:嵌入式系统 Flash ISP MC68332 随着嵌入式系统技术的发展,电可擦除的Flash芯片以容量大、价格低、编程方便等优势得到了广泛的应用。由于同一片Flash作业程序存储器的系统无法直接实现在系统编程(ISP)。为了方便现场调试和程序升级,可以采用集成ISP功能较新的MCU(如AVR、部分ARM芯片等),或者采用双Flash设计等方法实现ISP功能。但有不少系统仍然使用
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved