TJA1145休眠唤醒调试

作者 : admin 本文共1367个字,预计阅读时间需要4分钟 发布时间: 2024-06-17 共2人阅读

目录

  • 项目场景:
    • TJA1145引脚图
  • 问题描述
    • SPI链路验证
    • 休眠唤醒
      • 休眠唤醒配置
      • 唤醒报文配置
      • 代码
  • 相关寄存器:
    • 模式寄存器
    • 使能CAN唤醒
    • 设置唤醒边沿检测
    • 事件状态及捕获寄存器
  • CANFD报文不会被识别为有效的唤醒帧

项目场景:

最近开发过程中,选择了这颗芯片,踩了很多坑,总算是把这个芯片的休眠唤醒功能pass了,在这里做一个技术总结,希望可以帮到有需要的人!由于时间紧只关注了用到的部分,如有错误还请指正。

TJA1145引脚图

TJA1145休眠唤醒调试插图
INH:JTA1145 唤醒输出引脚,用于控制开关电源芯片使能
SDO,SDI,SCK,SCSN:通过SPI读写TJA1145寄存器
参考SPI基础知识了解更多SPI知识
WAKE:TJA1145唤醒输入引脚,可配置唤醒信号边沿(上升沿,下降沿)


问题描述

SPI链路验证

TJA1145是通过SPI通信来配置相关寄存器的,所以首先要保证MCU和TJA1145之间的通信正常,这个可以通过读取设备ID来验证,时钟极性和时钟相位为:CPOL = 0 CPHA = 1
TJA1145休眠唤醒调试插图(1)

CLK空闲时刻为低电平,数据在下降沿采样

TJA1145休眠唤醒调试插图(2)

需要注意的是,读写数据时:地址字节的最低位:0为写,1为读。
写数据最低位为0
sendBuf[0] = (addr << 1U) | 0U;
sendBuf[1] = data;

读数据最低位为1
sendBuf[0] = (addr << 1U) | 1U;
sendBuf[1] = 0x00;

休眠唤醒

一般来说唤醒有KL15唤醒 和 CAN唤醒:
KL15唤醒:指钥匙点火(ACC)信号,输入高时给MCU供电
CAN唤醒:检测到唤醒报文时 INH引脚拉高,使能电源芯片给MCU供电

CAN唤醒即Normal模式和Sleep模式之间的切换,正常收发报文处于Normal模式,休眠时处于Sleep模式,由于INH引脚在Sleep模式时为低,所以在MCU属于休眠状态时TJA1145也需要在Sleep模式,以防止异常唤醒MCU

TJA1145休眠唤醒调试插图(3)
根据上图可以看出 Normal模式切换为Sleep模式需要满足三个条件:
1、MC = sleep
2、没有等待的唤醒事件
3、至少要有一个常规唤醒源
即 在切换到睡眠模式前,必须至少启用一个常规唤醒事件,并清除所有事件状态位
TJA1145休眠唤醒调试插图(4)

休眠唤醒配置

①CAN唤醒需要启用 Partial Networking
TJA1145休眠唤醒调试插图(5)
②使能CAN选择性唤醒 成功配置部分网络寄存器
TJA1145休眠唤醒调试插图(6)
③设置数据速率为500k
TJA1145休眠唤醒调试插图(7)
④配置帧控制寄存器:识别格式为标准帧,不关注数据字段长度和内容
TJA1145休眠唤醒调试插图(8)
⑤使能CAN唤醒检测、使能唤醒pin脚上升沿检测
TJA1145休眠唤醒调试插图(9)
⑥清除所有事件状态位
TJA1145休眠唤醒调试插图(10)

唤醒报文配置

①唤醒ID设置
TJA1145休眠唤醒调试插图(11)

TJA1145只能标准帧唤醒,所以用到地址0x29、0x2A

②设置唤醒ID为0x7A4
TJA1145休眠唤醒调试插图(12)

根据文档,0x29的bit7~bit2用来表示标准帧的bit5 ~bit0,
即0x29的bit7~bit2为100100,向0x29写入 100100 00(0x90)
TJA1145休眠唤醒调试插图(13)
根据文档,0x2A的bit4 ~bit0用来表示标准帧的bit10 ~bit6,
即0x2A的bit4~bit0为11110,向0x29写入 00011110(0x1E)
TJA1145休眠唤醒调试插图(14)
TJA1145休眠唤醒调试插图(15)

代码

uint8_t CanTrcv_119_TJA1145_ReadOneReg(uint8_t addr) {
   
	status_t stdRet;
	uint8_t sendBuf[2] = {
   0};
	uint8_t RxBuf[2] = {
   0};
 
	sendBuf[0] = (addr << 1U) 
本站无任何商业行为
个人在线分享 » TJA1145休眠唤醒调试
E-->