๐ 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