๐Ÿ“ถ LimeSDR Mini Configuration Guide

Complete Setup & Optimization Guide

Comprehensive instructions for configuring LimeSDR Mini with YateBTS on Raspberry Pi 4 for IoT security testing and GSM research.

๐Ÿ“‹ LimeSDR Mini Overview

๐Ÿ”ง Technical Specifications

  • Frequency Range: 10MHz - 3.8GHz
  • Bandwidth: 30.72MHz instantaneous
  • Interface: USB 3.0 Type-A
  • Power: USB powered (5V/1.5A)
  • Size: 69mm x 31.4mm x 8mm
  • Weight: 20g
  • Duplex: Full-duplex (simultaneous TX/RX)

โญ Key Features

  • 2x2 MIMO: Support for MIMO applications
  • Open Source: Full open-source software stack
  • Compact: Ultra-portable form factor
  • Wide Coverage: 10MHz to 3.8GHz frequency range
  • Full Duplex: Simultaneous transmit and receive
  • FPGA: Intel Altera MAX 10 for processing
  • Community: Strong open-source community

๐ŸŽฏ Use Cases

  • IoT Security Testing: NB-IoT, LTE-M testing
  • GSM Research: 900MHz, 1800MHz operations
  • Software Radio: GNU Radio applications
  • Education: RF and communications learning
  • Prototyping: Wireless system development
  • Spectrum Analysis: RF signal monitoring
  • Research Projects: Academic and commercial R&D

โš ๏ธ Important Prerequisites

Before starting: Ensure you have a Raspberry Pi 4 with Ubuntu 22.04 LTS installed. This guide assumes you have basic Linux command line knowledge and understanding of SDR concepts.

๐Ÿ”ง Installation & Driver Setup

Install System Dependencies

# Update system packages sudo apt update && sudo apt upgrade -y # Install build dependencies sudo apt install -y git cmake build-essential libsqlite3-dev sudo apt install -y libusb-1.0-0-dev pkg-config # Install additional libraries sudo apt install -y libwxgtk3.0-gtk3-dev freeglut3-dev

Install SoapySDR Framework

# Install SoapySDR and tools sudo apt install -y soapysdr-tools soapysdr-module-all sudo apt install -y python3-soapysdr # Verify SoapySDR installation SoapySDRUtil --info

Build and Install LimeSuite

# Clone LimeSuite repository git clone https://github.com/myriadrf/LimeSuite.git cd LimeSuite git checkout stable # Create build directory mkdir builddir && cd builddir # Configure build (disable GUI components for headless setup) cmake ../ \ -DENABLE_QUICKTEST=ON \ -DENABLE_GUI=OFF \ -DENABLE_DESKTOP=OFF # Build LimeSuite make -j$(nproc) # Install LimeSuite sudo make install sudo ldconfig

Configure udev Rules

# Create udev rules for LimeSDR Mini sudo tee /etc/udev/rules.d/64-limesuite.rules << 'EOF' # LimeSDR Mini SUBSYSTEM=="usb", ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="6108", MODE="666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="601f", MODE="666", GROUP="plugdev" # LimeSDR USB SUBSYSTEM=="usb", ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="6109", MODE="666", GROUP="plugdev" # Performance optimizations SUBSYSTEM=="usb", ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="6108", RUN+="/bin/sh -c 'echo 128 > /sys$devpath/../../../power/autosuspend_delay_ms'" EOF # Reload udev rules sudo udevadm control --reload-rules sudo udevadm trigger # Add user to plugdev group sudo usermod -a -G plugdev $USER

โœ… Reboot Required

After completing the installation, reboot your system to ensure all changes take effect:

sudo reboot

โš™๏ธ YateBTS Configuration

Verify LimeSDR Mini Detection

# Check USB device enumeration lsusb | grep -E "(1d50:6108|0403:601f)" # Test LimeSDR Mini with utilities LimeUtil --find LimeUtil --make=LimeSDR-Mini --info # Verify SoapySDR detection SoapySDRUtil --probe="driver=lime"

Configure YateBTS for LimeSDR Mini

# Create YateBTS configuration backup sudo cp /etc/yate/ybts.conf /etc/yate/ybts.conf.backup # Edit YateBTS configuration sudo nano /etc/yate/ybts.conf

YateBTS Configuration for LimeSDR Mini:

[transceiver] # Use SoapySDR interface for LimeSDR Mini radiodevice=soapy radio_args=driver=lime,soapy=0 # Transceiver settings tx_attenuation=0 rx_gain=40 clockref=internal [soapy] # LimeSDR Mini specific settings device_args=driver=lime # Sample rate (critical for GSM compatibility) sample_rate=13000000 # Bandwidth settings bandwidth=10000000 # Gain settings (adjust based on your setup) rx_gain=30 tx_gain=30 # Channel configuration channels=1 antenna=LNAW # Clock reference clock_ref=internal

Configure GSM Parameters

# GSM frequency configuration [gsm] # GSM 900 example - adjust for your region Radio.C0=975 # ARFCN for GSM 900 Radio.Band=900 # GSM band Radio.PowerManager.MaxAttenDB=10 # Maximum attenuation # Network configuration GSM.Identity.MCC=901 # Mobile Country Code (test network) GSM.Identity.MNC=70 # Mobile Network Code (test network) GSM.Identity.LAC=1000 # Location Area Code GSM.Identity.CI=10 # Cell Identity # Power and timing GSM.Radio.RxGain=47 # Receive gain GSM.Radio.TxAttenOffset=0 # Transmit attenuation offset

Test Configuration

# Test YateBTS configuration sudo yatebts -c /etc/yate/ybts.conf --validate # Start YateBTS service sudo systemctl restart yatebts sudo systemctl status yatebts # Check logs for any issues sudo journalctl -u yatebts -f

๐Ÿš€ Performance Optimization

๐Ÿ“ก RF Optimization

  • Antenna Connection: Use quality uFL to SMA adapters
  • Impedance Matching: Ensure 50ฮฉ throughout RF path
  • VSWR: Keep below 2:1 for optimal performance
  • Cable Length: Minimize coaxial cable length
  • Isolation: Ensure adequate TX/RX isolation
  • Filtering: Use appropriate band-pass filters

๐Ÿ’ป System Optimization

  • USB Performance: Use USB 3.0 ports only
  • Power Management: Disable USB autosuspend
  • CPU Governor: Set to performance mode
  • Memory: Ensure adequate free RAM
  • Interrupts: Check for USB interrupt conflicts
  • Kernel: Use recent kernel versions

โš™๏ธ LimeSDR Mini Settings

  • Sample Rate: Use 13MHz or 26MHz for GSM
  • Gain Control: Start conservative, adjust gradually
  • Calibration: Allow 5-10 minute warm-up
  • Temperature: Monitor device temperature
  • Buffering: Optimize buffer sizes
  • Threading: Adjust thread priorities

Apply System Optimizations

# Set CPU governor to performance echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor # Disable USB autosuspend for LimeSDR Mini echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="6108", ATTR{power/autosuspend}="-1"' | sudo tee -a /etc/udev/rules.d/64-limesuite.rules # Increase USB buffer sizes echo 'vm.dirty_ratio = 15' | sudo tee -a /etc/sysctl.conf echo 'vm.dirty_background_ratio = 5' | sudo tee -a /etc/sysctl.conf # Apply changes sudo sysctl -p

Optimize LimeSDR Mini Parameters

# Test different sample rates for rate in 13000000 26000000; do echo "Testing sample rate: $rate" SoapySDRUtil --probe="driver=lime,soapy=0" --rate=$rate done # Check calibration status LimeUtil --make=LimeSDR-Mini --info | grep -i cal # Run performance test LimeUtil --make=LimeSDR-Mini --test

๐Ÿงช Testing & Validation

Test Command Expected Result Action if Failed
Device Detection LimeUtil --find Device found and listed Check USB connection, drivers
SoapySDR Detection SoapySDRUtil --probe="driver=lime" LimeSDR device detected Reinstall SoapySDR modules
Device Info LimeUtil --make=LimeSDR-Mini --info Firmware version, serial number Update firmware if needed
Self Test LimeUtil --make=LimeSDR-Mini --test All tests pass Check hardware, calibration
YateBTS Config sudo yatebts --validate Configuration valid Fix configuration errors

Run Comprehensive Test Suite

#!/bin/bash # LimeSDR Mini Test Script echo "=== LimeSDR Mini Test Suite ===" # Test 1: Device Detection echo "1. Testing device detection..." if LimeUtil --find | grep -q "LimeSDR Mini"; then echo "โœ… Device detected" else echo "โŒ Device not found" exit 1 fi # Test 2: SoapySDR Interface echo "2. Testing SoapySDR interface..." if SoapySDRUtil --probe="driver=lime" | grep -q "Found"; then echo "โœ… SoapySDR interface working" else echo "โŒ SoapySDR interface failed" exit 1 fi # Test 3: Device Information echo "3. Checking device information..." LimeUtil --make=LimeSDR-Mini --info # Test 4: Self Test echo "4. Running device self test..." if LimeUtil --make=LimeSDR-Mini --test; then echo "โœ… Self test passed" else echo "โŒ Self test failed" fi # Test 5: YateBTS Configuration echo "5. Validating YateBTS configuration..." if sudo yatebts -c /etc/yate/ybts.conf --validate; then echo "โœ… Configuration valid" else echo "โŒ Configuration invalid" fi echo "=== Test Suite Complete ==="

๐Ÿ”ง Troubleshooting Guide

โŒ Device Not Detected

  • Check USB 3.0 connection
  • Verify sufficient power (1.5A)
  • Try different USB port
  • Check udev rules
  • Reinstall drivers

๐Ÿ“Š Poor Performance

  • Check sample rate settings
  • Optimize gain settings
  • Verify antenna connection
  • Monitor USB bandwidth
  • Check for interference

โšก Calibration Issues

  • Allow adequate warm-up time
  • Run manual calibration
  • Check temperature stability
  • Verify impedance matching
  • Test with dummy load

๐Ÿšจ Common Error Solutions

  • "Device not found": Check USB connection and drivers
  • "Permission denied": Verify user in plugdev group
  • "Sample rate error": Use 13MHz or 26MHz for GSM
  • "Calibration failed": Check antenna connection and warm-up
  • "High error rate": Optimize gain settings and RF path

๐Ÿš€ Ready to Start Testing?

Your LimeSDR Mini is now configured and ready for IoT security testing with YateBTS

๐Ÿ“– Getting Started Guide ๐Ÿ”ง Troubleshooting ๐Ÿ“Š SDR Comparison