CAN总线休眠和唤醒机制:

当有特定的事件发生时(比如接收到特定的CAN帧),CAN控制器会被唤醒。

唤醒事件可以是由CAN总线上的其他节点发送的唤醒帧,也可以是由本地触发器(比如定时器)产生的

TJA1145为例,TJA1050 CAN收发器不,无standby,TJA1145的datasheet在附件

指定帧唤醒的硬件:

TJA1145 IC引脚定义

当CAN总线有唤醒帧的时候,INH引脚变为高电平,使能外部电源

报文过滤器的报文与唤醒帧寄存器(TJA1145内部寄存器,通过SPI接口操作)匹配时COMPARE LOGIC就会认为检测到唤醒帧,INH内部开关闭合

TJA1145 典型应用电路

TJA1145 IC内部示意图

  1. MCU满足休眠条件时,通过SPI发送相应的指令或者总线静默一段时间后,TJA1145进入sleep
  2. TJA1145进入sleep后,INH引脚会拉低,控制5V或3V关闭电源输出,MCU整个系统掉电,BAT始终有电
  3. TJA1145处于sleep,但是检测网络是否存在唤醒源
  4. 检测到有效唤醒源后从sleep到standby,INH引脚拉高,5V或3V输出,MCU正常供电

指定帧唤醒的配置方法:

配置指定帧的寄存器,一个是11位CAN ID,配置具体详细的唤醒帧ID

另一个是11位ID mask区域,如果是配置为0,对应的ID那一位必须满足,如果是1不用关注,图中ID是00110100xxx,后三位可以是0或1,配置的唤醒帧范围是0x1A0~0x1A7

汽车中CAN网络管理(同睡同醒):

CAN在整车网络中采用的是一种同睡同醒的网络管理 CAN NM网络

CAN网络状态机

汽车CAN NM网络管理状态机存在以下状态:

Ready Sleep 状态: ECU 准备休眠,无 NM 消息传输,当收到 NM 消息时重新启动超时计时器。

Normal operation:NM 消息传输和消息传输和接收超时定时器的重新启动。

Prepare bus sleep mode:如果配置的定时器超时并且没有发送或接收 NM 消息。

Bus-Sleep 状态:在配置的定时器之后,网络转换到 Bus-Sleep 模式,其中总线上没有通信发生。

同步睡眠:

Normal Operation状态就是ECU正常运行的状态,此时它的应用报文和NM报文都会正常收发。当ECU没有通信需求,它会瞬间进入Ready Sleep状态,在Ready Sleep中,如果又出现了通信需求,ECU则瞬间再回复到Normal Operation,如果在一个Timeout Timer中一直没有通信需求,ECU就进入Prepare Bus-Sleep Mode,在Prepare Bus-Sleep状态中,也会启动一个Timeout Timer,如果在这段时间内有了通信需求,ECU又会立即回到Repeat Message状态,如果过了这个timer还没有通信需求,则ECU会回到Bus-Sleep Mode中。

同步唤醒:

ECU最初处于Bus-Sleep Mode中,当它有了通信需求,它就会进入Network Mode,Repeat Message状态是Network Mode的入口状态,到达这个状态之后,ECU会启动一个Repeat Message Timer,在这个Timer定义的时间内,ECU会一直处于Repeat Message状态。当这个timer结束后,如果有通信需求,ECU则进入Normal Operation状态,如果没有通信需求,则进入Ready Sleep 状态。

LIN总线休眠和唤醒机制:

LIN总线在休眠模式下,主节点会定期发送唤醒帧以唤醒从节点。

唤醒帧是一个特殊的LIN帧,包含唤醒标识符,从节点在接收到唤醒帧后会被唤醒。

除了定期发送唤醒帧外,主节点还可以通过其他方式唤醒从节点,比如外部触发器或特定事件触发唤醒帧的发送

LIN网络状态

休眠:

  1. 利用诊断帧中的主机请求帧 0x3C 作休眠命令,要求数据段的第一个字节为 0x00,其余字节为 0xFF。

休眠命令由主机节点发出,总线上的从机节点只判断数据段的第一个字节,其余字节忽略。

休眠指令

2)当总线静默(没有显性和隐性电平之间的切换)4s~10s 时,节点自动进入休眠状态。

唤醒:

当总线处于休眠状态时,主/从机节点都可以向总线上发送唤醒信号,唤醒信号持续250μs~5ms。其余节点(除发送唤醒信号以外的节点)以大于 150μs为阈值判定唤醒信号。

每个从机节点必须在唤醒信号显性脉冲的结束处算起 100ms 以内准备接收来自主机的命令(帧头);机节点也必须被唤醒,100ms之内主机节点发送帧头开始通信。主机节点的同步间隔段也可以充当唤醒信号,于从机节点需要作初始化处理,因此主机节点所发的这个帧有可能不会被正常接收。

如果节点发送出唤醒信号后,在 150ms~250ms 之内没有接收到总线上的任何命令(帧头),则可以重新发送一次唤醒信号。唤醒信号最多可以发送 3 次, 3 次之后,必须等待至少 1.5s 之后才可以再次发送唤醒信号,

唤醒信号

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐