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 support在使用 LE0 SDK 1_4_0 HOTFIX_001 的 FLASH_DRV_Program 接口时发现一个问题。请问除了使用断言,是否有其他方式预防客户,调用时出现HardFault?因为客户基本没开断言
问题现象:
列表当传入的 pData 地址非 4 字节对齐时,程序会触发 HardFault (Unaligned Access)。原因分析:
列表该接口原型定义为 const void * pData,但在内部实现中,直接将其强转为 uint32_t * 使用(源码中带有 /* PRQA S 0316 */ 注释)。由于 void * 允许任意地址,当应用层传入非对齐地址时,这种强转会导致在访问时,HardFault。 status_t FLASH_DRV_Program(..., const void * pData) { // 强转发生处,PRQA 警告被屏蔽 state->cmdParam.pdata = (const uint32_t *) pData; /* PRQA S 0316 */ // ... } static status_t FLASH_LaunchCommandSequence(uint32_t instance) { // ... // 在此处触发 Unaligned Access HardFault for (uint32_t i = 0; i < state->cmdParam.word_size; i++) { state->cmdParam.dest[i] = state->cmdParam.pdata[i]; } // ... }
本方案基于YT Config Tool开发,使用Vscode+Cmake+Ozone工具链开发编译调试;基于Demo板硬件搭建实施;使用同星科技TC1012P CAN/LIN工具及同星科技TSmaster软件。
ec4279d5-5d57-47ae-9be6-bab156b6ab19-image.png
由于LE04没有PTE6引脚,所以需要将CAN的使能脚短接到GND上
新建YTM32B1LE04的FLASH工程
8e247ddc-c8ce-4242-a560-ae1a1e35a7ec-image.png
找到Bootloader编译的烧程文件
28658dba-4133-418c-b374-97bae8eb0679-image.png
加载Bootloader文件
f10384f4-b329-4abd-a7e6-e4b41547e4f4-image.png
擦除芯片(或者快捷键F4)
66286636-2eef-4193-b610-1a260d065e22-image.png
63d914c6-b96c-40e9-b8cc-4c8d453175df-image.png
烧录程序(或者快捷键F6)
776cb472-05c7-423e-b1bc-bf49cd971626-image.png
e8064c9a-cfb0-436e-8ff9-ad36e9ce25e0-image.png
拔掉JLINK烧录器,重新上下电后,板子重新工作,LED按照100ms快速闪烁,程序工作在Bootloader里面。
3. 升级上位机配置将FlashDriver文件、Application文件、SeedAndKey.dll几个文件放到升级上位机目录下。
a87e2282-a011-4e91-8ed6-20e489c4b7a2-image.png
打开升级上位机工程(如上图中.TSProj_x86文件)配置收发ID
d677027f-b088-4da5-a18c-32faa9956d6d-image.png
配置TP时间参数,配置加密dll
4ae8991f-a8cb-4031-934b-d202932f462b-image.png
配置FlashDriver和Application和校验方式
eff13a22-d262-4bb0-b802-66b56bf40511-image.png
配置自动诊断流程
5aed28bc-fc62-4aad-9cec-27fde4977215-image.png
b38f4636-2600-46c9-8425-eb81dd6f113f-image.png
升级完成后,LED灯1000ms闪烁,运行在Application程序中。
从Bootloader升级成功运行到Application后,再次点击运行,从Application升级。
6fd55810-07a8-4d9a-b6ab-6defa44b3a45-image.png
升级完成后,LED灯1000ms闪烁,运行在Application程序中。
从Application升级中,是有升级请求标识的(KeepInBootVar变量)。
本方案设计上认为:
运行到Bootloader以后,如果通讯一半断开未发生升级服务(擦除芯片/请求下载/数据传输/下载退出等UDS服务),则即使有升级请求,可以超时退出重新跳转到Application运行;反之则必须StayInBoot等待重新升级。
升级一半,拔掉CAN线模拟通讯断开,升级失败
f39d35bf-938e-4322-8f88-cab1bcb5d7a5-image.png
通讯断开超时后,Bootloader重新进入Application运行,Demo板上LED灯1000ms闪烁。
4.3.2 已发生升级流程请求
执行到升级流程后,拔掉CAN线模拟通讯断开,升级失败
6ce78ee8-61f5-42e8-9934-a234b0cf04c8-image.png
通讯断开超时后,Boootloader不能进入Application,执行StayInBoot(重新复位或者上下电等均保持StayInBoot)。
重新执行升级
ff33eb5d-009b-4d44-a8d0-1e64bfc75b71-image.png
升级成功,Demo板上LED灯1000ms闪烁。
5. 附件代码
uds_can_fbl_le04_release_20250529.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哦...