COM通信 - TJA1145收发器
文章目录
- 官方数据手册下载地址
- TJA1145 简介
- system controller state
- 1. Normal mode
- 2. Standby mode
- 3. Sleep mode
- CAN operating modes
- 1. CAN Active mode
- 2. CAN Listen-only mode
- 3. CAN Offline and Offline Bias modes
- 4. CAN Off mode
- 常见寄存器配置说明
- 本地唤醒和远程唤醒
- 1.本地唤醒
- 2. 通过 诊断唤醒和中断事件
- 休眠唤醒控制原理
- TJA1145配置流程
- CNA 唤醒配置
- 1. 特定帧唤醒配置
- 2. 特定帧唤醒并且校验数据配置
- 配置唤醒帧 波特率
- 为什么至少需要2帧NM保文才能唤醒ECU
- 参考
官方数据手册下载地址
TJA1145ATKFD datasheet
TJA1145 简介
TJA1145是一种高速CAN收发器,提供控制器局域网(CAN)协议控制器和物理双线CAN总线之间的接口。
该收发器专为汽车行业的高速CAN应用而设计,为CAN协议控制器(带有)的微控制器提供差分发送和接收能力。
TJA1145在待机和睡眠模式下具有非常低的功耗,并通过选择性唤醒功能支持符合ISO 11898-2:2016标准的CAN部分网络。在睡眠/待机模式下等待有效唤醒帧时忽略CAN FD帧的能力。部分网络的这个附加功能非常适合同时支持CAN FD和标准CAN 2.0通信的网络。它允许不需要通信CAN FD消息的普通CAN控制器在CAN FD通信期间保持部分网络休眠/待机模式,而不会产生总线错误。
支持本地和远程唤醒功能。
system controller state
总结:
Standby
状态下INH
引脚可以拉高控制MCU
各级电源输入,CAN
无法正常收发通信;Normal
状态下SPI
可正常通信,INH
引脚拉高,CAN
模块的状态取决于CMC
值,仅在Active
状态下才能够开启正常通信,且仅在CMC=01/10/11
下才能够正常收发;Sleep
状态下INH
引脚处于高阻状态,此时MCU
各级电源可关闭,CAN
始终处于Offline
状态,无法正常收发通信;- 在
Off
状态与Overtemp
状态下SPI
都无法正常通信,在Sleep
状态仅在Vio
供电正常的情况下才可以,且通信速率不能太高; - 仅在
Standby
与Sleep
状态下才检测唤醒事件,即仅在CAN
处于Offline
模式下才能够开启唤醒事件的检测;
1. Normal mode
Normal
模式是主模式。在该模式下TJA1145
处于全功能模式下,所有功能均可用。
可以通过SPI
命令(Mode Control Register = 111)
从Standby mode
或Sleep mode
中切到Normal mode
。
2. Standby mode
Standby mode
是TJA1145
的一种省电模式,具有低电流消耗的特点。
收发器在待机模式下无法发送或接收数据,但是INH
引脚可以始终保持拉高状态;
TJA1145
切换到Standby
模式:
- 当电压满足特定下限时便会自动从
Off
切换至Standby
; - 在
Sleep mode
下检测到 唤醒或者中断事件 - 通过
SPI command(Mode Control Register = 100)
将模式从Normal
或者Sleep
切换至Standby
- 在
Normal Mode
下发送指令MC=001
准备切换至Sleep Mode
,但此时存在唤醒源(如NM报文)或者所有的唤醒源检测全部关闭,该特性从一定程度上避免了死锁;
3. Sleep mode
TJA1145为Sleep mode时,处于最低功耗状态下,且不能正常收发数据,同时INH引脚处于高阻状态。
状态变化存在如下几种可能:
- 一个有效唤醒源或者中断事件(除去
SPIF
事件)或者SPI
指令(SPI
通讯速率不能过高)则可以唤醒TJA1145
从Sleep
状态切换至Standby
状态; - 在
Normal
或者Standby
状态下通过发送MC=001
便可以进入到Sleep
状态,同步须确保至少存在一个唤醒源使能(如CAN
唤醒或者Wake pin
唤醒)且没有pending
状态下的唤醒源; - 如果
Vcc
或者Vio
持续一段事件低于某个阈值,那么该低电压事件将会强制让TJA1145
进入到Sleep
状态,与此同时所有的Peding
的唤醒源将会被清除,CWE=1
以及WPFE=WPRE=1
使能同时特定帧唤醒功能将会被Disable(CPNC=0);
该强制进入到Sleep
状态可通过TJA1145
主状态寄存器(03h)中的FSMS
状态位来获取,如果FSMS为1
表示最近一次进入到Sleep
状态是由于低电压进入到Sleep
状态,否则是通过SPI
指令完成的状态切换。
CAN operating modes
TJA1145为Sleep mode时,处于最低功耗状态下,且不能正常收发数据,同时INH引脚处于高阻状态。集成的CAN收发器支持四种工作模式:
Active
Listen-only
Offline
Offline Bias
存在如下两种基本组合:
- 当
TJA1145
处于Normal
状态时,CAN收发器状态取决于CMC
值,如进入Offline
或者Active
或者Listen-only
等; - 当
TJA1145
处于Standby
或者Sleep
状态,则CAN收发器始终处于Offline
状态;
1. CAN Active mode
在CAN Active模式下,收发器可以通过CANH和CANL发送和接收数据。
- 当
CMC=0x01
时,CAN收发器处于Active状态
,VCC低压检测使能,如果出现VCC电压,就会直接切换到CAN Offline或者Offline Bias状态; - 当
CMC=0x10
时,CAN收发器处于Active状态
,且VCC电压检测被抑制,如果出现VCC电压异常,不会影响到CAN Active正常切换;(实际应用过程中优先统一配置成CMC=0x10,以降低状态不断反复切换)
2. CAN Listen-only mode
- 该模式下CAN发送器被关闭,当TJA1145处于Normal状态且CMC=0x11时,CAN收发器状态就会处于Listen-only状态;
- 在该模式下如果TJA1145处于Normal状态且CMC=0x1,同时VCC电压低于90%,那么就会始终在这个Listen-Only状态;
3. CAN Offline and Offline Bias modes
- 在CAN Offline模式下CAN收发器便会检测CAN总线以查看是否存在唤醒事件,同时CWE=1,CAN H与CAN L始终偏置接地;
- 在CAN Offline Bias Mode下也会检测CAN总线是否存在唤醒事件,只不过CAN H与CAN L会偏置2.5V,当超过一段事件总线没有活动,便会回归至CAN Offline模式下;
- 当TJA1145切换至Standby或者Sleep状态则会直接切换成此状态;
- 当TJA1145状态为Normal且CMC=0x0,则会将状态切换成CAN Offline模式;
- 当TJA1145状态为Normal且CMC=01同时VCC<90%,则也会将状态切换成CAN Offline模式;
4. CAN Off mode
- 当TJA1145状态为Off状态或者Overtemp状态时;
- 当Bat电压低于CAN接收器某个特定阈值电压时,当BAT电压回升至某个特定阈值时,便会进入到CAN Offline模式下;
常见寄存器配置说明
本地唤醒和远程唤醒
1.本地唤醒
本地唤醒是通过WAKE引脚事件捕获启用寄存器中的WPRE(WAKE引脚上升沿检测使能)
和WPFE(WAKE引脚下降沿检测使能)
位启用的。
唤醒事件由WAKE
引脚上的LOW-to-HIGH
(如果WPRE
= 1) 和/或 HIGH-to-LOW
(如果WPFE
= 1)转换触发。
这种安排允许在设计本地唤醒电路时具有最大的灵活性。在不使用本地唤醒功能的应用中,应禁用本地唤醒,并将WAKE引脚连接到GND,以确保最佳的EMI性能。
2. 通过 诊断唤醒和中断事件
TJA1145
中的唤醒和中断事件诊断旨在向微控制器提供有关一系列特征和功能状态的信息。
该信息存储在事件状态寄存器中,如果启用,则在引脚RXD
引脚上发出信号。
- 如果收发器处于
CAN Offline mode
,引脚RXD
强制为LOW
,表示已检测到唤醒或中断事件。 - 如果
TJA1145
处于Sleep Mode
,当发生事件(SPIF
中断除外)时,则引脚INH
强制为HIGH
,TJA1145
切换到Standby
模式。 - 如果事件发生时
TJA1145
处于Standby Mode
,引脚RXD
强制为LOW
以标记中断/唤醒事件。
休眠唤醒控制原理
MCU
满足休眠条件时,通过发送SPI
相应指令让TJA1145
进入Sleep
状态;TJA1145
进入到Sleep
状态后,INH
引脚就会拉低,控制SBC
关闭电源输出,间接导致MCU
整个系统处理掉电状态,此时TJA1145
始终处于供电状态(由于BAT
始终有电),整个ECU
成功进入到休眠状态;TJA1145
虽然处于Sleep
状态,属于极低功耗状态,同步也检测着网络是否存在有效唤醒源;- 当
TJA1145
发现有效唤醒源之后,就会自动从Sleep
状态切换成Standby
状态,在Standby
状态下INH
引脚拉高,此时SBC
便会正常输出,从而MCU
被正常供电,程序开启正常运行; APP
判断当前是否有有效唤醒源,如果有,则切到Normol Mode
;
TJA1145配置流程
初始化部分:
- 解锁寄存器,获取硬件ID号。
- 配置全局事件使能寄存器,按照需求分别使能系统事件、wake引脚事件、传输事件。
- 配置CAN收发寄存器;包括唤醒CANID、帧类型、数据长度等。
- 配置CAN控制寄存器,使能CAN选择唤醒功能、设置局域网配置OK标示位。
- 配置主控制寄存器,进入Normal状态;上锁寄存器。
- 读取寄存器,判断寄存器数据是否符合配置。
轮询部分:
- 事件处理,如果有一些错误、非预期的状态出现,就要处理相关寄存器。或者简单粗暴,重新初始化。
- 状态处理,根据上层指令,切换当前1145的状态机。
CNA 唤醒配置
1. 特定帧唤醒配置
tja1145_write_regster(0X0A, 0x00); /* < 写保护寄存器,解锁-0x00,上锁-0xFF */
tja1145_write_regster(0X26, 0x05); /* < 波特率寄存器,500K */
/* < 设置支持 CAN标准帧 0x1A0 唤醒 */
tja1145_write_regster(0X29, 0x20); /* < 29寄存器,配置唤醒帧ID 标准帧的低6位:0x1A0 */
tja1145_write_regster(0X2A, 0x06); /* < 2A寄存器,配置唤醒帧ID 标准帧的高5位:0x1A0 */
/* < 设置支持 CAN标准帧 0x1A0 到 0x1A7 唤醒 */
tja1145_write_regster(0X2D, 0x07); /* < 2D寄存器,配置唤醒ID掩码;掩码:0x007 */
tja1145_write_regster(0X2E, 0x00); /* < 2E寄存器,配置唤醒ID掩码;掩码:0x007 */
tja1145_write_regster(0X2F, 0x00); /* < 设置唤醒帧为标准帧,期望数据字节数为 8Byte,但是不关注数据内容 */
tja1145_write_regster(0X68, 0x10); /* < 68-6F寄存器,配置唤醒帧数据位掩码 */
tja1145_write_regster(0X4C, 0x00); /* < 4C寄存器,失能 WakePin 上下沿检测 */
tja1145_write_regster(0X61, 0xFF); /* < 4C寄存器,状态寄存器清除 */
tja1145_write_regster(0X20, 0x30); /* < 设置CPNC = PNCOK = 1时启用选择性唤醒;否则将启用标准唤醒 */
tja1145_write_regster(0X04, 0x00); /* < 设置不检测 overtemperature warning 和SPI failure */
tja1145_write_regster(0X23, 0x01); /* < 设置CAN 唤醒检测使能 */
tja1145_write_regster(0X01, 0x07); /* < 模式选择寄存器, Sleep mode-0x01,Standby mode-0x04,Normal mode-0x07 */
tja1145_write_regster(0X0A, 0xff); /* < 写保护寄存器,解锁-0x00,上锁-0xFF */
2. 特定帧唤醒并且校验数据配置
与 特定帧唤醒配置 相同,区别在于配置 0x2F寄存器时,PNDM 必须配置为1,此时0x68-0x6F 寄存器配置的校验数据才生效。
配置唤醒帧 波特率
- 0x20 寄存器 = 0x07
- 波特率配置 0x26 寄存器 = 0x05 500K
CANFD 帧永远不会被识别为有效的唤醒帧
为什么至少需要2帧NM保文才能唤醒ECU
因为第一帧报文只是硬件触发唤醒MCU,但MCU并不知道收到的报文是什么,是否需要继续维持唤醒。
参考
- 一文搞懂ECU休眠唤醒之利器-TJA1145
- TJA1145芯片开发
- CAN收发器TJA1145A休眠唤醒应用