在CAN唤醒的硬件选择方面,存在多种实现方式。首先,我们可以考虑使用RH850与TJA1042的组合。
在设备进入睡眠状态前,我们需要启用RH850与TJA1042的RXD相连接的CAN接收脚唤醒功能,同时复用GPIO中断,并操作TJA1042的PIN脚使其进入StandBy模式。当设备进入睡眠后,一旦TJA1042从CAN总线上接收到CAN报文,它会通过RXD引发CAN接收脚电平翻转,从而唤醒MCU。唤醒后,系统需要检查是否收到了合法的唤醒报文,否则设备将继续保持睡眠状态。
另一种方式是使用RH850与TJA1043的组合,这种方式与前一种方式在功能上相似。不过,由于TJA1043配备了INH引脚,我们可以在模式切换时利用该引脚控制外部电压调节器,从而实现唤醒功能。
具体来说,我们可以将INH引脚连接到BAT的Enable引脚。设备睡眠后,当TJA1043从CAN总线收到CAN报文时,INH的电平会从低变高,从而触发BAT供电输出板子上电唤醒,之后软件会保持板子供电输出。这种方式适用于设备睡眠后整个板子可以断电处理的场景。另一种连接方式是将INH连接到RH850的一个支持GPIO的唤醒引脚上,这样当TJA1043收到CAN报文时,同样可以通过INH电平的变化来唤醒RH850。
除了上述两种方式外,我们还可以选择使用RH850与TJA1145T的组合。TJA1145T不仅支持前两种CAN收发器的主要功能,还允许我们设定特定的唤醒CAN报文,即只有符合设定条件的合法CAN报文才能唤醒收发器。
在CAN唤醒事件的检测方面,这些事件可能来源于Can Controller或Can Transceiver,我们可以根据硬件连接来共享唤醒源。在软件层面,唤醒事件的检测可以通过中断或查询的方式来实现。具体来说,我们可以通过EcuM_CheckWakeup来检查唤醒源,并在此函数中添加自定义规则,然后传递给CanIf_CheckWakeup来指定唤醒源。一旦CanIf_CheckWakeup确认唤醒源与配置匹配,它会通过EcuM_SetWakeupEvent来通知EcuM。
当应用程序被唤醒后,会调用一系列函数来检查和处理唤醒事件。这包括使用EcuM_CheckWakeup来检查唤醒源,并通过EcuM_SetWakeupEvent来设置唤醒源。如果为Wakeup Source配置了验证超时(Validation Timeout),则需要在规定时间内验证Wakeup Source。这可以通过在EcuM_CheckValidation函数中定义验证规则来实现,该函数会被周期性地触发。如果验证成功,会调用EcuM_ValidateWakeupEvent,进而通过ComM_EcuM_WakeUpIndication来通知Com模块唤醒。如果验证超时,设备将重新进入睡眠状态。如果Wakeup Source未配置验证超时,则可以认为其已被成功验证。
全部评论 (0)