-
Notifications
You must be signed in to change notification settings - Fork 27
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Stabilizer + Pounder panics on bootup #746
Comments
The panic appears to be occurring because the AD9959 register CSR readback is mismatching the configured value. This reminds me of #101, and I'll continue investigating what's happening here. |
Here, you can see captures from signals to the DDS including MASTER-RESET, IO_UPDATE, CSn, and the output of OSC1 on pounder. OSC1 is used to source the DDS system clock. As can be seen, the master reset and IO update occurs before the OSC1 output enables, which means that these signals are not actually registered by the DDS. Similarly, register writes without the DDS clock input do not stick. It appears that the DDS initialization procedure is occurring before the oscillator actually turns on, which is why register configurations aren't sticking until the device is power cycled. We likely need to implement a detection mechanism to tell if the oscillator is actually powered. Perhaps we could repeatedly execute the configuration process until the CSR value sticks... I'll investigate part specifications. |
Pretty sure the SPI interface works fine without the refclk input as it's a bootstrap requirement for e.g. xtal setup. I don't see the requirement for clock to be up before talking SPI. Also can't find it in the datasheet. |
Clock configuration is done through FR1. If that's not configured it's somewhat unclear that a useful sysclk is available, ergo the SPI interface should work without clock. My guess is that we're actually running into the reset pulse timing issue. |
No. There is no internal reference oscillator. What you are referencing is an external passive quartz. |
Ah you're correct here. However, the point stands that there is no clock input on REF-CLK. And the data sheet explicitly says that there has to be a single SYNC-CLK cycle to register the I/O_Update signal (because it is synchronous). Thus, without input on REF-CLK, there is no SYNC-CLK, and the I/O_Update signal will never be registered. FR1 configuration is not required to generate a SYNC-CLK source - there just has to be any type of oscillation on REFCLK (either via crystal or oscillator, as selected by CLK_MODE_SEL) to generate a SYNC-CLK which can then be used to access and modify registers |
FR1 is definitely required! It's not like anything always generates a valid sysclk of sync clk. Imagine having it configured to use the PLL. Then the refclock frequency changes which can make FR1 invalid such that the PLL doesn't lock or isn't stable. Then you want to change FR1 but you don't have a valid clock. |
While my assessment of your statements agrees that there could be problems if you change your refclk, there's nothing in the datasheet (or observed behavior) that indicates that you can modify registers without a REFCLK. Attempting to access and modify device registers while the REFCLK inputs are idle does not appear to result in registers sticking. I can try larger I/O_Update periods, but I doubt that would resolve the issue (since there's no clock at all) |
We should definitely just make sure we have (a) the oscillator up, (b) selected and (c) clocking before the reset. The rest shouldn't need changes AFAICS. |
If the Pounder+Stabilizer combination is flashed and rebooted, it has been reported that it will panic without the debugger attached (as indicated by the red LEDs powered)
Upon using a debugger reset, the panic is resolved.
First reported by @jordens
The text was updated successfully, but these errors were encountered: