![8d07d4c0312c3223a1d6da6d51e81592.png](https://i-blog.csdnimg.cn/blog_migrate/b1ae727477f5856bc6fccb5f512278ca.jpeg)
上篇 menghuyouyou:一篇易懂的CAN 通讯功能实现指南2--READ 中介绍了CAN通讯的读功能,本文将继续采用上篇结构介绍CAN通讯的写功能,在AUTOSAR架构涉及的模块主要有Can Driver, Can Interface, Pdu Router, Com,如下图1所示。
![fb8c09f86cffac3ea35e590cf8e0e43c.png](https://i-blog.csdnimg.cn/blog_migrate/8e48bbc123a40d78e0cd078af039062c.jpeg)
以下先看两个场景来想象下CAN通讯写功能。
场景1:发动机控制需要变速箱的相关信号,比如转速请求,扭矩请求。那么这时变速箱控制器(TCU)的相关信号怎么发送给发动机控制器(ECM)呢?
![6997ad7e3a2ce4bc7d40a06075f4a760.png](https://i-blog.csdnimg.cn/blog_migrate/abb87dbd2c1d5e6e2fee45cb99e89fa7.jpeg)
场景2:整车控制器(VCU)需要电机控制器(MCU)的相关信号,比如实际转速,实际扭矩等,同样地MCU的相关信号怎么发送给VCU呢?
![160af4450899bae7dc1d6ce7b6470957.png](https://i-blog.csdnimg.cn/blog_migrate/2d7a5c5e83c4a825a0f5c8ad07953ecb.jpeg)
当然以上场景都是通过CAN通讯实现,具体以场景1再进一步解释TCU如何发送信号给ECM(比如说发动机转速请求)。我们知道车辆怠速的时候TCU控制需请求发动机进行转速控制,所以TCU会要求ECM按请求发动机转速进行控制,TCU将该信号定义在某条报文中,发送到CAN总线,然后ECU去接收该报文,按请求转速进行控制。其大致过程如下:
![80028cadd1b856e6cb674316baabe7f6.png](https://i-blog.csdnimg.cn/blog_migrate/36d2d9d70401cd1dd0d4333ea5233320.jpeg)
当TCU的应用层软件(ASW)算出了需请求的发动机转速后,怎么去发送该信号到CAN总线,供ECU接收使用呢?我们知道AUTOSAR架构分三层:BSW(底层),RTE和ASW。
这里先从TCU的ASW开始,算出请求的发动机转速,再通过RTE发送给BSW的Com模块,存储在Com的Buffer;
然后,Com模块的写功能函数被周期性调用,写入Com的buffer的数据将被打包,再通过Pdu Router路由给Can Interface模块,Can Interface模块再调用Can Driver的写功能函数,将访问硬件,将数据写入相应的寄存器,再发送到CAN总线;
最后,ECU从CAN总线接收该信号(即上篇读功能的过程),进行转速控制。