基于Ymodem协议的STM32F407的串口IAP

发布者:数字思维最新更新时间:2019-06-14 来源: eefocus关键字:Ymodem协议  STM32F407  串口IAP 手机看文章 扫描二维码
随时随地手机看文章

IAP简介

IAP:In Application Programming 是指在应用编程,即在程序运行中编程,就是片子提供一系列的机制(硬件/软件上的)当片子在运行程序的时候可以提供一种改变flash数据的方法。这种机制的存在可以实现单片机设备的免拆机升级和远程升级。一般实现形式为在单片机内先执行引导程序,由引导程序判断是否需要进行固件升级。如果需要执行固件升级,则引导程序通过串口或者SD卡等IO设备将应用程序的固件写到规定的地址上,然后跳转到规定的地址上执行应用程序。


Ymodem协议

Ymodem是一种错误纠正协议。使用较大数据块的调制解调采用这种协议,以获得更高的工作效率。采用Ymodem协议的调制解调器以1024字节数的块发送数据。成功接收的不会被确认。有错误的块被确认(NAK),并重发。Ymodem类似于Xmodem-1K,不同之处是提供批处理模式(batch mode)。在批处理模式下,可以使用一个命令发送一些文件。Ymodem使用循环冗余码校验作为错误校验方式。——摘自百度百科


基于Ymodem协议的IAP引导程序

硬件平台

原子探索者STM32F407开发板


通信接口

串口


实现流程

按住复位键时按下KEY1键,在松开复位键之前按住KEY1不放,松开复位键,红色LED灯常亮,这时便进入固件升级程序,不断向上位机发送字符’C’请求上位机发送应用程序固件。这时打开上位机查询请求,上位机接收到请求后,通过串口发送第一个数据包,这个数据包主要包含了传输的文件的文件名和文件大小,因为这次的引导程序是直接将接收的固件直接写入单片机内部的Flash,所以我们真正需要的数据就是文件的大小的,文件的大小就整个应用程序固件的大小。我们需要根据这个数据来决定需要擦除多少个扇区来保证有足够空间存放应用程序固件。 

当单片机擦除扇区完成后,会向上位机发送一个应答字符。接着再发送一个’C’,准备接收真正的应用程序固件的数据。上位机接收到单片机发送过来的应答字符和’C’字符后,开始正式的文件传输,每次传送一个包的数据,单片机把接收到的数写进指定的内部Flash中。并向上位机发送应答字符,上位机接收到应答字符后,继续发送下一包数据,直至文件传送完毕后,上位机向单片机发送一个表示文件传输结束的包。标识文件传输完成。单片机在接受到此包后,向上位机发送一个应答字符。之后执行一系列操作后跳转至应用程序。 

整个引导程序通过IAP更新应用程序固件的流程就如上所述。

 

实现细节

STM32F407内部Flash模块构成 

 这里写图片描述

由于STM32F4系列的内部Flash扇区大小并不是标准统一的,所以在擦除时较之前的F103系列有所不一样。

STM32F407擦除指定地址和空间大小的Flash 

这里写图片描述

从首地址开始,每擦除一片扇区,地址在加上此扇区的大小,再作为基地址擦除下一扇区。直至擦除的FLASH达到指定的大小。

获取指定扇区的大小 



关键字:Ymodem协议  STM32F407  串口IAP 引用地址:基于Ymodem协议的STM32F407的串口IAP

上一篇:STM32 Keil查看程序占用ROM和RAM
下一篇:STM32 YMODEM实现bootloader

推荐阅读最新更新时间:2024-11-07 11:46

毕业设计| STM32F407智能汽车
STM32小车功能介绍 小车的硬件部分使用了以STM32F407VET6最小开发板为核心板,内部结合:温湿度模块、烟雾浓度模块、RFID模块、GSM模块、GPS定位模块、语音识别模块、超声波模块、蓝牙模块、OLED模块、舵机模块、电机驱动模块、电机模块、蜂鸣器模块、电压数码管显示模块和电源模块,外结合四个麦克纳姆轮,构成一个完整可靠的硬件系统。 软件控制系统包括了智能显示系统、语音智能控制系统、无线控制系统、车灯智能控制系统、安全报警系统、智能避撞系统、智能温控系统和一键报警系统,在一定程度上提高汽车的安全性、控制性和防盗性。 Image 各个功能分解 语音智能控制系统: 通过语音识别模块识别驾驶员的语音来控
[单片机]
毕业设计| <font color='red'>STM32F407</font>智能汽车
stm32f103的串口IAP(使用Ymodem)调试过程记录
准备 开发环境:IAR EWARM v8。 下载官方Bootloader程序包 en.stsw-stm32008.zip和应用手册 AN2557,下载页面。 Bootloader程序修改 解压缩 en.stsw-stm32008.zip 文件,进入目录 STM32F10x_AN2557_FW_V3.3.0ProjectIAPEWARM 中,用IAR打开 IAP.eww。 由于这里采用的处理器为stm32f103re,为hd型处理器,所以在IAR打开的界面中,根据 AN2557 P5(第5页) 在Workspace中,选择STM3210E-EVAL,此时IAR的工程文件夹EWARMv5中,使用启动文件 startup_stm32
[单片机]
STM32F407学习记录2:SysTick嘀嗒定时器学习
Systick嘀嗒定时器是一个24位的递减计数器。该定时器的时钟源可以是内部时钟,也可以是外部时钟。 M4的Systick有四个寄存器,分别是 1. Systick control and status register(STK_CTRL) 控制和状态寄存器; 2. Systick reload value register(STK_LOAD) 重装数值寄存器; 3. Systick current value register(STK_VAL) 当前计数值寄存器; 4. Systick calibration value register(STK_CALIB) 校准数值寄存器。 STM32F4中Systick相关函数主要在mis
[单片机]
使用J-FLASH烧写stm32F407
open data file- connect- program- start application 硬件连接完毕 open data file 软件出现文件框 connected 软件显示connected successfully program(不操作此项直接进行下一步硬件无反应) start application
[单片机]
使用J-FLASH烧写<font color='red'>stm32F407</font>
STM32F407定时器编码器模式简介
void encoder_left_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_ICInitTypeDef TIM_ICInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//开启TIM3时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);//开启GPIOB时钟 GPIO_PinAFConfig(GPIOD,
[单片机]
<font color='red'>STM32F407</font>定时器编码器模式简介
stm32f407】轮序方式的按键应用
1. 硬件原理图: 可以看到user button是PA0 2. 程序步骤 1) 使能按键对应IO口时钟。 PA0在AHB1总线上 调用函数:RCC_AHB1PeriphClockCmd (); 2) 初始化IO模式:上拉/下拉输入。 3) 扫描IO口电平 3. 程序原码 key.h #ifndef _KEY_H_H_H #define _KEY_H_H_H #include stm32f4xx_gpio.h #include stm32f4xx_rcc.h #define KEY_ON 0 #define KEY_OFF 1 void KEY_Init(void); ui
[单片机]
【<font color='red'>stm32f407</font>】轮序方式的按键应用
STM32F407开发板DS18B20应用案例
【1】DS18B20介绍 DS18B20是一种数字温度传感器,由Maxim Integrated公司生产。它采用单总线接口,能够在广泛的温度范围内测量温度,并通过数字方式输出温度值,具有较高的精度和稳定性。 以下是DS18B20温度传感器的主要特点和操作时序: (1)特点: 单总线接口:DS18B20使用单一的数据线进行通信,简化了连接和控制。 高精度测量:具有12位的温度分辨率,可测量范围为-55°C至+125°C。 数字输出:温度值以二进制形式传输,便于处理和解析。 内部存储:传感器可内部存储温度数据和配置信息。 低功耗:在非活动状态下,传感器可以进入睡眠模式以降低功耗消耗。 (2)操作时序: DS18B20的
[单片机]
<font color='red'>STM32F407</font>开发板DS18B20应用案例
基于STM32F407的FreeRTOS学习笔记(4)
CPU工作的时候,各个任务运行会占用CPU的资源,在Windows系统中我们可以通过任务管理器来看各任务(进程)占用系统资源的情况。 那么,FreeRTOS怎么实现这个功能呢? 我们翻阅FreeRTOS官网,查询API文档,在内核控制函数部分找到了相关的函数。 文档指出实现运行时间功能需要配置外设定时器,即32板载定时器,计时器频率应为滴答计时器(1ms)的至少10倍。 传入参数为pcWriteBUffer,其实是一个char类型的数组用以存储相关信息。 我们现在工程上调用这个函数。 char informationbuff ; void Get_info(void * pvParameters) {
[单片机]
基于<font color='red'>STM32F407</font>的FreeRTOS学习笔记(4)
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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