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本方案基于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
前言
本文档以YTM32B1Mx为例介绍FLEXCAN收发报文数超过物理邮箱个数时邮箱分配方案、LegacyFIFO用法,同时也适用于YTM32B1Lx系列。
1. YTM32B1Mx FLEXCAN邮箱资源介绍
MC03的FLEXCAN资源:
b2492947-eb3f-4cbc-ac09-81efc9621fed-image.png
MD14的FLEXCAN资源:
50bd0110-d75a-456f-97d4-adf5d8f95717-image.png
ME05的FLEXCAN资源:
79278b7f-a6d4-4f82-8b2d-4bb16639cac9-image.png
以ME05为例,邮箱负载为8字节负载时,CAN0、CAN1、CAN2的邮箱数为64个,CAN3、CAN4、CAN5的邮箱数为32个。
硬件设计时注意优先选用CAN邮箱资源多的CAN通道。
以CAN0为例,
收发报文数量小于等于邮箱数(64)时,为每一条收发报文分配一个邮箱即可; 收发报文数量超过邮箱数时,可通过配置接收FIFO、配置邮箱接收范围ID的方式来实现。下文将通过一个ME05应用实例,介绍使用经典CAN时合理分配邮箱来解决收发报文超过邮箱数问题的方案。
2. 应用实例说明
2.1 需求描述
用户使用CAN0,经典CAN,需要发送的报文ID有40条,需要接收的报文ID包括118条离散ID、1条范围ID(0x600 ~ 0x67F)。如下图:
c837846e-9a1a-47c0-b5e1-0c91dd762a71-image.png
2.2 方案概述
由需求知收发报文总条数远大于CAN0邮箱总数,故接收报文需要用到LegacyFIFO,基本步骤如下:
(1)根据需要接收的报文数,计算LegacyFIFO占用的邮箱数,并配置LegacyFIFO用于接收118条离散ID;
(2)剩下的邮箱中,选择一个邮箱用于接收范围ID(0x600 ~ 0x67F);
(3)剩下的所有邮箱均用做发送邮箱,需要发送报文时滚动轮询发送邮箱的状态,使用空闲邮箱进行发送。
例如,一种邮箱分配参考方案如下:
fc491a8b-64e8-4ed3-8283-0b0542a43ec9-image.png
2.3 功能实现
2.3.1 接收FIFO配置
需接收的离散报文ID共118条,因此LegacyFIFO实际需要占用的邮箱数与配置120条滤波码时占用的邮箱数一致,即占用0~35共36个邮箱,配置LegacyFIFO后剩余28个邮箱(邮箱号为36~63)可用。
76be7871-7939-4a94-b98c-d484666b99e7-image.png
LegacyFIFO配置方式:
(1)配置接收LeacyFIFO,手动添加118个接收离散报文ID到过滤表中。配置完成后启动LeacyFIFO接收。
10092b59-b024-41c0-84fc-820aaccb7259-image.png
(2)通过LeacyFIFO接收到报文时重新调用FLEXCAN_DRV_RxFifo(CAN_INST, &rxFifoMsg)函数启动下一次接收。
ea0e466f-b402-4a8e-96bd-3b4292b339c0-image.png
2.3.2 接收邮箱配置
LegacyFIFO占用了MailBox0~35共36个邮箱,这里配置邮箱36用于接收ID范围为0x600~0x67F的报文。
配置方式:
(1)配置MailBox36的接收ID和掩码值,用于接收0x600~0x67F的范围ID报文。
af97abde-76b8-4859-a0a7-243dcb1c723f-image.png
(2)MailBox36接收到报文时重新调用 FLEXCAN_DRV_Receive(CAN_INST, 36, &rxMsgBuffer);函数启动下一次接收。
416138fe-0d56-4a0f-9ace-9b549548d168-image.png
2.3.3 发送邮箱配置
剩下的MailBox37~63共27个邮箱可用做发送邮箱,需要发送报文时,滚动轮询这27个邮箱的状态,使用空闲邮箱发送即可。
配置方式:
(1)配置27个发送邮箱
954a0ac0-155b-4158-a886-0101f4e8330c-image.png
(2)滚动查询27个发送邮箱的状态,使用空闲邮箱发送报文
52245282-7e59-4a0d-af75-7e45c6be3fd5-image.png
3. 总结
(1)本文档仅提供一个参考方案,收发邮箱的分配应当根据实际的收发报文条数、通讯周期等需求来分配。
(2)本文档中对于所有的离散ID,均使用LeacyFIFO进行接收,实际应用时可以少分配一些发送邮箱,预留出更多的邮箱用于报文接收,例如对一部分周期较长或优先级较低的报文可以使用LeacyFIFO接收,对周期较短或优先级较高的报文,单独配置接收邮箱实现等。
参考文档及demo工程
(1)参考文档
AN_0008_YTM32_FlexCAN_SDK_User_Guide_zh_review.pdf
AN_0019_YTM32_FlexCAN_Introduction_zh_review.pdf
(2)示例demo
Flexcan_MB_example.zip
本方案基于YT Config Tool开发,使用Vscode+Cmake+Ozone工具链开发编译调试;基于Demo板硬件搭建实施;使用同星科技TC1012P CAN/LIN工具及同星科技TSmaster软件。
ef6fee85-1fcc-4a93-9ee1-2ce15af1891b-image.png
新建YTM32B1ME05的JFLASH工程
bb461804-ef97-4a53-a355-3e5207e163c5-image.png
找到Bootloader编译的烧程文件
文件路径:
.\uds_can_fbl_me05_release_20250730\uds_can_bootloader\build\uds_can_bootloader.s19
5ffee699-aa4e-4d4c-85b3-2431c6ae7474-image.png
加载Bootloader文件
b2df279f-fbb5-4b9d-9e43-c49206d1cb35-image.png
擦除芯片(或者快捷键F4)
7265c86f-9fca-4b38-b8fd-a500c19a3336-image.png
fcdbab1a-dcd2-443e-b0f3-097d0cbf959c-image.png
烧录程序(或者快捷键F6)
e60dd1ce-e8c0-4500-a80c-09d67d0c3cb5-image.png
47deeac3-4018-410f-9ed7-f2524cdff762-image.png 上下电运行Bootloader
拔掉JLINK烧录器,重新上下电后,板子重新工作,LED按照100ms快速闪烁,程序工作在Bootloader里面。 升级上位机配置
将FlashDriver文件、Application文件、SeedAndKey.dll几个文件放到升级上位机目录下。
文件路径:.\uds_can_fbl_me05_release_20250730\UDS_CanFbl_TsMaster
55a30316-22cb-4f15-a0a9-f892288898d6-image.png
打开升级上位机工程(如上图中.TSProj_x86文件)配置收发ID
9a909b8d-a2d8-40c5-a3d6-658967a9dfaf-image.png
配置TP时间参数,配置加密dll
f2076298-285e-4a78-b54c-3bae6e13338c-image.png
配置FlashDriver和Application和校验方式
8d884654-ced9-4988-9074-f41de501f671-image.png
若是修改 flashdriver/app 文件命名,需要修改对应校验的请求值
e8f40f9d-87a2-4ff0-af11-f0873b208c27-image.png
配置自动诊断流程
2f5c0311-349c-4cf7-981d-cbc503403d8a-image.png 执行升级
4.1 从Bootloader升级
1b781e1b-68b3-4387-89ab-605010aabcc6-image.png
升级完成后,LED灯1000ms闪烁,运行在Application程序中(Bootloader程序中LED灯100m闪烁)。
4.2 从Application升级
从Bootloader升级成功运行到Application后,再次点击运行,从Application升级。
de87b80e-cd0a-4111-853a-8ebdff2b6776-image.png
升级过程中,运行在Bootloader程序中,LED灯100ms闪烁,升级完成后,LED灯1000ms闪烁,运行在Application程序中。
4.3 StayInBoot升级
从Application升级中,是有升级请求标识的(KeepInBootVar变量)。
本方案设计上认为:
运行到Bootloader以后,如果通讯一半断开未发生升级服务(擦除芯片/请求下载/数据传输/下载退出等UDS服务),则即使有升级请求,可以超时退出重新跳转到Application运行;反之则必须StayInBoot等待重新升级。
4.3.1 未发生升级流程请求
升级一半,拔掉CAN线模拟通讯断开,升级失败
0319dbad-2707-46f8-acdd-431fd4c42852-image.png
通讯断开超时后,Bootloader重新进入Application运行,Demo板上LED灯1000ms闪烁。
4.3.2 已发生升级流程请求
执行到升级流程后,拔掉CAN线模拟通讯断开,升级失败
aaf00cee-307b-41b2-bdc3-33b8b39b374b-image.png
通讯断开超时后,Boootloader不能进入Application,执行StayInBoot(重新复位或者上下电等均保持StayInBoot)。
重新执行升级
80306f67-cb08-4064-898d-e1dd627e6118-image.png
升级成功,Demo板上LED灯1000ms闪烁。
5. 附件代码
uds_can_fbl_me05_release_20250730.zip
为啥我通过上位机发送一条LIN报文,只触发了2次LIN_UART_DRV_IRQHandler中断,第一次触发了BREAK检测中断:if (UART_GetStatusFlag(base, UART_LIN_BREAK_DETECT)),第二次触发了边沿检测中断:if (UART_GetStatusFlag(base, UART_RX_ACTIVE_EDGE_DETECT) && activeEdgeIntState)。
按理说,第二次应该0x55同步码接收完成再触发中断吧?是我哪里没配置好吗
83edce98-9310-4011-ab52-b49720d2f9d6-AE29650C-C627-4b4a-B4F8-2FE7812A3358.png
本方案基于YT Config Tool开发,使用Vscode+Cmake+Ozone工具链开发编译调试;基于Demo板硬件搭建实施;使用同星科技TC1012P CAN/LIN工具及同星科技TSmaster软件。
5e1b4583-94f0-4786-8b03-c70851e6bb51-image.png
新建YTM32B1MC03的JFLASH工程
e31f21d8-f1b4-4be0-960d-b1bdd08bc63d-image.png
找到Bootloader编译的烧程文件
9ceb1572-c212-4c57-a815-0b8d7e84806c-image.png
加载Bootloader文件
807cf228-2a95-43a9-b84f-4cf29b0332a3-image.png
擦除芯片(或者快捷键F4)
ace171c2-6b70-4201-99c3-50d9863d1af6-image.png
4ddc4c41-a35e-49fd-9404-c0a4cf401dd3-image.png
烧录程序(或者快捷键F6)
98170abf-7180-46a8-b7da-86a82369cd88-image.png
d226326b-944a-499f-ad36-a6af638db7fb-image.png 上下电运行Bootloader
拔掉JLINK烧录器,重新上下电后,板子重新工作,LED按照100ms快速闪烁,程序工作在Bootloader里面。 升级上位机配置
将FlashDriver文件、Application文件、SeedAndKey.dll几个文件放到升级上位机目录下。
435a580c-314d-4f54-8a4b-6d2e9007348d-image.png
打开升级上位机工程(如上图中.TSProj_x86文件)配置收发ID
45aa0f66-c39f-4794-8fc9-eb3a8489d382-image.png
配置TP时间参数,配置加密dll
6438a816-417d-45ad-b0f1-200d3b1e75ce-image.png
配置FlashDriver和Application和校验方式
8a33cf16-38f8-4cb4-b500-e24496e683db-image.png
配置自动诊断流程
b726c12e-406e-485c-9441-b671b51efb75-image.png
4. 执行升级
4.1 从Bootloader升级
dc21dc68-a986-49b0-a596-453a1e948641-image.png
升级完成后,LED灯1000ms闪烁,运行在Application程序中。
4.2 从Application升级
从Bootloader升级成功运行到Application后,再次点击运行,从Application升级。
1ba1902e-953b-4e91-978d-989d81d4320e-image.png
升级完成后,LED灯1000ms闪烁,运行在Application程序中。
4.3 StayInBoot升级
从Application升级中,是有升级请求标识的(KeepInBootVar变量)。
本方案设计上认为:
运行到Bootloader以后,如果通讯一半断开未发生升级服务(擦除芯片/请求下载/数据传输/下载退出等UDS服务),则即使有升级请求,可以超时退出重新跳转到Application运行;反之则必须StayInBoot等待重新升级。
4.3.1 未发生升级流程请求
升级一半,拔掉CAN线模拟通讯断开,升级失败
0b519b6a-91d3-44a0-b6bf-794829a3652b-image.png
通讯断开超时后,Bootloader重新进入Application运行,Demo板上LED灯1000ms闪烁。
4.3.2 已发生升级流程请求
执行到升级流程后,拔掉CAN线模拟通讯断开,升级失败
d9d0ca85-0330-4f42-b93e-c7196f69ca0b-image.png
通讯断开超时后,Boootloader不能进入Application,执行StayInBoot(重新复位或者上下电等均保持StayInBoot)。
重新执行升级
93dce8d5-9f9f-4619-b11d-62bbfea398c7-image.png
升级成功,Demo板上LED灯1000ms闪烁。
5. 附件代码
uds_can_fbl_mc03_release_20250529_2.zip
硬件环境:HA01评估板+leaf light v2(substitute for kvarser)
软件环境:SDK1.3.1
需求描述:基于SDK 的UDS CAN升级固件
问题描述:
构建demo之后按照readme文档操作,下载can demo到MCU之后,用PC工具开始基于UDS协议下载连接leaf light v2,发现超时。
按照飞书文档描述检查了设置,脚本也是demo自带的,不知道忽略了哪些设置?或者usb转can设备有问题?转接器和问题截屏如下,请参考。
bc529753-d2ef-4e46-9ab4-c5128cbcd3b3-6c063e4ee2c34dbe28025c7f6051bb35.jpg 57217763-ec3a-402f-98b0-bc0666ebef82-47cced2cb88e63b5e337ae0f2d8bd1ec.jpg
(持续更新中,点击文章标题即可跳转阅读)
《云途半导体 - 车规MCU国产替代领航者》
《云途YTM32系列通用车规MCU芯片产品内核与外设功能特性概述》
《云途车规MCU应用生态深度解析》
《YTM32车规MCU应用指南 - 系统时钟、复位和电源与功耗模式管理模块功能特性与使用要点详解》
《YTM32车规MCU应用指南 - 外设功能引脚复用(PCTRL)与通用输入输出(GPIO)模块功能特性与使用要点详解》
《YTM32车规MCU应用指南 - 定时器模块功能特性与使用要点详解》
《YTM32车规MCU应用指南 - 模拟外设模块功能特性与使用要点详解》
《YTM32车规MCU应用指南 - 串行通信外设模块功能特性与使用要点详解》
《YTM32车规MCU应用指南 - FlexCAN模块功能特性与使用要点详解》
《YTM32车规MCU应用指南 - 网络信息安全模块(HCU|SecureBoot| TRNG)功能特性与使用要点详解》
《YTM32车规MCU应用指南 - 存储器架构和功能特性与使用要点详解》
《YTM32车规MCU应用指南 - 基于eTMR定时器的车载电机控制应用要点详解》
《YTM32车规MCU应用指南 - 功能安全模块功能特性与应用要点详解》
《YTM32车规MCU应用指南 - “功能安全管家”FMU模块编程与使用指南》
46db1d56-6e0e-4006-8f9c-6d565715326b-image.png
在使用UART和一些Driver芯片通讯时,有时候需要将UART的TX引脚配置为GPIO功能,持续一段低电平之后,再配置为UART功能,那么在使用MCAL的时候,如何去实现这个操作?我这样操作好像没办法实现切换GPIO控制。
void BusReset(){ uint8 CmdTable_SyncByte[1] = {0x55U}; Port_SetPinMode(PORT_HW_PORT_PIN(2, 7), PORT_PIN_MODE_GPIO); Dio_WriteChannel(DioConf_DioChannel_PTC7_UART1_TX, STD_LOW); // delay_us(150); for(uint32 i=0;i<120000;i++) { __NOP(); } Dio_WriteChannel(DioConf_DioChannel_PTC7_UART1_TX, STD_HIGH); // USART1_Config(ispeed); Port_SetPinMode(PORT_HW_PORT_PIN(2, 7), PORT_PIN_MODE_ALT2); CddUart_SyncSend(0, CmdTable_SyncByte, 1, 1000); }-
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哦...