I am having problems with the cold start of a Lime Mini 2. Unfortunately the circumstances are hard to describe and I cannot come up with a minimal example. Perhaps also I am overlooking something that is obvious for others.
I am using the driver from LimeSuitNG together with a LimeMini 2. Extending the example programs from the driver source I tx a complex sinus of frequency 10 kHz on a carrier of 53 MHz. Last week when I did the experiment everything looked fine and I got a very clean sinus on my spectrum analyser with a more than 60 dB spurious free signal.
Retrying the very same setup this week the signal looks bad exhibiting a lot of noise around the carrier, but still within the bandwidth, however, I have programmed using the FIR filters of the chip.
What I am unsure about is, what is the exact procedure to get the Lime into a clean state from where to start so the result will be reproducible? I remember having played around with the GUI last week, not sure having done something that modified the internal state, something that got lost since then. What is the recommended procedure to set up the Lime? Do you have some example code for that? What is the ini files that are mentioned in some places?
Sometimes if the USB is not plugged in properly, the device enumerates as USB 2.0 device, which severely limits the data bandwidth. Check if your device is enumerated as USB3.0 by command line interface. Also make sure if you aren’t using software built in debug mode, as in debug mode the data transfers might not keep up with realtime resulting in packet drops.
limeDevice
Found 1 device(s) :
0: LimeSDR Mini, media=USB3.0, addr=0403:601f
Which API function you used to do that? If you set GFIR coefficients manually, they have to be set after sampling rate and RF oversampling are already configured, because those parameters affect the layout and number of GFIR coefficients. If sample rate or oversampling is changed after GFIR coefficients were set, then GFIR will not work properly.
device->Init(); resets the device and loads default register values.
Ini files contain the register values of LMS7002M chip, so the state of the chip can be saved to file and loaded again.
Now the discovery from today. If I run my old code (a amateur radio beacon), that is based on the legacy LimeSuite results get interesting.
The beacon signal, which besides generating some OFDM packets als generates a plain CW signal which looks clean, i.e. almost no I/Q imbalance and no intermodulation.
Now after I have stopped the the beacon and start again the very same test program from above I get the following result on the spectrum analyzer:
The init() obviously does not guarantee a fresh start, because the only explanation to me is that there must be some left over state from my legacy beacon.
The configuration done with the LimSuiteNG must be incomplete, because some parts done by the legacy LimeSuite are missing.
Hopefully you can give me some insight how I could resolve the issue.
Regards, Roland
I have found, using a Mini v2.4 with LimeSuiteNG, that I need to initialize the devices twice in order for them to function properly. I realize that doesn’t make a lot of sense, but once it is realized that is necessary it isn’t a problem.
limesdr mini FPGA gateware requires interface clock phase configuration, software does that only for sampling rates >5MHz, so in this case after cold start a 4MHz sample rate was being used, therefore clock phase was using default values, which are not always suitable. After any configuration that was setting sampling rate >5MHz, it would set better clock phases, and therefore going back to 4MHz sample rate would start working good.