你好,NXP团队。
我有几个关于FS8530的问题已经困扰了我几个星期了:
1.我在上电的时候给了WAKE1和VSUP=12V, DBUG=0V,启动后8530一直处于开启关断的循环,关断大约4S后重启,这似乎是challenge watchdog的问题。为了不断刷新watchdog, 我发现WD_SEED寄存器中默认的值0X5AB2通过Challenger watchdog formula计算后是0XA54D。0XA54D再次通过Challenger watchdog formula计算后又回到了0X5AB2,所以MCU要做的事是将0XA54D发送给WD_ANWSER后,再发送0XA54D给WD_SEED以此来刷新SEED,下一次刷新又是0X5AB2给WD_ANWER,再发送0X5AB2给WD_SEED,以此往复吗。不然我无法理解手册中对于刷新LFSR的SEED这一句话的理解。
2.手册中说在WINDOW OPEN的情况下发送WD_ANWSER才有用,那MCU如何判断是否在OPEN情况下呢。
3.我曾尝试关掉WD,我在给了DBUG=5V后,确实所有电压轨都关了,我利用SPI发送31000C35,想要在 OTP_CFG_BOOST_2寄存器里去关掉VBOOST,但是还是没用。
通过读寄存器,我已经确定我进入到了INT_FS阶段了,问题是我无法发送一个正确的WD ,故我还是想确认一下发送WD的方式。正确方式是否是我先读取WD_SEED内的原始值,然后通过然后通过计算得到一个LFSR,然后去发送给WD_ANSWER寄存器,然后如果发送正确,我就用MCU把这个LFSR重新发给WD_SEED去刷新种子,然后下一次又读WD_SEED,进行计算。我现在的情况是到达INT_FS后,无法向WD寄存器写值。
我现在是SPI通信的话,可以读到返回的值,我是用static uint16_t FS8x_WD_ComputeAnswer(uint16_t token)你们提供的函数计算的。目前的问题是我如果无法给一个正确的WD,我无法改变别的寄存器值。但是我就是用默认的0X5AB2,经过计算后得到的值发送给WD_ANSWER。然后又用MCU去发送一个新的值给WD_SEED,然后又计算后发送给WD_ANSWER,其频率我用定时器给了2MS,并且用示波器确认过了发送的没问题。但是事实就是WD_SEED的值和WD_ANSWER的值,我用SPI读回来,发现一直没变化。那我猜想我可能是没有进INIT_FS状态。但是我也无法通过改变FS_SAFE_IOS 寄存器的值,让FS8530 goto INIT_FS
[gw]这个计算结果你再核实下。在初始化阶段(INIT_FS), MCU为LFSR发送种子,或者使用WD_SEED寄存器中可用的FS85 (0x5AB2)生成的默认LFSR值。
[gw] The first good watchdog refresh closes the INIT_FS.
Then the watchdog window is running and the MCU must refresh the watchdog in the OPEN window of the watchdog window period.就是按照上面的步骤去喂狗。
[gw]这个比较麻烦有兴趣可以看看datasheetpage23:
很奇怪,难道WD的错误,只对我写寄存器有限制吗,为什么我SPI读寄存器都能正常读出来,写却怎么写也不能改变寄存器的值
有些寄存器只能在初始化阶段写,在其他阶段不能写只能读,仔细看下寄存器的说明: