目录
1.Bootstrap Loaders作用
2.CAN BSL详解
2.1 CAN BSL的时钟系统
2.2 CAN BSL流程
3.小结
英飞凌TC3xx的Platform Firmware章节里,提供了多种启动模式:
- Internal start from Flash:b111
- Alternate Boot Mode:b110
- Generic Bootstrap Loader Mode:b110
- ASC Bootstrap Loader Mode:b011
之前我们已经聊过了ABM和Internal start from Flash,今天就来看看这个Bootstrap Loader具体可以做什么。
1.Bootstrap Loaders作用
根据文档描述,Bootstrap Loader主要用于在SSW阶段,使用者利用特定接口(CAN、LIN)加载一小段用户程序到CPU0的PSPR,该段用户程序会在SSW完成后运行。
因此这个功能的实现就需要上位机(PC)和下位机(Tricore)相互通讯配合。
基本逻辑如下图所示:
Bootstrap Loader的时序图在手册中SSW章节定义得非常清楚,我们必须依据这个流程在PC端(上位机)完成实现;
User Flash Routine则就是用户自定义的流程,例如传统基于UDS刷写的流程。
一般来说,这段用户程序主要是用于Flash的编程,例如ECU的下线刷写,如下图:
2.CAN BSL详解
TC3xx提供了如下ASC和CAN两种模式,具体pin脚定义如下:
ASC模式比较好懂,流程如下:
PC发送0x00给到Tricore,Tricore基于该数据自动探测到波特率,并配置相应的ASC接口;然后返回0xD5给到PC,PC就可以下载程序到CPU0_PSPR(地址0xC0000000)。然后离开SSW,从0xC0000000开始执行用户程序。
在TC3xx的设计里,CAN BSL相对复杂,主要在对时钟配置的理解上。
首先明确几个关键特性:
- TC3xx CAN BSL既支持标准CAN,也支持CAN FD;
- 固定初始化帧ID位0x555;
- 外部时钟源的情况下CAN波特率可配置
2.1 CAN BSL的时钟系统
CAN BSL的时钟是否可配置主要依赖UCB PRONCONDF.OSCCFG的编程,如下:
默认情况下该值为0,对应时钟频率为fback/5 = 20MHz,这种情况下,CAN BSL仅支持标准CAN、采样点为60%、波特率支持100\125\250\500 KBit/s;
当我们修改该UCB对应位为1时,此时允许SSW修改时钟配置。
CAN BSL怎么实现自适应波特率这个无从考证,所以暂时先用起来,接下来我们就继续聊聊整体下载流程。
2.2 CAN BSL流程
TC3xx CAN BSL定义了三类帧:
- 初始化帧 -- PC端发送给TC3xx;
- 确认帧 -- TC3xx返回给PC端的响应;
- 数据帧 -- PC端发送给TC3xx的实际数据帧
具体流程可分为三个阶段: 1)初始化阶段1;2)初始化阶段2;3)数据加载阶段。
阶段1:
该阶段主要是用于CAN波特率的自适应匹配,PC端按照如下固定格式发送数据给到CAN BSL,
其中, DMSGC表示即将要发送的数量,DMSGID表示即将发送数据帧的11bitID
如果CAN BSL能识别该报文,那么会根据上位机CAN 波特率进行自适应配置,ACK响应;使用ACKID返回确认帧给到PC,格式如下:
如果不能识别,则直接返回0xAAA给到PC;
阶段2:
如果需要支持CanFD,PC可以下发更精确的波特率配置给到Tricore,否则直接跳至数据加载阶段。
下发数据帧格式如下:
Tricore响应给PC端格式如下:
主要关注NBTP(Nominal bit timing and Prescaler),用于Classical CAN和CAN FD仲裁数据段;DBTP(Data bit timing and Prescaler),用于CANFD 数据段。
阶段3:
完成上述准备工作后,PC根据如下格式开始进行数据传输:
CAN BSL将接收到的数据copy至CPU0_PSPR(0xC0000000),退出后就开始执行。
3.小结
利用TC3xx自带CAN BSL机制,可以快速实现Bootloader功能,能够有效提升下线刷写的效率。流程固定且容易理解,但缺点也很明显,加载到CPU0_PSPSR这一段程序在CAN BSL没有任何CRC、验签等校验操作,所以这部分信息安全管理和使用场景需要严格定义,不然很可能作为攻击向量。