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);
}