I did some further testing today and found very interesting relationship. At first, let’s define “stable” and “unstable” state of the device:
def. “stable state” = state at which device may be probed (with “SoapySDRUtil --probe” command) two times in a row without throwing a single error (make sure that USB plug is not plugged out between these calls).
def. “unstable state” = state at which device is not in a stable state (i.e. it thowed at least one error during procedure mentioned above).
As I wrote before, it looks like if the device is in stable state, it stays here as long as I don’t pull out the USB plug. But if I will pull it out, it may recover and go into stable state again, or may fall into unstable state. I wanted to check if there is some relationship between the time of keeping the device unpowered and chances that it will fall into unstable state. So I did some testing according to following algorithm:
- Determine maximum number of runs Nruns_max and time Toff of powering off the device.
- Initialize Nunstable and Nruns counters with zeros.
- Put the device into “stable state” by updating it with “LimeUtil --update” command in a loop (usually 1-3 iterations are enough).
- Unplug the USB plug.
- Wait Toff seconds.
- Plug in the USB plug.
- Increase Nruns.
- Run “SoapySDRUtil --probe” command twice and look for errors (i.e. check if device is in a stable or unstable state). If at least one error was found, increase the value of Nunstable counter.
- If Nruns==Nruns_max, go to step 10. Otherwise, if errors were found in step 8, go to step 3. If no errors were found in step 8, go to step 4.
- Estimate the probability Punstable that the device will fall into unstable state as (Nunstable/Nruns)*100% and end the test.
Here are some results:
Toff=5 seconds: Punstable=(4/20)*100%=20%
Toff=10 seconds: Punstable=(12/20)*100%=60%
Toff=20 seconds: Punstable=(19/20)*100%=95%
Toff=60 seconds: Punstable=(10/10)*100%=100%
So I have found obvious relationship between time of keeping the device unpowered and probability that it will fall into unstable state. @Zack, @IgnasJ, does it ring a bell to you? If not, could you tell me where are initialization-related time constraints (such as length of a pause after FPGA reset) kept in a source code for “big” LimeSDR board? I would be happy to recompile LimeSuite with their different values, so I could check whether it helps at all or not.
P.S. I have tested it with the most recent “RestructureLimeSuite” branch, as it shows more errors than the “master” branch.