一种BCM和ECU多路唤醒源的软件设计方法

2016-11-04 20:07张文龙
科技视界 2016年23期

张文龙

【摘 要】针对车身控制器等需要多路唤醒源的车载产品,无论在ECU选型,还是在控制器管脚功能分配设计时都得考虑对唤醒源的支持,这都对系统的硬件设计带来更大的复杂度和难度;阐述采用新的设计方法,用普通IO(Input Output)管脚,配合软件设计即可达到实现为多路唤醒源的目的,对硬件的要求大大减小,从而也减小了系统硬件设计复杂度和困难。

【关键词】车载控制器;车身控制器;集成式BCM;多路唤醒源;休眠唤醒

【Abstract】For Automotive product that need support multiple wake-up source , such as Body Control Module,it must consider support for the wake souce both in selection of ECU phase and controller tube design phase. And this will bring greater complexity and difficulty in system hardware design phase.We presents a new design method,with common IO pin including software design ,can be achieved the aim of multiple wake-up source,thus reducing the system hardware design complexity and difficulties.

【Key words】ECU; Body Control Module; Integrated BCM; Multiple wake-up source; Sleep wakeup

0 引言

在大多数车载产品设计初期芯片选型的时候,一般只要考虑芯片运算能力、存储资源、通信资源就够了;但是对于某些产品,比如集成式BCM[1](Body Control Module,车身控制器),产品本身要求有多路唤醒源,数量多的可达二十多路,甚至三十多路唤醒源,硬件工程师在芯片选型时就必须考虑芯片本身对唤醒源的支持。芯片管脚有限,管脚均实现为多功能复用管脚;所以在硬件原理图设计时分配管脚功能,除了要满足正常功能,还得考虑满足唤醒源的需求,增加了设计的难度;另一方面在变更需求时,对于管脚的调整变化不够灵活。

针对上面问题,需要设计出一种灵活的ECU多路唤醒方法。这种方法对于芯片本身对唤醒源支持的要求和原理图设计时的难度,均大大减少。

1 系统设计与工作原理

1.1 ECU多路唤醒源的设计

对于ECU和硬件资源的要求,仅仅需要:最低至1K的可保持内存(Retention RAM),一个休眠模式下可运行的硬件定时器(或者RTC),和对芯片非掉电复位的支持(可以是软复位,或者芯片看门狗复位等)。可以不需要任何硬件支持的唤醒源,完全采用软件方式来实现。

系统软件模块主要包括两部分,分别是休眠前的唤醒准备系统和休眠过程中的唤醒检测系统。系统执行流程,当ECU需要休眠时,在休眠前执行唤醒准备系统,这个过程复位可保持内存区数据,将唤醒检测系统的代码拷贝至可保持内存区,启动定时器,并使系统进入休眠模式;定时器超时唤醒MCU进入轻量级运行模式,运行放在可保持内存区的唤醒检测系统;如果检测到对应管脚为唤醒电平,则在可保持内存区记录下对应唤醒源,复位芯片,否则MCU周期性在休眠模式和轻量级运行模式之间切换。MCU运行模式切换如图1所示。

1.2 唤醒准备系统设计

唤醒准备系统的目的是为唤醒检测系统的运行做好准备工作,需要做两件事情,分别是可保持内存区数据准备和休眠准备。

1.2.1 可保持内存区数据准备

复位可保持内存区数据,这里包括了用于存储唤醒源结果和校验唤醒源结果(分别为1个字节,共占两个字节内存);将可唤醒检测代码由ROM区(或flash区)拷贝到可保持内存区。

1.2.2 休眠准备

设置好硬件定时器超时时间,一般为40~80毫秒,可通过实验和测试结果选定;关闭没必要的外围和ECU功能部件的时钟供电,最大限度降低系统功耗;调用休眠指令触发系统进入休眠模式。

1.3 唤醒检测系统设计

唤醒检测系统运行在MCU的轻量级运行模式,该模式从休眠模式由硬件定时器超时触发进入。该模式第一个特点在于代码不需要从ROM区获取,已经存储于可保持内存区中,这样获取指令速度更快;第二个特点需要启动的硬件资源非常少,ECU仅需要初始化数字IO模块,并且使用内部晶振作为系统时钟来源就可以了,不需求启动或者初始化其它模块或资源。该系统执行包括如下三部分。

1.3.1 系统初始化

初始化ECU数字IO模块,并将需要作为唤醒源的端口初始化为普通IO输入模式,不需要对应端口硬件唤醒源支持。

1.3.2 普通IO检测

根据系统每个唤醒源的管脚分配和对应激活电平,获取上面步骤中的普通IO输入的电平,将获取的电平和对应唤醒源激活电平做比较,并记录结果。针对每个当做唤醒源的管脚,均重复上述普通IO输入电平的获取和比较。

1.3.3 检测结果处理

根据普通IO检测结果,做如下两种情况处理。如果所有普通IO获取的电平与对应唤醒源激活电平都不相同,说明没有唤醒事件发生,系统重新初始化硬件定时器,然后出发系统进入休眠模式。如果有任意一个普通IO获取的电平与对应唤醒源激活电平相同,则说明有唤醒源发生,将该普通IO对应的唤醒源和唤醒源有效校验字节均记录在可保持内存区,然后复位系统。系统复位后可通过检查可保持内存区内保存的唤醒源和唤醒源有效校验字节确定唤醒源。

2 实验结果

在车身控制器[1]上,在一款100 pin MCU上任意挑选26个普通IO为唤醒源,具体如表1所示。

实验验证,上述26路唤醒源,在唤醒激活电平存在情况下,该方法均可以检测到,并能正确识别到对应唤醒源,且系统整体休眠功耗低至3毫安培左右。证明设计是可行的。

3 结论

本ECU多路唤醒源设计方法,可支持无数多的唤醒源(仅受限于芯片IO管脚数量),且对管脚是否支持硬件唤醒没有要求;这在产品设计时的芯片选择和芯片管脚功能分配设计时的要求和难度大大降低,具有非常重要的意义。

【参考文献】

[1]李继平,孙永法,俆晖,俞斌.专利名称:BCM车身控制模块.专利公开号:CN203397209U.

[责任编辑:王伟平]