协同车载电源管理系统浅析

协同车载电源管理系统浅析

摘要:文中通过研究并修改系统源码的方式,对车载Android的电源管理模块进行重新设计,包括与之相关的Input输入子系统、Audio声音子系统以及开机动画时序问题,满足了智能座舱多样化的定制需求。最后,通过模拟CAN总线测试以及实车测试,各子任务模块在进行电源管理状态切换时,可以做到协同有序,达到了预期目标,为当下国内外车载系统的开发提供了宝贵的经验,具有一定推广价值。

关键词:车载系统;智能座舱;电源管理;CAN总线;Android;协同

0引言

车载信息娱乐系统(In-Vehicle-Infotainment,IVI)[1-2],是基于整车CAN总线[3]、ECU控制单元以及HMI人机交互界面的系统,包含仪表、空调和中控面板。信息化带动了智能化,智能化催动IVI的变迁。从20世纪90年代的WinCE操作系统到Linux操作系统,再到当下开源的Android操作系统,车载系统也变得越来越智能、便捷[4-7]。但是,由于Android系统复杂且庞大,故目前与之相关的电源管理逻辑多集中于底层操作。本文通过对Android系统的研究与分析,基于原车底层电源管理逻辑,提出了一种与之相对应的多任务协同方案,本方案包括开机动画的时序、按键输入的特殊处理以及声音系统的协同,一定程度上加速了车联网产业的发展。

1系统分析

由于车载系统的特殊性,导致其与原生的Android系统存在明显差异。首先,开机动画要与车身的启动信号进行绑定,不再遵循Android原生的启动流程;其次,Android系统为了个人隐私和手机的功耗考虑,会自动锁屏和休眠[8],但车载娱乐系统是伴随车身的工作持续运作,不存在自动休眠和锁屏功能;最后,按键功能定制,以Power按键举例,传统AndroidMobile,长按Power键为重启,短按为锁屏,而车载最常见的短按为显示时钟界面,长按则可以是非重启的其他模式。综合来说,由于智能座舱IVI的特殊性,本方案引入的修改点包括:系统开机动画时序的调整策略,按键事件的响应策略以及系统声音的逻辑管理。

2系统设计

Android是以Linux内核为基础,由硬件抽象层(HardwareAbstractLayer--HAL)承接,再辅之各种系统服务构建起来的,所以要适配电源管理协同模块,进行自下而上的全局分析。本文以车载系统的CAN总线通信为核心,将系统启动流程、输入子系统和声音输出子系统作为出发点,围绕图1所示的内容进行系统关键模块的设计。车载系统的硬件由MCU+SOC构成,其中MCU主要负责车身CAN信号的收发,同时MCU又与SOC通过SPI总线建立连接,这样车身信号可以通过MCU通知SOC,而SOC也可以将车身的控制信号通过MCU转发给CAN。软件设计方面,SOC采用Android操作系统,而Android又是以Linux为底层,所以此系统可以支撑起HMI以及硬件驱动。

3系统实现及测试

修改原生Android系统,通过BinderIPC进程间通信,便于获取其他各项服务,并回馈电源管理的信号。BinderIPC是基于内存映射(mmap)实现的C/S软件构架,其客户端与服务端通过Binder驱动进行数据交互。客户端进程和服务端进程通过Binder驱动进行桥接,其进程间的通信序列如图2所示,开机动画的修改点如图3所示。基于以上论述,我们需要向Android的服务管理中心(ServiceManager)注册新系统服务,用以处理MCU上报的CAN报文,而其他进程可以订阅感兴趣的CAN报文,比如本文重点关注的电源管理信号等。

3.1开机动画

车载系统的特殊性决定了开机动画不能像传统手机一样,而是需要等待ACCON(点火)信号触发后才能执行,故需要对BootAnimation(开机动画)时序做图3所示的定制修改。第一:屏蔽原生的启动时序;第二:在新增的读写CAN信号进程中,等待车辆ACCON点火信号触发后再执行。此举可满足车载系统对开机动画的特殊要求。

3.2按键事件

车载系统按键分为两种:一种是来自于方向盘的线控,另一种是来自中控触摸屏的按键。前者由MCU控制,后者来自Linux的触摸中断。本文所提出的按键管理方案如图4所示,其中面板的按键元素沿着Linux路径,经事件总线上报给Framework层,而来自MCU的按键则会跳过Linux,直接转为Android的Input事件供Framework层读取,这样二者都由输入管理服务IMS(InputManagerService,IMS)传输到窗体管理服务WMS(WindowManagerService,WMS)中处理。在WMS中,可以由WindowPolicyManager的实现类PhoneWindow-Manager统一决策进行预处理[9],实现对两种类型按键事件的统一操作和拦截。以某汽车厂家的真实需求为例,正常情况下,短按Power按键,需要全屏显示时钟界面,在时钟界面下再短按Power,则退出时钟界面。但是在ACCOFF车辆熄火情况下,短按Power按键,可以使用户进入一小时模式,即车辆熄火,用户依然可以正常体验中控娱乐系统的音乐和收音功能,在一小时模式未结束时再点击Power按键,则会关闭一小时功能。特殊情况下,还可以长按Power8s,重启系统。其他要求,例如在某些场景下(比如倒车过程中)拒绝按键的响应。基于上以特殊的按键需求,本文在梳理了Android输入子系统的事件流程后,提出了车载系统硬按键和面板按键的统一预处理及拦截分发方案,可以实现特殊按键的处理。

3.3AudioGoogle

在2018年专为车载系统了AndroidOCar,引入Car-Service中间件来管理外设和音频逻辑。从官方的汽车音频架构图不难看出,此设计是以声音流为中心而设计,如图5(a)所示。系统将媒体播放、导航声音、收音机的声音统一作为逻辑声音流,送入AudioFlinger中做混音合成,最终再以总线寻址的方式找到对应的声卡设备进行输出。按照官方的Porting(移植)步骤,主要做如下3点的适配:(1).devicePorts:包含可从模块访问的输入输出设备(包括永久连接和可移除设备)的描述序列表;(2).mixPorts:包含由音频HAL提供的所有输入和输出声音流列表;(3).routes:定义输入和输出设备或声音流与设备之间可能存在的连接列表。除此之外,相比原生Android音频,IVI系统拥有更多的音源类型。除AudioFocus之外,还存在其他音源间的混音和衰减等需求[10]。考虑车载电源管理的特殊性,我们还要结合电源管理对车载音频做如图5(b)所示的补充。(1)新增音源持久化记忆模块,使车载娱乐系统在断电及重新启动后,可以恢复上次正在使用的音源;(2)在声音的流类型上,加入优先级矩阵管理,用以协同导航、收音、电话、媒体间的交互。(3)对音频焦点(AudioFocus)做适当的抢占与释放,适配车载的Power按键功能。

3.4CAN总线及实车测试

通过模块CAN电源管理信号和实车环境,对上述方案做综合测试,实验结果表明,开机动画和按键的实现较为完整,因为这两个模块的功能测试用例较为直接,但是车载IVI的音源远多于原生Android,所以仅对常用的主流音源做交互测试,实验结果同样达到了预期目标。

4结语

本文提出了一种多任务协同的车载电源管理系统,将车身CAN信号中的电源管理引入Android系统,研究并给出与此相关的三大核心模块(开机动画、用户按键输入以及声音的输出)的协同控制策略,本方案可适应车载中控娱乐系统的不同场景。略显不足之处是系统的耦合性较强,修改难度大,所以有两条建议可持续深入研究:(1)以CarService服务为核心,对各模块进行解耦,提升系统整体的稳定性;(2)遵循AndroidProjectTreble[11],使更多的制造商以更低的成本接入,并完成系统的升级迭代。

作者:华春梦 臧艳辉 肖志良 单位:佛山职业技术学院