如何通过CAN总线对MCU进行在线升级

如何通过CAN总线对MCU进行在线升级,第1张

所谓MCU在线升级,我估计你的意思是ECU刷写吧。一般刷写会有两种:刷数据和刷程序

1、刷数据:这种比较简单,只要在控制程序中有一段刷写特定地址内存的程序,根据需要去调用,将CAN发过来的数据写到制定的位置即可;

2、刷程序:复杂点,需要有一段类似Bootloader的程序,ECU上电先进入Bootloader程序,接收CAN总线发过来的程序的HEX,刷写到程序所在的位置,然后跳转到主程序的起始地址,开始正常工作。这里进入Bootloader时候加上一点判断和安全机制,如果不需要刷写程序或者不具备刷写权限,则直接跳转到主程序即可。

刚好之前遇到过一个类似的问题,正好在这里和大家分享一下。INCA 版本7.1.5,硬件设备ES581.4。刷写程序之前,发动机可正常启动,使用ES581 可以和ECU正常通信。更改标定量之后,刷写程序时,初始化时直接error,之后581就和ECU连接不上了。更悲剧的是,发动机这时候也启动不了了。现在只有一个办法,那就不惜一切代价 也要把程序刷到ECU里。但,没想到的是,尝试了平时可以尝试的所有办法,依然得到同样的提示:setting error。最后,没办法,请来了一位大神。大神说可能是软件版本问题,也提到之前也遇到过类似问题,一直搁置没有得到解决。这时候突然想起,一次培训的时候,科室大牛提到一个类似案例:软件怎么样都刷不进去怎么办,可尝试更改一个配置。后来,打电话询问,按照指示更改后,竟然解决了这个问题!这时候把身边请来 的大神乐得点赞,感觉他自己之前的问题用这个办法或许也可以解决了。具体如下,选中左边的CAN1,右侧界面最下面有一栏 ISO15765 TX Notification,将estimated更改为 accurate。

在这里插入图片描述

这里只知道先这样更改,但是具体原因,也是并不清楚,等以后搞懂了原因,再来补贴。---------------------------------------------------------------------------------------------------------------------------------这个问题也让我想起了之前使用CDM 进行软件集成的时候遇到的一个问题。当我们希望将数据源的Curve 和 MAPcopy到目标文件的时候,采用默认的Takeover真的合适吗?其实不然,一般我们会选择exact 来代替takeover。 当我们的目标文件中的某个map文件是4X4的矩阵,而源文件中对应的矩阵是5X5的,这时候采用takeover 是没有问题的,copy的时候新数据会覆盖旧数据。但是,反过来,当我们的目标文件中的某个map文件是5X5的矩阵,而源文件中对应的矩阵是4X4的,这时候采用takeover 就很容易出错了,4X4的矩阵不能完全覆盖5X5的矩阵。而如果采用exact方式,因检测到维数不同则不会执行这样的覆盖 *** 作。

在这里插入图片描述


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11799233.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存