Changes from v2.7.7 to v2.7.8:
[feat]:upgrade patch tool to v3.8 [opt]:opt code generate process display [opt]:opt login logic [opt]:opt ghs support [opt]:add MC03 ghs supportConfig Tool Version:2.7.6
IDE:GCC+VSCode
在调查分析低功耗问题时,可以将下面对应的elf文件下载到板子上进行功耗测试。
如功耗比对正常,就可以快速排除芯片自身,及部分硬件电路的原因。
f18aa665-d8af-435b-9981-992492ca43b9-image.png MC0,MD24,HA01 需要将PTA10(JTAG_TDO)设置为pull-up
3c734066-eba1-42de-9b66-458c43578e6b-image.png 测试注意事项 电流表串联进芯片VDD PIN脚,不要分流其他器件。 断开仿真器。 YTM32B1LE0开发板测试需要拿掉2个滑动变阻器RP1,RP2。 YTM32B1HA0开发板测试需要拔掉J35,J36 YTM32B1LE0
70b758b4-afe6-491a-a319-25d0c53dd0ed-image.png
YTM32B1LE0_Standby_SIRC_Enable.elf
YTM32B1LE0_Standby_SIRC_Disable.elf
YTM32B1LE0_Standby.zip
63a82db6-5051-47ab-b533-9820fa1f5cdf-image.png
YTM32B1LE1_Standby_SIRC_Enable.elf
YTM32B1LE1_Standby_SIRC_Disable.elf
YTM32B1LE1_Standby.zip
b793ad60-3863-45a0-9f9d-17f74b9f8174-image.png
YTM32B1MC0_Standby_SIRC_Disable.elf
YTM32B1MC0_Standby_SIRC_Enable.elf
YTM32B1MC0_Standby.zip
6c917447-85d9-40c8-8b8e-f0d24f40aa01-image.png
YTM32B1MD1_PowerDown_SIRC_Disable.elf
YTM32B1MD1_PowerDown_SIRC_Enable.elf
YTM32B1MD1_StandBy_SIRC_Disable.elf
YTM32B1MD1_StandBy_SIRC_Enable.elf
YTM32B1MD1_PowerDown.zip
7817f175-04da-4eaa-8be8-fd6aa3560b12-image.png
YTM32B1MD2_Standby_SIRC_Disable.elf
YTM32B1MD2_Standby_SIRC_Enable.elf
YTM32B1MD2_Standby.zip
92576185-4334-4d16-8f06-ca62541002ae-image.png
YTM32B1ME0_PowerDown_SIRC_Disable.elf
YTM32B1ME0_PowerDown_SIRC_Enable.elf
YTM32B1ME0_StandBy_SIRC_Disable.elf
YTM32B1ME0_StandBy_SIRC_Enable.elf
YTM32B1ME0_PowerDown.zip
19e00a5b-7ccb-42d1-ab87-ac0b6a8281dd-image.png
YTM32B1HA0_PowerDown_SIRC_Disable.elf
YTM32B1HA0_PowerDown_SIRC_Enable.elf
YTM32B1HA0_StandBy_SIRC_Disable.elf
YTM32B1HA0_StandBy_SIRC_Enable.elf
YTM32B1HA0_PowerDown.zip
82f66f21-ce70-42c7-bd12-0bc1f923596a-image.png
YTM32Z1LS0_Standby_SIRC_En.elf
YTM32Z1LS0_Standby_SIRC_Dis.elf
YTM32Z1LS0_PowerDown.elf
措施: 在睡眠之前把不需要工作的外设Disable,其外设中断Disable; 在唤醒以后吧需要工作的外设重新Enable,其外设中断Enable;
demo工程:
MC0_MID_DEMO.zip
背景
解决方案描述
采用双通道协同的工作方式: 通道2(eTMR_CH2):配置为PWM输出模式 通道5(eTMR_CH5):配置为输出比较模式,用于产生周期中点中断 用周期中点中断作为同步基准点,在当前PWM周期运行至一半时,更新下一个完整周期的PWM参数,实现动态调整
步骤
ETMR模块配置
PWM输出通道选择CH2,频率为10000HZ
37a4ae3d-3db7-4e8f-b31e-3bb322a078d7-image.png
Output Compare通道选择CH5
时钟源为FXOSC(24000000HZ)
设置初始VAL0 VAL1值为 (240000000/100000)/2 = 1200
51ead5b4-bac1-4f86-ba96-293b24ce3749-image.png
代码
这两个数组定义了一组PWM周期及其对应的中断触发点:
// PWM周期值(计数器计数值)
uint32_t eTMR_values[] = {10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000};
// 对应的中断触发点(周期一半的计数值)
uint32_t values[] = {2400, 2667, 3000, 3429, 4000, 4800, 6000, 8000, 12000, 24000}; /* USER CODE BEGIN Header */ /* you can remove the copyright */ /* * Copyright 2020-2023 Yuntu Microelectronics Co., Ltd. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause * * @file main.c * @brief * */ /* USER CODE END Header */ #include "sdk_project_config.h" /* Includes ------------------------------------------------------------------*/ /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "osif.h" #include <stdint.h> /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ #define ETMR_INST 0 #define ETMR_CHANNEL_INDEX0 2 #define ETMR_CHANNEL_INDEX1 3 volatile uint8_t i = 0; uint32_t eTMR_values[] = { 10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000 }; uint32_t values[] = { 2400, // 10000 -> 2400 2667, // 9000 -> 2667 3000, // 8000 -> 3000 3429, // 7000 -> 3429 4000, // 6000 -> 4000 4800, // 5000 -> 4800 6000, // 4000 -> 6000 8000, // 3000 -> 8000 12000, // 2000 -> 12000 24000 // 1000 -> 24000 }; /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN PV */ /* USER CODE END PV */ /* Private function declare --------------------------------------------------*/ /* USER CODE BEGIN PFDC */ /* USER CODE END PFDC */ static void Board_Init(void); /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ void eTMR0_Ovf_IRQHandler(void) { eTMR_DRV_ClearTofFlag(0); } void eTMR0_Ch4_Ch5_IRQHandler(void) { /* Clear interrupt flag */ eTMR_DRV_ClearChnFlag(0, 1 << 5); if(i <= 10) { PINS_DRV_TogglePins(GPIOD, (1<<5)); eTMR_DRV_UpdatePwmPeriod(ETMR_INST, ETMR_CHANNEL_INDEX0, eTMR_values[i]); eTMR0->CH[5].VAL0 = values[i] / 2; eTMR0->CH[5].VAL1 = values[i] / 2; eTMR_DRV_SetLdok(ETMR_INST); i++; } else i = 100; /* Add your code here */ } /* USER CODE END 0 */ /** * @brief The application entry point. * @retval int */ int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ Board_Init(); /* USER CODE BEGIN 2 */ /* PWM is generated when eTMR enable, the duty cycle is configured in the initial function */ INT_SYS_EnableIRQ(eTMR0_Ch4_Ch5_IRQn); eTMR_DRV_Enable(ETMR_INST); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } static void Board_Init(void) { CLOCK_SYS_Init(g_clockManConfigsArr,CLOCK_MANAGER_CONFIG_CNT,g_clockManCallbacksArr,CLOCK_MANAGER_CALLBACK_CNT); if(STATUS_SUCCESS != CLOCK_SYS_UpdateConfiguration(CLOCK_MANAGER_ACTIVE_INDEX,CLOCK_MANAGER_POLICY_AGREEMENT)) { /* USER CODE BEGIN ERROR_HANDLER 1 */ SystemSoftwareReset(); /* USER CODE END ERROR_HANDLER 1 */ } PINS_DRV_Init(NUM_OF_CONFIGURED_PINS0,g_pin_mux_InitConfigArr0); eTMR_DRV_Init(0,&ETMR_CM_Config0,&ETMR_CM_Config0_State); eTMR_DRV_InitPwm(0,&ETMR_PWM_Config0); eTMR_DRV_InitOutputCompare(0,&ETMR_OC_Config0); } /* USER CODE BEGIN 4 */ /* USER CODE END 4 */
基于MD这类没有独立Dflash的MCU,且同时具有硬件AB swap需求和FEE历史数据保持的需求,优先建议客户选择外挂的eeprom,硬件方案实在无法外挂eeprom再参考该文档实现,本文档是基于MD14开发板设计的。
2.FLASH分区划分d3d3046e-3140-461d-8cc9-9ab07d7a1786-image.png
FLASH的分区主要分为两种:一种是将程序和fee各自存放在一个BANK上,另一种是将程序和fee存放在同一个BANK上。由于在同一个bank下flash在写一个区域的同时不能读取另外一个区域的特性,所以如果将程序与fee存放在同一个bank下,当对fee进行操作时就不能运行其他的进程,所以默认情况下是将程序与fee存放在不同的bank,这样就引出了fee的“数据同步”和“异步操步”。
在不同的物理 BLOCK 上的 FLASH 程序和数据可支持异步操作不产生阻塞;在相同的物理 BLOCK 上的 FLASH 程序和数据只支持同步操作会产生阻塞。所以我们一般将fee地址设置在另一个block上,勾选"Async Access"代表使能异步操作
555bf04b-7914-4356-ab76-8554074ab65b-image.png
在执行AB swap操作前PFLASH0的地址是0x00000 ~ 0x3FFFF,PFLASH1的地址是0x40000 ~ 0x7FFFF。在执行AB swap操作后,PFLASH0和PFLASH1的地址会进行交换,此时PFLASH0的地址是0x40000 ~ 0x7FFFF,PFLASH1的地址是0x00000 ~ 0x40000。但与此同时原先定义在另一个bank里的fee区域,由于执行了boot_swap命令,定义的fee地址发生了改变,这是就引出了fee的“数据同步”
fbf61dc9-5884-4fbc-a77b-99f8a756f1fa-image.png
在实际的应用中,我们存储在fee区域的数据是要经常调用使用的,如果不进行数据同步,在执行完swap命令后,我们再去调用fee数据就会导致读出的数据为空,所以数据同步是在执行boot swap命令前要将fee数据搬运到新的fee地址上去。
d5552a13-f9ee-441c-a411-c1eb90ac378a-image.png
通过内部闪存命令(0x30)执行swap操作。该命令由FLASH_DRV_BootSwap函数来调用。
56f41337-90fa-49be-ae8f-aae8d1daccbc-image.png
boot_swap是在pFlash0 和 pFlash1 之间进行翻转,通过查看EFM->STS的寄存器判断现在运行在哪个pFlash上
f2331418-b1ae-4251-a9ec-6a5bb295679d-image.png
Config Tool Version:2.7.6
MD14 SDK version:1.3.1
读取swap标志位,从而判断代码运行在哪个PFLASH里
42c0a859-d355-4013-a917-1beb71532349-image.png
读取REGFILE->DR[0]的值,写入到fee并反读(REGFILE 位于始终处于供电状态的电源域中,可在掉电模式下保留某些关键信息的值。)
e6250638-b10a-4a63-a804-211aa8a62edd-image.png
验证写入和读取是否相同,如果不同则进入死循环
383102f6-45bf-48a2-9e1b-f3e796465b99-image.png
在进行swap操作前将fee数据搬移到新的fee地址里去
cf7f5a80-b4f4-4041-9428-d087e8e8dfab-image.png
2b97bb14-8d22-4380-980c-35b308f136df-image.png
5.2 擦除芯片,烧录程序(快捷键盘F4,F6),完成PFLASH0面烧录8983da7f-109c-4a9e-bec8-7d4f678dd226-image.png
47b8b895-437d-4891-9151-c49714c4f03c-image.png
36f6dccf-ad62-435d-b2d2-29d499d52fad-image.png
5.3.2 设置地址偏移74506f56-98ef-4176-902d-1f90b0649e69-image.png
792dc419-3535-4f90-a7f4-5c01f9a41b58-image.png
f02d0e99-8cb9-496d-a0e6-16fb6052b1b0-image.png
5.3.4 重新上电运行程序 PFLAH0里的程序会使绿灯亮红灯灭,PFLASH1里的程序会使绿灯灭红灯亮 程序会在红灯和绿灯之间来回切换(绿灯代表运行在PFLASH0里,红灯代表运行在PFLASH1里) 红灯和绿灯切换的频率800ms切换一次 串口会在打印程序运行在哪个位置508539c7-eec9-4a0a-9be4-59bfb1335afd.jpg fc41ac20-56c1-466b-8d65-7b36561ceadc.jpg
串口打印的数据
fbf6d032-520c-4d60-9e81-7d99d772bff1-image.png 4.4 压测10000次数据
fee_data.txt
5. 代码AB_SWAP_FEE.zip
1. S19文件解析:
S19文件格式与mot文件只是命名方式不同,看数据格式的话,其实是同一种文件,这里以S19文件为例。
S19文件每一行数据全部由记录类型和十六进制数字组成,包含类型、长度、地址、数据和校验和五个部分。
3b7067f2-0438-4c9e-946d-f262906bd7b8-image.png
上面图片中“S3”为类型,“15”为长度,意味着整行记录(除类型和长度)总共有21字节,“00008020”为该记录起始地址,“54455001000000000000000000000000”为数据,共16个字节,“70”是校验和,这一行就是将数据一次刷写到起始地址为“20100060”的连续地址中去,上一行的数据结构也是如此对应的。
1.1 记录类型
S19中记录类型包括S0、S1、S2、S3、S5、S7、S8、S9等
40f6a70c-133d-4e6b-92c1-3d3c63f58fa2-image.png [图片]
S0,位于文件的第一行,和其他行不同,地址部分没有使用,用“0000”置位,整行表示记录的开始,FC为校验和;
S1表示地址长度为两字节(4字符)的记录,包含类型、长度、地址、数据和校验和五个部分;
S2表示地址长度为三字节(6字符)的记录,包含类型、长度、地址、数据和校验和五个部分;
S3表示地址长度为四字节(8字符)的记录,包含类型、长度、地址、数据和校验和五个部分;
S5表示文件中含有S1、S2、S3记录的个数,其后不接数据,包含S5的记录并不是每个文件必须的;
S7表示地址长度为四字节(8字符)的记录,包含类型、长度、地址和校验和四个部分,此行表示程序的结束;
S8表示地址长度为三字节(6字符)的记录,包含类型、长度、地址和校验和四个部分,此行表示程序的结束;
S9表示地址长度为两字节(4字符)的记录,包含类型、长度、地址和校验和四个部分,此行表示程序的结束;
只有S1、S2、S3、S5需要写入Flash中。
1.2 长度计算
长度包含一个字节,长度 = 地址字节数 + 数据字节数 + 校验和字节数。
1.3 地址
表示该行的起始地址,字节数由类型决定,S1位两个字节,S2为三个字节,S3位四个字节。
1.4 数据
包含的要刷写入控制器的数据如:“54455001000000000000000000000000”
1.5 校验和及计算
校验和内容为一个字节,计算公式:校验和 = 0XFF - 长度字节 - 地址字节 - 数据字节
如上图计算为校验和 = 0xFF - (0x15 + 0x20 + 0x10 + 0x00 + 0x60 + 0x54 + 0x45 + 0x50 + 0x01 ... + 0x00 + 0x00 + 0x70) = 0x70
其中(0x15 + 0x20 + 0x10 + 0x00 + 0x60 + 0x54 + 0x45 + 0x50 + 0x01 ... + 0x00 + 0x00 + 0x70) = 0x18F 取8F。
2. HEX文件解析
Hex文件每一行数据全部由十六进制数字组成,包含 :、数据长度、起始地址、记录类型、数据、校验和六个部分。
d8bbdd03-057b-4ab8-95d2-f4d3423db6d8-image.png
上图中,每一行记录都以“:”开头,“10”为后面的数据长度,表示该记录有16字节的数据,“01D0”
为该行记录的起始地址中的低位,后面的“00”为该记录的类型,
“780A9528444444444444444444444444”,为该记录所包含的全部16字节数据,“B0”为校验和。
2.1 记录类型
Hex文件记录类型包括00、01、02、03、04、05等,每一种都包含不同的含义:
00:数据记录;
01:文件结束记录;
02:扩展段地址记录;
03:开始段地址记录;
04:扩展线性地址记录;
05:开始线性地址记录;
2.2 起始地址
起始地址一般由高位和低位组成,即04记录中的地址加上00记录中的地址:如以上所说的“20100000”,“20100010”。
2.3 数据长度
包含一个字节,即后面数据的字节数的十六进制表示:如上“0x10”表示长度为16个字节。
2.4 校验和计算
包含一个字节,校验和=0xFF&(0x100-(长度字节+地址字节+类型字节+数据字节))
长度字节 + 地址字节 + 类型字节 + 数据字节 = 0x10 + 0x00 + 0x60 + 0x00 + 0x54 + ... + 0x00 + 0x00 = 0x15A
校验和 = 0xFF&(0x100 - 0x15A) = 0xA6
1,采样点测试原理:
中心思想是:对于指定位,将其缩短或增长,如果缩短或增长至 DUT 的采样点位置,则 DUT 将会发送错误帧。这个指定位的位置可以是一帧报文中的任何位置。但最好的位置是“隐形位”-> “显性位”-> “隐形位” 序列中的“显性位”,称此为最佳干扰位。这是由于重同步仅会发生在由隐形位变为显性位的跳变沿上, 一般来说在此处跳变沿将会位于同步段(Sync Segment)。
dca5f322-259a-4b17-a3fe-718f40ef4d8b-image.png
假设 DUT 会以 10ms 为周期向总线发送 ID 为 0x100 的 CAN 报文。VH6501 将在程序启动后,在 DUT 发送 报文的总线空闲间隙发送 ID 为 0x0 的干扰报文。VH6501 发送的所有报文,其【ACK Slot】位都为显性位“0”,为系统默认,无需额外特殊设置。每次干扰循环发送结束,微调干扰报文的【CRC Delimiter】位 长度,使其逐次缩短,并将后一位【ACK Slot】的长度增加。导致的结果为,后一位【ACK Slot = 0】前移。而一旦显性位电平由后往前,前移至 DUT 采样点位置,被 DUT 采到判定为高电平,则出现 Form Error, DUT 随即发送错误帧,并被 CANoe 捕获到(RxErr)。故 CANoe 测试逻辑通道(VH6501 所在通道)采样点须选取靠前位置(e.g. 50%),从而避免被 VH6501 本身先干扰到。另,每次干扰循环结束,VH6501 将 发送 30 次 ID 为 0x1 的正常报文,从而使 DUT 始终保持 Error Active 状态,因其主动错误帧容易辨认。
4298de21-9731-486f-91b8-50a852580213-image.png
1)∆𝑡𝑀𝑒𝑠𝐻𝑤指 VH6501 每次缩短或增长的步进长度。 VH6501 采用160M时钟频率,每个tick 6.25ns,单次可调整步长为1个tick。因此,∆𝑡𝑀𝑒𝑠𝐻𝑤=6.25ns。
2)∆𝑡𝑇𝑄指 DUT 的 CAN 参数配置中一个 TQ 的时间长度。 上文中提到的采样点最佳干扰位置是“隐性位-显性位-隐性位”序列中的“显性位”,ISO 11898-1协议里规定重同步会使跳变沿落在同步段里,但是协议并未明确定义跳变沿具体落在同步段的位置,从同步段的开始到结束均可以,因此这会带来1个TQ的误差。所以由DUT自身带来最大误差为1个TQ,而TQ数量与DUT采用的时钟,预分频值以及传输波特率等都相关。
当前CAN 时钟频率为20MHZ,预分频值为1,∆𝑡𝑇𝑄 = 𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑒𝑟 /𝐶𝐴𝑁 𝐶𝑙𝑜𝑐k=50ns;
仲裁域波特率500K,位时间长度为2000ns,TQ总数为40;
数据域波特率2M,位时间长度为500ns,TQ总数为10。
∆𝑡𝑅𝑒𝑐指总线上一个位的电平长度与 DUT 内部主控芯片 RxD 引脚上的一个位电平长度的时间差。
6b010407-af50-424e-b905-f5a70bb02899-image.png
在2M 波特率下,一个TQ 长度为50ns,位长度为500ns,∆𝑡𝑅𝑒𝑐 范围为-65ns 到+40ns, ∆𝑡𝑅𝑒𝑐需要被考虑进采样点测试的结果当中,为了方便计算∆𝑡𝑅𝑒𝑐取25ns。
在仲裁域中,∆𝑡𝑀𝑒𝑠𝐻𝑤 带来的误差为6.25/2000=0.3125%;∆𝑡𝑇𝑄带来的误差为 50/2000=2.5%; ∆𝑡𝑅𝑒𝑐 带来的误差为25/2000=1.25%;
在数据域中,∆𝑡𝑀𝑒𝑠𝐻𝑤 带来的误差为6.25/500=1.25%;∆𝑡𝑇𝑄带来的误差为 50/500=10%; ∆𝑡𝑅𝑒𝑐 带来的误差为25/500=5%;
综上所述,在仲裁域中,总的误差为0.3125%+2.5%+1.25%=4.0625%,约等于4%,数据域中,总的误差为1.25%+10%+5%=16.25%。
因此,若理论采样点为80%,而实际测试的结果,仲裁域在80%±4%,数据域在80%±16.25%范围内都是合理的。
由上可知,由 VH6501 所带来的误差所占比例是很小的。而大部分是由于 CAN 协议本身所带来的误差,以及由于总线长度不同所带来的误差(尤其在CANFD 数据域测试中)。
这些误差可以认为是合理且无法避免的,在实际测试验证中需要进行一定的考量。
问题表现:
重复进入中断处理函数LINFlexD_UART_DRV_RxIRQHandler;
状态位异常:uartState->isRxBusy=0(接收未完成却置0)、uartState->receiveStatus=Overrun(接收溢出);
66706010-2046-4fd6-9b97-9f19f419217d-1d9e50227d7aa4c18b131df73764275f.png
60a7c100-aac3-4f59-b2a8-c473839ffbcf-image.png
adffb33e-9954-41a1-a482-c19b411df680-image.png
621ddc5d-7d48-4572-a4a9-5dad18a267a4-7b438e9f315073cb51cc014b2a428b30.png
0b2c05a7-8e28-4d02-98d3-19ea192dca3c-6c8276a44691de2072ec81d1ad1162c9.png
客户目前尝试把清标志位的动作加上(即使uartState->isRxBusy 被置0也会去清中断标志位)来避免中断溢出
bfedcfa5-7396-4059-9d89-e068955b9848-cce6212fd417f6d8c7c09b46cd320a5c.png
本方案基于YT Config Tool开发,使用Vscode+Cmake+Ozone工具链开发编译调试;基于Demo板硬件搭建实施;使用同星科技TC1012P CAN/LIN工具及同星科技TSmaster软件。
dbc523c3-21f4-4d1a-98b3-3b50282fac1a-image.png
新建YTM32B1MD14的JFLASH工程
c609c5a4-00b8-434b-a244-ae5bde77e46e-image.png
找到Bootloader编译的烧程文件
a0b6c9f7-8e07-40e7-aaa4-3076355c8caa-image.png
加载Bootloader文件
3900e9bd-c72e-4bc9-acc3-e2287c796557-image.png
擦除芯片(或者快捷键F4)
156d3954-7e53-4a13-8e5f-026e4a1bff49-image.png
fae94334-266c-4740-969c-f69d2650440e-image.png
烧录程序(或者快捷键F6)
ac129ec4-4b1b-42cc-80ba-44d166e59e25-image.png
6d1d1b5c-28af-444d-84a1-01280c9a14e3-image.png 上下电运行Bootloader
拔掉JLINK烧录器,重新上下电后,板子重新工作,LED按照100ms快速闪烁,程序工作在Bootloader里面。 升级上位机配置
将FlashDriver文件、Application文件、SeedAndKey.dll几个文件放到升级上位机目录下。
3f15b88d-af6f-43f6-b285-877a7d0ca419-image.png
打开升级上位机工程(如上图中.TSProj_x86文件)配置收发ID
ade66a27-609f-4150-8fde-a1f6f0833ec9-image.png
配置TP时间参数,配置加密dll
b8723e3c-c726-4876-b46a-e8e4488d0ec1-image.png
配置FlashDriver和Application和校验方式
95adfb20-50a3-4532-bd58-7b9a69330010-image.png
配置自动诊断流程
6d7f2e9f-73b1-4354-a03a-37f565903759-image.png
4. 执行升级
4.1 从Bootloader升级
b35da6fc-c501-4ebb-9e57-6167a92185d6-image.png
升级完成后,LED灯1000ms闪烁,运行在Application程序中。
4.2 从Application升级
从Bootloader升级成功运行到Application后,再次点击运行,从Application升级。
14c4d1e0-df93-4efb-80f3-fda4130399e3-image.png
升级完成后,LED灯1000ms闪烁,运行在Application程序中。
4.3 StayInBoot升级
从Application升级中,是有升级请求标识的(KeepInBootVar变量)。
本方案设计上认为:
运行到Bootloader以后,如果通讯一半断开未发生升级服务(擦除芯片/请求下载/数据传输/下载退出等UDS服务),则即使有升级请求,可以超时退出重新跳转到Application运行;反之则必须StayInBoot等待重新升级。
4.3.1 未发生升级流程请求
升级一半,拔掉CAN线模拟通讯断开,升级失败
b38f0141-062e-4be3-96d8-74d35fb5f42b-image.png
通讯断开超时后,Bootloader重新进入Application运行,Demo板上LED灯1000ms闪烁。
4.3.2 已发生升级流程请求
执行到升级流程后,拔掉CAN线模拟通讯断开,升级失败
d66fcdc3-fedc-4180-98b0-07e4e5dc9259-image.png
通讯断开超时后,Boootloader不能进入Application,执行StayInBoot(重新复位或者上下电等均保持StayInBoot)。
重新执行升级
e3fce7cf-3ad9-49f9-b415-9d64b295a22b-image.png
升级成功,Demo板上LED灯1000ms闪烁。
5. 附件代码
uds_can_fbl_md14_release_20250530_2.zip
-
Announcements
Announcements regarding our community
-
Discussion & Question
A place to talk about whatever you want or ask a question
-
Blogs
Blog posts from individual members
快速上手云途开发生态
发帖前请查看
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...