hi, experts
Now we are using S32K324&FS6513 for our ECU, but the FS0B of FS6513 is always low although we have invoke the release function. and I have checked below condition.
read the corresponding register:
寄存器 读取的值
DIAG_SF_ERR 0xF00
SF_OUTPUT_REQUEST 0xF81
BIST 0xF0F
any idea from your side?
Solved! Go to Solution.
RELEASE FSXB的步骤再确认下,看起来像这一步没有做对,我们有这种参考程序:
fs65_status_t FS65_ReleaseFSx(fs65_fsxb_release_t fsOutput)
{
fs65_status_t status = fs65StatusOk; /* Status variable. */
uint8_t writeData; /* Data to be written. */
uint8_t wdSeed; /* Watchdog seed value. */
FS_ASSERT((fsOutput == fs65ReleaseFs0b) || (fsOutput == fs65ReleaseFs1b) || \
(fsOutput == fs65ReleaseFs0bFs1b));
#ifdef FS65_FEATURE_FS1B
status = FS65_CheckFS1B();
if (status != fs65StatusOk)
{
return status;
}
#endif
status = FS65_CheckVAUX();
if (status != fs65StatusOk)
{
return status;
}
/* Get actual LFSR state. */
status = FS65_WD_ReadChallengeToken(&wdSeed);
if (status != fs65StatusOk)
{
return status;
}
/* Prepare release word. */
switch (fsOutput)
{
case fs65ReleaseFs0b:
writeData = (uint8_t)fs65ReleaseFs0b;
writeData |= (wdSeed & (1U << 4U) ? 0x00U : 0x01U);
writeData |= (wdSeed & (1U << 3U) ? 0x00U : 0x02U);
writeData |= (wdSeed & (1U << 2U) ? 0x00U : 0x04U);
writeData |= (wdSeed & (1U << 1U) ? 0x00U : 0x08U);
writeData |= (wdSeed & (1U << 0U) ? 0x00U : 0x10U);
break;
#ifdef FS65_FEATURE_FS1B
case fs65ReleaseFs1b:
writeData = (uint8_t)fs65ReleaseFs1b;
writeData |= (wdSeed & (1U << 7U) ? 0x00U : 0x01U);
writeData |= (wdSeed & (1U << 6U) ? 0x00U : 0x02U);
writeData |= (wdSeed & (1U << 5U) ? 0x00U : 0x04U);
writeData |= (wdSeed & (1U << 4U) ? 0x00U : 0x08U);
writeData |= (wdSeed & (1U << 3U) ? 0x00U : 0x10U);
break;
case fs65ReleaseFs0bFs1b:
writeData = (uint8_t)fs65ReleaseFs0bFs1b;
writeData |= (wdSeed & (1U << 7U) ? 0x00U : 0x01U);
writeData |= (wdSeed & (1U << 6U) ? 0x00U : 0x02U);
writeData |= (wdSeed & (1U << 2U) ? 0x00U : 0x04U);
writeData |= (wdSeed & (1U << 1U) ? 0x00U : 0x08U);
writeData |= (wdSeed & (1U << 0U) ? 0x00U : 0x10U);
break;
#endif
default:
return fs65StatusError;
}
return FS65_WriteRegister(FS65_FS_RELEASE_FSXB_ADDR, writeData, NULL);
}
HI
我没办法粘贴图片,从normal 状态转换到release FSXB 需要满足下面的的条件:
1:FLT_err_count=0
2:ABISTx ok
3:FS_OUT ok
你这个背景是第一次release FSXB还是说遇到了fault以后FSXB拉低了然后你想把他置高?
hi,
我是第一次release FS0B。此外FS寄存器配置如下:
1:FLT_err_count=0
2:ABISTx ok
3:FS_OUT ok
这些状态都对吗?上面的这些状态?
1:FLT_err_count=0
这个count,只在第一次喂狗前,为0,后续都是不为0。所以我的release FS0B只能被调用一次(放到了喂狗函数里)。
2:ABISTx ok
这个是OK的
3:FS_OUT ok
怎么判断OK?是通过读取RELEASE_FSxB吗?
hi,吴工
感谢回复。我现在的进展是Fault error count为0了,然后写入RELEASE_FSxB_ADR,读出来的值确是0x8F81, 为SPI ERR,这个可能的原因有哪些?
RELEASE FSXB的步骤再确认下,看起来像这一步没有做对,我们有这种参考程序:
fs65_status_t FS65_ReleaseFSx(fs65_fsxb_release_t fsOutput)
{
fs65_status_t status = fs65StatusOk; /* Status variable. */
uint8_t writeData; /* Data to be written. */
uint8_t wdSeed; /* Watchdog seed value. */
FS_ASSERT((fsOutput == fs65ReleaseFs0b) || (fsOutput == fs65ReleaseFs1b) || \
(fsOutput == fs65ReleaseFs0bFs1b));
#ifdef FS65_FEATURE_FS1B
status = FS65_CheckFS1B();
if (status != fs65StatusOk)
{
return status;
}
#endif
status = FS65_CheckVAUX();
if (status != fs65StatusOk)
{
return status;
}
/* Get actual LFSR state. */
status = FS65_WD_ReadChallengeToken(&wdSeed);
if (status != fs65StatusOk)
{
return status;
}
/* Prepare release word. */
switch (fsOutput)
{
case fs65ReleaseFs0b:
writeData = (uint8_t)fs65ReleaseFs0b;
writeData |= (wdSeed & (1U << 4U) ? 0x00U : 0x01U);
writeData |= (wdSeed & (1U << 3U) ? 0x00U : 0x02U);
writeData |= (wdSeed & (1U << 2U) ? 0x00U : 0x04U);
writeData |= (wdSeed & (1U << 1U) ? 0x00U : 0x08U);
writeData |= (wdSeed & (1U << 0U) ? 0x00U : 0x10U);
break;
#ifdef FS65_FEATURE_FS1B
case fs65ReleaseFs1b:
writeData = (uint8_t)fs65ReleaseFs1b;
writeData |= (wdSeed & (1U << 7U) ? 0x00U : 0x01U);
writeData |= (wdSeed & (1U << 6U) ? 0x00U : 0x02U);
writeData |= (wdSeed & (1U << 5U) ? 0x00U : 0x04U);
writeData |= (wdSeed & (1U << 4U) ? 0x00U : 0x08U);
writeData |= (wdSeed & (1U << 3U) ? 0x00U : 0x10U);
break;
case fs65ReleaseFs0bFs1b:
writeData = (uint8_t)fs65ReleaseFs0bFs1b;
writeData |= (wdSeed & (1U << 7U) ? 0x00U : 0x01U);
writeData |= (wdSeed & (1U << 6U) ? 0x00U : 0x02U);
writeData |= (wdSeed & (1U << 2U) ? 0x00U : 0x04U);
writeData |= (wdSeed & (1U << 1U) ? 0x00U : 0x08U);
writeData |= (wdSeed & (1U << 0U) ? 0x00U : 0x10U);
break;
#endif
default:
return fs65StatusError;
}
return FS65_WriteRegister(FS65_FS_RELEASE_FSXB_ADDR, writeData, NULL);
}
1:你好像是有fault一直,所以faulterrorcounter不是0.
2:the "FS_OUT write OK" means, that the right command was sent to the RELEASE_FSxB register. If the right command was sent there by the MCU, the FS0B is released. Same for the FS1B if the FS6500 have this pin.
你好,我遇到了同样的问题,请问你是如何解决的,我检查了上述表格中造成错误计数器增加的可能性,但是通过读寄存器结果全是无错误,但是此时读错误寄存器的值,是1,不是0,长时间的争取喂狗,也没有消除。
你好,如下条件需要满足
•ABIST2_FS1B_OK=1 if part number with FS1B
•ABIST2_VAUX_OK=1 except if VAUX_FS_OV_1:0=VAUX_FS_UV_1:0=”00”
•Fault is removed
•Fault error counter must be at ’0’
•Close the S1 switch if FS1B backup delay was engaged (FS1B_DLY_DRV bit = 1)
•RELEASE_FSxB register must be filled with the right value
你好,非常感谢回复,电源芯片中我未使用FS1B和VAUX,VAUX通过INIT_VAUX_OVUV_IMPACT和REG_MODE这两个寄存器关闭其功能,并且通过读取BIST寄存器发现,LBIST_OK、ABIST2_FS1B_OK、ABIST2_VAUX_OK、ABIST1_OK,都显示OK,但此时错误计数器的值一直为1,并且读到VAUX一直欠压,手册也明确表示当VAUX未使用时,Vaux_UVflag is set and cannot be cleared。所以一直没找到办法去消除错误计数器。如果方便的话可以给我您的例程代码吗?非常感谢!
1) 首先BIST中的ABIST2_VAUX_OK一直都是错的,这个需要排查下,我的BIST_ADR配置的是0x65.
2) 我是在喂狗函数里,读取DIAG_SF_ERR,当FLT_ERR_2:0为0时,再去释放FS0B。每连续7次喂狗,错误count会递减。