从Application中进入BootLoader中正确流程

背景:实际工程中,经常需要通过0x10 02从Application中进入BootLoader中进行刷写。但是实际项目中很多人对这个过程不了解或者理解有误差,这里提供一个思路供大家参考:

背景知识:

Dcm中有下面Rte接口,其对应两个callout函数

图片

1.Rte_Switch_Dcm_DcmEcuReset_DcmEcuReset

此callout 是个通知函数,用于告知Application 当前的ecu reset的mode

Mode 有以下值:

图片

2.Rte_SwitchAck_Dcm_DcmEcuReset_DcmEcuReset

Dcm 调用 Rte_SwitchAck以确保在执行EXECUTE 模式之前 请求的mode 已被对方接收,它会调用 Rte_SwitchAck。

Rte_SwitchAck 返回RTE_E_TRANSMIT_ACK  : 请求的mode 已被对方接收

Rte_SwitchAck 返回RTE_E_NO_DATA : 请求的mode 还没有被对方接收

代码分析:

Dcm_Service10Processor       10服务的主函数

 Dcm_Svc10Handler

 Dcm_Svc10CheckAccess

 Dcm_Svc10_TriggerReset         调用Rte_Switch接口将mode为JumpToBootloader告知application需要跳转到fbl,为reset做准备   

 Dcm_Svc10_WaitForResetAck      调用Rte_SwitchAck接口,直至返回结果为RTE_E_TRANSMIT_ACK,才进行到下一步

 Dcm_Svc10_WaitForRcrRpAck      决定是否给response

 Dcm_Svc10_SetProgConditions   调用Rte_Switch接口将mode为Execute告知application,让其执行reset(reset形式的下电流程)

具体配置:

1.把下面两个设置,设置成如下图所示:

  第一个宏表示在reset前,要发ResponsePending。 

/MICROSAR/Dcm/DcmConfigSet/DcmDsl/DcmDslProtocol/DcmDslProtocolRow/Dcm SendRespPendOnTransToBoot/ 

图片

第二个宏表示允许跳转到boot。

/ActiveEcuC/Dcm/DcmConfigSet/DcmDsp/DcmDspSession/Programming

图片

注意:打开后会多出service port

图片

2.把"DcmEcuReset" 关联到swc

图片

3.在关联的swc中,分别为JumpToBootloader和Execute 创建runnable

图片

其中trigger设置为当mode为JumpToBootloader和Execute时,调用此runnable(new-->On Mode entry--> 选择mode declaration为JumpToBootloader和Execute)

4.execute所对应的runnable里,Access points 选择SelectShutdownTarget 

图片

注: 如果有其他的一些操作,例如存nvm,也可以在这两个runnable中添加其他的Access point

5.在execute所对应的runnable函数中,添加执行函数,使下电时候执行reset和下电相关代码

图片

关于下电reset过程中注意事项:

1.打开shutdown hook

图片

 2.EcuM_AL_Reset中调用MCU的复位接口(例如:Mcu_PerformReset)

如果有更多的问题需要咨询,可以加入问题咨询群与我们进行讨论,qq群号:531159112

关注公众号“奥先生学Autosar”查看更多文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值