MCU error 3 (SXR tune failed) on LimeSDR USB

Hi all,

I received a new LimeSDR Mini, so I was able to compare different hardware units to rule out any hardware issues.

These are my results:

The following behavior was reproducible with the new hardware (which has a metal casing, room temperature was about 22°C), both with LimeSuite-20.07.2 and the master branch (3858ed79b95a040145629f95bcaa75e1ea623c6d):

A bandwidth of 11563001 Hz or higher yields an [ERROR] Tx Calibration: MCU error 3 (SXR tune failed).

When I use the old device, I occasionally get [ERROR] Tx Calibration: MCU error 5 (Loopback signal weak: not connected/insufficient gain?) when I sent a bandwidth of 11563000 Hz.

So the MCU error 5 seems to be related to my old hardware (which has no metal casing or heat sink, while the new hardware is in metal casing). The MCU error 3 is an independent issue that occurs with both hardware units and with both LimeSuite versions (20.07.2 and master).

My test setup:

#include <SoapySDR/Device.h>
#include <SoapySDR/Formats.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv) {
  SoapySDRDevice *device;
  SoapySDRStream *tx;
  SoapySDRKwargs args = {};
  if (SoapySDRKwargs_set(&args, "driver", "lime")) abort();
  device = SoapySDRDevice_make(&args);
  SoapySDRKwargs_clear(&args);
  if (SoapySDRDevice_setSampleRate(device, SOAPY_SDR_RX, 0, 384000)) abort();
  if (SoapySDRDevice_setBandwidth(device, SOAPY_SDR_TX, 0, 11563001)) abort();  // 11563000 works with new hardware
  if (SoapySDRDevice_setFrequencyComponent(device, SOAPY_SDR_TX, 0, "RF", 33e6, NULL)) abort();
  if (SoapySDRDevice_setFrequencyComponent(device, SOAPY_SDR_TX, 0, "BB", 0, NULL)) abort();
  if (SoapySDRDevice_setAntenna(device, SOAPY_SDR_TX, 0, "BAND2")) abort();
  if (SoapySDRDevice_setGainElement(device, SOAPY_SDR_TX, 0, "PAD", 52.0)) abort();
  if (SoapySDRDevice_setGainElement(device, SOAPY_SDR_TX, 0, "IAMP", 0.0)) abort();
  if (SoapySDRDevice_setupStream(device, &tx, SOAPY_SDR_TX, SOAPY_SDR_CF32, NULL, 0, NULL)) tx = NULL;
  if (!tx) abort();
  if (SoapySDRDevice_activateStream(device, tx, 0, 0, 0)) {
    fprintf(stderr, "activateStream error: %s\n", SoapySDRDevice_lastError());
    return 1;
  }
  if (SoapySDRDevice_deactivateStream(device, tx, 0, 0)) fprintf(stderr, "Could not deactivate stream!\n");
  if (SoapySDRDevice_closeStream(device, tx)) fprintf(stderr, "Could not close stream!\n");
  if (SoapySDRDevice_unmake(device)) abort();
  return 0;
}

Do I need to update the firmware of the old hardware unit? If yes, how can I do it?

@Zack: I would like to provide one, but I don’t know what that is and how I get one. What do I need to do to get a register dump?