工具与软件:
嗨团队、
电源打开时、客户处于 Steadby 模式。 客户希望将 MODE SEL 配置为正常模式、但写入后返回值不正确。 请帮助分析为什么会出现问题?

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.
工具与软件:
嗨团队、
电源打开时、客户处于 Steadby 模式。 客户希望将 MODE SEL 配置为正常模式、但写入后返回值不正确。 请帮助分析为什么会出现问题?

您好、Michael、ö m
客户已调优 SPI、但在根据我们的应用手册调试部分唤醒时遇到问题。 请帮助分析它。
客户现在已修复了设备无法唤醒的情况。 它在收到621之后正常唤醒。 但是、如果客户先发送另一个 ID、然后再发送621、则无法将其唤醒。
请帮助找出问题的原因
下面是配置代码实现
TCAN114X_STATUS_ENUM
TCAN114x_Mode_Set(TCAN114X_MODE_ENUM modeRequest)
{
TCAN114x_Mode_Control modeRegister;
TCAN114x_Mode_Control_Read(&modeRegister);
printf("Read Can Mode before write: %d\n", modeRegister.MODE_SEL);
switch (modeRequest)
{
default: return TCAN114X_FAIL;
case TCAN114X_MODE_SLEEP :
{
modeRegister.MODE_SEL = REG_BITS_TCAN114X_MODE_CNTRL_MODE_SLEEP;
modeRegister.SW_EN = 1;
TCAN114x_Mode_Control_Write(&modeRegister);
return TCAN114X_SUCCESS;
}
case TCAN114X_MODE_STANDBY : modeRegister.MODE_SEL = REG_BITS_TCAN114X_MODE_CNTRL_MODE_STANDBY; break;
case TCAN114X_MODE_LISTEN : modeRegister.MODE_SEL = REG_BITS_TCAN114X_MODE_CNTRL_MODE_LISTEN; break;
case TCAN114X_MODE_NORMAL :
modeRegister.MODE_SEL = REG_BITS_TCAN114X_MODE_CNTRL_MODE_NORMAL;
//modeRegister.SW_EN = 1;
break;
}
TCAN114X_STATUS_ENUM ret = TCAN114x_Mode_Control_Write(&modeRegister);
TCAN114x_Mode_Control tmp_modeRegister;
TCAN114x_Mode_Control_Read(&tmp_modeRegister);
printf("Read Can Mode after write: %d\n", tmp_modeRegister.MODE_SEL);
if (ret!= TCAN114X_SUCCESS){
printf("[ERROR]TCAN114x_Mode_Set: %d fail\n", modeRegister.MODE_SEL);
return TCAN114X_FAIL;
}
return TCAN114X_SUCCESS;
}
uint8_t sw_config = 0;
can1145_write_reg_value(REG_TCAN114X_SW_CONFIG_4, &sw_config,1);
uDelay(500);
TCAN114x_PN_Config sleep_config;
sleep_config.ID = 0x621; // 0x621
sleep_config.IDE = 0; // standard frame
sleep_config.IDMask = 0x00;
sleep_config.DataMaskEN = 0; // no mask
sleep_config.DATA[6] = 0x00;
sleep_config.DLC = 0;
sleep_config.SWFDPassive = 1; //CAN with flexible data rate frame are ignored
sleep_config.CAN_DR = 5; // = 500Kbps
//sleep_config.FD_DR = 3; //Reserved
sleep_config.FrameErrorThreshold = 254;
ret0 = TCAN114x_PN_Config_Write(&sleep_config);
uDelay(5000);
ret1 = TCAN114x_Mode_Set(TCAN114X_MODE_SLEEP);
printf("standby trans ret0:%d, sleep trans ret1:%d\r\n",ret0,ret1);
您好、Alan:
WUF 接收器通过首先接收有效的 WUP 来激活、如果它们手动发送另一个 ID、并且间隔约为几秒、则 WUF 接收器将停用并在 tSILENCE 内返回深度睡眠模式、在这种情况下、它们需要首先发送 WUP 来再次启动选择性唤醒、然后发送匹配的 WUF 以唤醒器件。
他们是否能够在发送第一个 ID 的 tSILENCE 内尝试发送匹配的 WUF?
此致、
Sean
你好、Sean、
感谢您的分析。
客户通过插上并拔 CAN 接线盒来模拟发送 WUP、然后发送 WUF、对其进行了仿真和测试。 它的确正常地被唤醒了。
但还有一个问题。 我根据位位置使用了唤醒功能、并将 canid 0x123的 Byte6位0设置为1来唤醒。
1.发送 WUP
2.将 canid 0x123的 Byte6位0设置为0并发送
3.将 canid 0x123的 Byte6位0设置为1并发送
这样、步骤1、2和3就不能被唤醒。
如果只能唤醒步骤1和3、
但我们的实际汽车将会有步骤1、2和3的顺序、这种情况无法被唤醒。
客户设计的步骤是否正确? 或者这种现象是否符合预期?
你好、Sean、ć
1.客户反馈:没有听说每次使用 TJA1145-Q1时都需要发送 WUP。 如果每个 PN 唤醒都需要 WUP、这是否是 CAN 和 NXP 之间的差异?
2. WUP 在中被描述为显性脉冲、隐性脉冲和显性脉冲。 这是否意味着客户需要每次发送一次此消息以唤醒特定帧设计、然后发送 WUF 以在 tSilence 超时之前唤醒? 在超时后、它需要再次发送 WUP 脉冲、然后在 tSILENCE 时间内再次发送 WUF。 我的理解是否正确?

3.是否有测得的 WUP 波形? 如果客户需要添加此设计、他们希望看到实际的波形、以便更好地了解。
非常感谢您的支持!
您好、Alan:
1.这是 TJA1145或任何其他局部联网 CAN 收发器的相同要求、我没有说他们每次都需要发送 WUP 进行选择性唤醒。 它们仅在总线保持空闲状态的时间大于 tSILENCE 时才需要执行该操作、以保持总线处于活动状态并启用 WUF 接收器。 以下是 NXP 的应用手册:


如果他们仍对 TI 或 NXP 的应用手册有疑问、请查看 ISO11898-2中的快照:

2.不需要,他们不需要再发送一个 WUP 在 tSILENCE 超时之前。 如果在总线上没有针对 tSILENCE 的通信、它们将需要发送一个 WUP 来"重新激活"总线偏置。
3.对 WUP 没有严格的要求,在实际应用中 WUP 几乎可以是任何 CAN 帧,这意味着总线上的任何活动实际上都可能是唤醒事件。 下面我们举例说明。

此致、
Sean