当前位置: 首页 > news >正文

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供电正常的情况下才可以,且通信速率不能太高;
  • 仅在StandbySleep状态下才检测唤醒事件,即仅在CAN处于Offline模式下才能够开启唤醒事件的检测;
    在这里插入图片描述

1. Normal mode

Normal模式是主模式。在该模式下TJA1145处于全功能模式下,所有功能均可用。
可以通过SPI命令(Mode Control Register = 111)Standby modeSleep mode中切到Normal mode

2. Standby mode

Standby modeTJA1145的一种省电模式,具有低电流消耗的特点。
收发器在待机模式下无法发送或接收数据,但是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通讯速率不能过高)则可以唤醒TJA1145Sleep状态切换至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强制为HIGHTJA1145切换到Standby模式。
  • 如果事件发生时TJA1145处于Standby Mode,引脚RXD强制为LOW以标记中断/唤醒事件。

在这里插入图片描述
在这里插入图片描述

休眠唤醒控制原理

  1. MCU满足休眠条件时,通过发送SPI相应指令让TJA1145进入Sleep状态;
  2. TJA1145进入到Sleep状态后,INH引脚就会拉低,控制 SBC 关闭电源输出,间接导致MCU整个系统处理掉电状态,此时TJA1145始终处于供电状态(由于BAT始终有电),整个ECU成功进入到休眠状态;
  3. TJA1145虽然处于Sleep状态,属于极低功耗状态,同步也检测着网络是否存在有效唤醒源;
  4. TJA1145发现有效唤醒源之后,就会自动从Sleep状态切换成Standby状态,在Standby状态下INH引脚拉高,此时 SBC 便会正常输出,从而MCU被正常供电,程序开启正常运行;
  5. APP判断当前是否有有效唤醒源,如果有,则切到 Normol Mode

在这里插入图片描述

TJA1145配置流程

初始化部分:

  1. 解锁寄存器,获取硬件ID号。
  2. 配置全局事件使能寄存器,按照需求分别使能系统事件、wake引脚事件、传输事件。
  3. 配置CAN收发寄存器;包括唤醒CANID、帧类型、数据长度等。
  4. 配置CAN控制寄存器,使能CAN选择唤醒功能、设置局域网配置OK标示位。
  5. 配置主控制寄存器,进入Normal状态;上锁寄存器。
  6. 读取寄存器,判断寄存器数据是否符合配置。

轮询部分:

  1. 事件处理,如果有一些错误、非预期的状态出现,就要处理相关寄存器。或者简单粗暴,重新初始化。
  2. 状态处理,根据上层指令,切换当前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标准帧 0x1A00x1A7 唤醒 */
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 寄存器配置的校验数据才生效。

配置唤醒帧 波特率

  1. 0x20 寄存器 = 0x07
  2. 波特率配置 0x26 寄存器 = 0x05 500K

CANFD 帧永远不会被识别为有效的唤醒帧

为什么至少需要2帧NM保文才能唤醒ECU

因为第一帧报文只是硬件触发唤醒MCU,但MCU并不知道收到的报文是什么,是否需要继续维持唤醒。

参考

  • 一文搞懂ECU休眠唤醒之利器-TJA1145
  • TJA1145芯片开发
  • CAN收发器TJA1145A休眠唤醒应用
http://www.dtcms.com/a/122264.html

相关文章:

  • 数字图像处理作业2
  • 【回眸】Linux 内核 (十六) 之 多线程编程 下
  • 基于Python的心衰疾病数据可视化分析系统
  • 【论文精读】Multi-scale Neighbourhood Feature Interaction Network
  • JavaScript Hook JSON.stringify和JSON.parse:逆向与修改实战指南
  • AWS弹性容器服务(AWS Elastic Container Service,ECS)概述
  • js中this指向问题
  • deque容器
  • 排序算法(快速排序,选择排序......)【泪光2929】
  • FPGA_modelsim错误总结
  • 一、简单的 Django 服务
  • 软考 系统架构设计师系列知识点 —— 设计模式之工厂模式
  • 518. Coin Change II
  • React中使用dnd-kit实现拖拽排序
  • ASP Response
  • 分布式存储系统Ceph
  • 微信小程序:动态表格实现,表头单元格数据完全从data中获取,宽度自定义,自定义文本框,行勾选,样式效果,横向滚动表格(解决背景色不足的问题)等
  • TCP重传率高与传输延迟问题
  • 【scikit-learn基础】--『数据加载』之外部数据集
  • pip install pytrec_eval失败的解决方案
  • 自动变为 VIP 文章
  • python基础语法11-文件读写
  • 程序代码篇---时间复杂度空间复杂度
  • 初识Linux:常见指令与权限的理解,以及相关衍生知识
  • Jetpack Compose 状态保存机制全面解析:让UI状态持久化
  • JavaWeb遇到的问题汇总
  • 2025 销售困局:AI 强势入局,传统模式如何突围?
  • 解决 ECharts 图表无数据显示问题
  • 网工毕业设计项目选题推荐
  • Redis Java 客户端 之 SpringDataRedis