This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TCAN1145-Q1:关于局部联网/选择性唤醒行为和配置序列的说明

Guru**** 2894990 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1645752/tcan1145-q1-clarification-on-partial-networking-selective-wake-up-behavior-and-configuration-sequence

器件型号: TCAN1145-Q1

尊敬的 TI 团队:

修改该逻辑后、我在局部联网/选择性唤醒测试期间观察到以下行为、我想交叉检查是否预计会出现此行为。

观察结果:

  1. 我配置了选择性唤醒设置、然后关闭电源。
  2. 打开电源、然后我从 CAN 总线传输了一个有效的 CAN 唤醒帧。
  3. 在这种情况下、当 I 发送有效帧时、INH 引脚变为高电平、RXD 引脚变为低电平、表明唤醒事件成功。

然后、我以不同的条件重复了测试:

  1. 再次关闭电源。
  2. Re 运行代码并发送了无效的 CAN 帧。
  3. 在这种情况下、INH 引脚保持低电平、RxD 引脚具有 3.3V。

基于这一观察、我的理解是:

  • 配置的有效唤醒帧会正确触发 INH 引脚为高电平和 RXD 引脚为低电平。
  • 无效帧不会触发唤醒、并使 INH 保持低电平、RXD 引脚保持高电平。

请确认这是否是局部联网/选择性唤醒操作的正确预期行为?

需要进一步澄清:

我还想了解为什么此流程中不额外需要以下寄存器/配置:

  • 模式控制寄存器
  • WAKE 引脚配置
  • 引脚配置寄存器

目前、在没有明确配置这些寄存器的情况下、选择性唤醒似乎可以正常工作、因此我希望澄清:

  • 这些寄存器是在内部默认为所需状态、还是
  • 无论它们是否仅用于特定的用例/功能。

遵循的当前序列:

软件中实现的电流大致为:


void TCAN_operationDeviceMode (void)

uint8_t reg;
initQSPI_TCAN1145();
tcn_Init();/*在这里我已经为待机设置了配置*/
/*************** 添加了仅用于唤醒帧************** /
/*启用选择性唤醒*/

TCAN_WriteReg (TCAN_REG_INT_ENABLE_1、(1 << 6));//使能位 6 (CANINT)
/*配置唤醒过滤器*/
//与 MODE 相关 (0x11、0x12)--
TCAN_WriteReg (TCAN_WAKE_PIN_CONFIG、0x00);//禁用 0xFFWAKE 引脚/默认值
TCAN_WriteReg (TCAN_REG_PIN_CONFIG、0x00);//0x1c RXD/nINT 默认值

// WUF 过滤器--
TCAN_ConfigWakeUpFilter (0x123、TCAN1145_ID_11BIT、0xFF、NULL、FALSE);

//帧检测(强制)--
TCAN_WriteReg (0x44、0xDC);//0xDC
TCAN_WriteReg (0x45、0x00);
TCAN_WriteReg (0x46、0x1F);//阈值
/*提交 SWCFG */
TCAN_WriteReg (0x47、0x80);
/*清除位*/
TCAN_WriteReg (TCAN_REG_INT_1、0xFF);//清除 INT_1 (0x51) 中的所有位
TCAN_WriteReg (TCAN_REG_INT_2、0xFF);//清除 INT_2 (0x52) 中的所有位
TCAN_WriteReg (TCAN_REG_INT_3、0xFF);//清除 INT_3 (0x53) 中的所有位
TCAN_WriteReg (TCAN_REG_INT_GLOBAL、0xFF);

/*现在进入睡眠*/
TCAN_EnterSelectiveWakeSleepMode ();

/*等待*/
delay_sec (0.01f);
}

void TCAN_ConfigWakeUpFilter (uint32_t can_id、uint8_t id_len、uint8_t DLC、uint8_t * data_pattern、bool mask_enable)

int i;
uint8_t WUF_cfg = 0x00;

if (id_len = TCAN1145_ID_11BIT)

uint8_t SW_ID3;
uint8_t SW_ID4;

SW_ID3 =(uint8_t)((can_id >> 6)& 0x1F);
SW_ID4 =(uint8_t)((can_id << 2)& 0xFC);

TCAN_WriteReg (TCAN_REG_SW_ID1、0x00);
TCAN_WriteReg (TCAN_REG_SW_ID2、0x00);
TCAN_WriteReg (TCAN_REG_SW_ID3、SW_ID3);
TCAN_WriteReg (TCAN_REG_SW_ID4、SW_ID4);
}
暴露

uint8_t ID3 =(can_id >> 16)& 0xFF;
ID3 |=(1 << 5);
TCAN_WriteReg (TCAN_REG_SW_ID1、(CAN_id >> 0)& 0xFF);
TCAN_WriteReg (TCAN_REG_SW_ID2、(CAN_id >> 8)& 0xFF);
TCAN_WriteReg (TCAN_REG_SW_ID3、ID3);
TCAN_WriteReg (TCAN_REG_SW_ID4、(CAN_id >> 24)& 0xFF);
}

uint16_t std_MASK = 0x000;//完全匹配

uint8_t mask4;
uint8_t MASK_DLC_BITS;

mask4 =(std_MASK >> 3)& 0xFF;
MASK_DLC_BITS =(std_MASK << 5) 且 0xE0;

TCAN_WriteReg (TCAN_REG_SW_ID_MASK1、0x00);
TCAN_WriteReg (TCAN_REG_SW_ID_MASK2、0x00);
TCAN_WriteReg (TCAN_REG_SW_ID_MASK3、0x00);
TCAN_WriteReg (TCAN_REG_SW_ID_MASK4、mask4);

WUF_cfg |= MASK_DLC_bits;

if (DLC != 0xFF)

WUF_Cfg |=((DLC 和 0x0F)<< 1);
}

if (MASK_ENABLE && DATA_PATTERN!= NULL)

WUF_Cfg |= 0x01;
}

TCAN_WriteReg (TCAN_REG_SW_ID_MASK_DLC、WUF);

if (MASK_ENABLE && DATA_PATTERN!= NULL)

对于 (I = 0;I < 8;I++)

TCAN_WriteReg (TCAN_REG_DATA0 + I、DATA_PATTERN[i]);
}
}

}

您是否还可以回顾一下、对于局部联网实施、此整体顺序是否正确?

此致、
Anil Kumar

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Anil:

    [报价 userid=“699127“ url=“~/support/interface-group/interface/f/interface-forum/1645752/tcan1145-q1-clarification-on-partial-networking-selective-wake-up-behavior-and-configuration-sequence

    基于这一观察、我的理解是:

    • 配置的有效唤醒帧会正确触发 INH 引脚为高电平和 RXD 引脚为低电平。
    • 无效帧不会触发唤醒、并使 INH 保持低电平、RXD 引脚保持高电平。
    [/报价]

    是的。  

    [报价 userid=“699127“ url=“~/support/interface-group/interface/f/interface-forum/1645752/tcan1145-q1-clarification-on-partial-networking-selective-wake-up-behavior-and-configuration-sequence

    我还想了解为什么此流程中不额外需要以下寄存器/配置:

    • 模式控制寄存器
    • WAKE 引脚配置
    • 引脚配置寄存器
    [/报价]

    我不确定我完全理解你的问题。 需要 MODE_CNTRL 寄存器才能进入睡眠模式(SW 处于活动状态)。 但是、进入睡眠模式后不需要更改 MODE_CNTRL。 TCAN1145 在发生有效的 WUF 后自动进入待机模式。  

    不需要配置 WAKE_PIN_CONFIG。 您可以看到、默认值意味着 WAKE 引脚无需手动调整寄存器即可工作。  

    PIN_CONFIG 只是进一步定制器件。 器件正常工作、但可以调整特定功能。 无需为 SW 调整 WAKE_PIN_CONFIG 和 PIN_CONFIG。

    请注意、我们不会进行完整的代码审核、因为这会给每位客户花费太多的时间。 但是、如果您遇到问题或异常问题、您可以联系。

    但我对您的代码注释有几条注释。  

    TCAN_WriteReg (TCAN_REG_INT_ENABLE_1、(1 << 6));//启用位 6 (CANINT)

    请注意、INT_ENABLE_1 仅启用 INT_1 掩码。 CANINT 功能实际上没有被禁用、只有中断标志被禁用。  

    TCAN_WriteReg (TCAN_WAKE_PIN_CONFIG、0x00);//禁用 0xFFWAKE 引脚/默认值
    [/报价]

    我看到您的注释“Wake pin disabled“。 请注意、从技术上讲、无法禁用此引脚。 但如果不需要、您只需将其连接至原理图上的 GND。 或者、您可以将 WAKE 引脚设置为它永远看不到的脉冲。  

    此致、

    Ethan