STM32F1移植IAP+Ymodem+备用区app详细笔记(三)

一,Ymodem数据帧

1.数据帧格式

帧头帧序号帧序号反码数据包CRC16校验
STX/SOHPNXPNData[1024]/Data[128]
字节数1111024/1282

2.帧头区别

帧头为SOH(0x01)时,数据包为128个字节

帧头为STX时(0x02),数据包为1024个字节

3.帧序号

范围为0-255,大于255时是归零重新计算

4.开始帧数据结构

SOH+0x00+0xff+文件名+0x00+文件大小+0x00+0x00……(填充)+CRC16

5.结束帧数据结构

SOH+0x00+0xff+ NUL[128] +CRC16

结束帧同样以SOH开头,表示后面跟着128字节大小的数据;128字节的数据部分不存放任何信息,即NUL[128]全部用00填充。

6.数据包注意

当最后一帧数据包里的数据不足1024位时,会用0x1A去填充。

7.数据中特定符号的数值及含义

符号数值含义

SOH

0x01(帧头)数据包长度为128
STX0x02(帧头)数据包长度为1024
EOT0x04结束传输
ACK0x06应答
NACK0x15不应答
C0x43请求数据包
CA0x18中止

8.传输过程

开始时,上位机读到C指令后,第一帧帧头为SOH(0x01),帧序号为0x00,传输文件名和文件大小。大量0x00为填充数据包到128个字节的,后面两位为CRC校验。

正常传输数据包,可以看到第二帧数据,帧头为STX(0x02),帧序号0x01,然后传输1024位的数据包,读到(0x06)为应答成功,继续传输。

传输结束,先应答ACK(0x06)传输结束EOT(0x04)未应答NACK(0x15)再应答ACK(0x06),开始结束帧传输,帧头SOH(0x01),帧序号0x00,后面全是0x00

二,应用

在升级时,经常会遇到升级一半卡住或者软件闪退的问题,这样就会导致flash区刷一半然后执行,mcu直接变砖的情况,巧妙运用开始帧的数据,可以避免很多问题。

1.从开始帧可以看到文件名和文件大小,从我多次观察看,bin文件大小就是程序flash大小,我们直接获取文件大小,可以直接判断flash是否全部刷新成功。

// 检查flash最后几位
static u8 CheckFlash(Iap_INFO* IAP_info) {
	u16 key[3]={0};
	u32 ApplicationAddress_END;
	//ApplicationAddress为主程序区起始0x8003000
	ApplicationAddress_END = (IAP_info->total_size + ApplicationAddress );
	printf("size:%d",IAP_info->total_size);
	STMFLASH_Read(ApplicationAddress_END,key,3);
	printf("ApplicationAddress_END:");
	printf(key);
	if(key[0] ==  0xFFFF && key[1] ==  0xFFFF && key[2] ==  0xFFFF)
	{
		return 1;
	}
	return 0;
}

2.从我这个起始帧可以看到,文件大小是40496,我用keil5查找40496+0x8003000(0x9E30+0x8003000=0x800CE30)地址是可以刚好看到的

3.这样便能更好的解决一些问题了,可以做一些错误处理。

  • 16
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32F429串口IAP(Ymodem)升级是一种在STM32F429上通过串口进行最小系统升级的方法。其中,IAP全称为In-Application Programming,可以实现对单片机程序在应用程序的控制下进行在线升级的功能;而Ymodem则是一种通用的串行数据传输协议,可以保证数据的可靠性。 该方法的使用过程如下: 1.使用对应的工具(如ST-LINK Utility)将应用程序和BOOTLOADER程序分别烧录至单片机的Flash中。其中,BOOTLOADER程序一定要占用Flash的起始位置,并且大小应该尽量小。 2.编写在应用程序中调用的IAP程序,该程序通过解析Ymodem数据包的方式将更新数据升级到Flash中。同时,IAP程序需要包含一些自我保护措施以避免出现卡死等问题。 3.通过串口将更新数据以Ymodem协议的方式发送给单片机。在发送数据之前,需要保证串口配置正确(比如波特率、数据位等)。 4.单片机收到数据后,进行解析并将数据写入Flash中。在写入数据时需要判断支持Flash的型号和大小,以及使用哪个扇。 该方法的优点在于可以实现在线升级,并且对于不同的Flash型号和大小都有较好的兼容性。同时,采用Ymodem协议可以保证了数据的可靠性,避免了出现数据出错、丢失等问题。缺点则在于需要编写一定的IAP程序,并且在升级时存在一定的安全风险。 ### 回答2: STM32F429作为一款高性能的微控制器,具有多种升级方式。其中比较常用的方式为串口IAP和Ymodem升级。 串口IAP(In-Application Programming)是通过串口通信升级系统的一种简单可行的方法。在程序中添加IAP函数库,修改引脚配置,通过串口连接PC,将升级文件发送至微控制器,程序将自动更新Flash存储器中的程序。 而Ymodem升级则是通过调用UART外设与上位机之间通信,采用基于CRC-16校验的Ymodem-M协议完成数据传输的无需Bootloader的升级方式。该方法优点是可以通过任何终端软件直接实现,缺点是升级速度可能会受到波特率和数据带宽限制,传输时间可能长。 综合来看,根据具体需求和情况选择合适的升级方式,既能提高升级效率,又能确保升级的稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值