Read Rx digital RSSI value

Can anybody direct me to any files/code that processes the Rx digital RSSI value from the 0x040E and 0x040F registers? @andrewback ? Or explain to me how the registers work? Thanks!

Setup requirements for digital RSSI:
0x040C[6] = 0, don’t bypass AGC module
0x040A[13:12] = 1, set AGC mode to RSSI
0x0400[14:13] = 0, select RSSI value to be captured into 0x040E, 0x040F registers
0x040A[2:0] = any value from 0 to 7 (from 2^7 to 2^14 samples), set how many samples used to calculate RSSI

Reading the digital RSSI value: (note) rapid reading can output duplicate RSSI values, because it is recalculated periodically depending on the 0x040A[2:0] selection.

  1. trigger rising edge of CAPTURE:
    0x0400[15] = 0
    0x0400[15] = 1
  2. Read digital RSSI value from the registers
    uint32_t digitalRSSI = (SPI_read(0x040F) << 2) | (SPI_read(0x040E) & 0x3);
2 Likes

Thanks Ricardas - I got that working without too much trouble.

Just one thing - if I disconnect the LimeSDR I get either 0x0 or 0xFFFF which is ok except I believe that there should be more digits ie it should read 0xFFFFF ?

Could you please take a quick look at my code? I’m not sure how to get my code to grab 5 digits - here it is below:

/*
 LMS7002M control using LimeSDR-USB GPIOs, simple example.

 Connection to LimeSDR-USB FPGA_GPIO board:
  * Arduino SCK  (pin 13) - to J12.1 on LimeSDR-USB, via 5V to 3V3 level converter
  * Arduino MISO (pin 12) - to J12.3 on LimeSDR-USB
  * Arduino MOSI (pin 11) - to J12.5 on LimeSDR-USB, via 5V to 3V3 level converter
  * Arduino SS   (pin 10) - to J12.7 on LimeSDR-USB, via 5V to 3V3 level converter
  * Arduino GND           - to J12.9 on LimeSDR-USB

 created 31 Mar 2017
 by Zydrunas Tamosevicius, 
 based on Arduino SPI example.

*/


// Include the SPI library:
#include <SPI.h>

// Global variables
unsigned int rreg;
unsigned int raddr;

// set pin 10 as the slave select for LMS7002M
const int LMS7_SS_Pin = 10; // Chip select pin.

void setup() 
{
  //pinMode(LED_BUILTIN, OUTPUT);
  // set the slaveSelectPin as an output:
  pinMode(LMS7_SS_Pin, OUTPUT);
  // initialize SPI:
  SPI.begin();

  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // prints title with ending line break
  Serial.println("LMS7002M control using LimeSDR-USB GPIOs.");

/////////////////////////////////////////////////////////////////////////////////////////////////
  
// Channel A (0x0020(1,0) is set to 0000 0000 0000 0001
LMS7002M_WR(0x0020, 0xFFFD);
LMS7002M_WR(0x0021, 0x0E9F);
LMS7002M_WR(0x0022, 0x07DF);
LMS7002M_WR(0x0023, 0x5550);
LMS7002M_WR(0x0024, 0xE4E4);
LMS7002M_WR(0x0025, 0x0101);
LMS7002M_WR(0x0026, 0x0101);
LMS7002M_WR(0x0027, 0xE4E4);
LMS7002M_WR(0x0028, 0x0101);
LMS7002M_WR(0x0029, 0x0101);
LMS7002M_WR(0x002A, 0x02A6);
LMS7002M_WR(0x002B, 0x0038);
LMS7002M_WR(0x002C, 0x0000);
LMS7002M_WR(0x002D, 0x0000);
LMS7002M_WR(0x002E, 0x0000);
LMS7002M_WR(0x002F, 0x3841);
LMS7002M_WR(0x0081, 0x0001);
LMS7002M_WR(0x0082, 0x8001);
LMS7002M_WR(0x0084, 0x0400);
LMS7002M_WR(0x0085, 0x0001);
LMS7002M_WR(0x0086, 0x4101);
LMS7002M_WR(0x0087, 0x0000);
LMS7002M_WR(0x0088, 0x04D2);
LMS7002M_WR(0x0089, 0x1020);
LMS7002M_WR(0x008A, 0x0514);
LMS7002M_WR(0x008B, 0x2156);
LMS7002M_WR(0x008C, 0x267B);
LMS7002M_WR(0x0092, 0x0001);
LMS7002M_WR(0x0093, 0x0000);
LMS7002M_WR(0x0094, 0x0000);
LMS7002M_WR(0x0095, 0x0000);
LMS7002M_WR(0x0096, 0x0000);
LMS7002M_WR(0x0097, 0x0000);
LMS7002M_WR(0x0098, 0x0000);
LMS7002M_WR(0x0099, 0x6565);
LMS7002M_WR(0x009A, 0x658C);
LMS7002M_WR(0x009B, 0x6565);
LMS7002M_WR(0x009C, 0x658C);
LMS7002M_WR(0x009D, 0x6565);
LMS7002M_WR(0x009E, 0x658C);
LMS7002M_WR(0x009F, 0x658C);
LMS7002M_WR(0x00A0, 0x6565);
LMS7002M_WR(0x00A1, 0x6565);
LMS7002M_WR(0x00A2, 0x6565);
LMS7002M_WR(0x00A3, 0x6565);
LMS7002M_WR(0x00A4, 0x6565);
LMS7002M_WR(0x00A5, 0x6565);
LMS7002M_WR(0x00A6, 0x000F);
LMS7002M_WR(0x00A7, 0x6565);
LMS7002M_WR(0x00A8, 0x0000);
LMS7002M_WR(0x00A9, 0x0000);
LMS7002M_WR(0x00AA, 0x0000);
LMS7002M_WR(0x00AB, 0x0040);
LMS7002M_WR(0x00AC, 0x0000);
LMS7002M_WR(0x00AD, 0x03FF);
LMS7002M_WR(0x00AE, 0xF000);
LMS7002M_WR(0x0100, 0x7409);
LMS7002M_WR(0x0101, 0x7FFE);
LMS7002M_WR(0x0102, 0x3180);
LMS7002M_WR(0x0103, 0x0A12);
LMS7002M_WR(0x0104, 0x0088);
LMS7002M_WR(0x0105, 0x0011);
LMS7002M_WR(0x0106, 0x318C);
LMS7002M_WR(0x0107, 0x318C);
LMS7002M_WR(0x0108, 0x9426);
LMS7002M_WR(0x0109, 0x61FF);
LMS7002M_WR(0x010A, 0x006E);
LMS7002M_WR(0x010C, 0x8865);
LMS7002M_WR(0x010D, 0x011B);
LMS7002M_WR(0x010E, 0x2040);
LMS7002M_WR(0x010F, 0x3042);
LMS7002M_WR(0x0110, 0x0BF4);
LMS7002M_WR(0x0111, 0x0083);
LMS7002M_WR(0x0112, 0x51E1);
LMS7002M_WR(0x0113, 0x03C3);
LMS7002M_WR(0x0114, 0x0170);
LMS7002M_WR(0x0115, 0x0009);
LMS7002M_WR(0x0116, 0x8620);
LMS7002M_WR(0x0117, 0x2809);
LMS7002M_WR(0x0118, 0x018C);
LMS7002M_WR(0x0119, 0x529A);
LMS7002M_WR(0x011A, 0x2200);
LMS7002M_WR(0x011C, 0xAD41);
LMS7002M_WR(0x011D, 0x2AAA);
LMS7002M_WR(0x011E, 0x064F);
LMS7002M_WR(0x011F, 0x3680);
LMS7002M_WR(0x0120, 0xB9FF);
LMS7002M_WR(0x0121, 0x36DA);
LMS7002M_WR(0x0122, 0x033F);
LMS7002M_WR(0x0123, 0x267B);
LMS7002M_WR(0x0124, 0x001F);
LMS7002M_WR(0x0200, 0x0081);
LMS7002M_WR(0x0201, 0x07FF);
LMS7002M_WR(0x0202, 0x07FF);
LMS7002M_WR(0x0203, 0x0000);
LMS7002M_WR(0x0204, 0x0000);
LMS7002M_WR(0x0205, 0x0000);
LMS7002M_WR(0x0206, 0x0000);
LMS7002M_WR(0x0207, 0x0000);
LMS7002M_WR(0x0208, 0x0073);
LMS7002M_WR(0x0209, 0x0000);
LMS7002M_WR(0x020A, 0x0080);
LMS7002M_WR(0x020B, 0x0000);
LMS7002M_WR(0x020C, 0x0000);
LMS7002M_WR(0x0240, 0x0020);
LMS7002M_WR(0x0241, 0x0000);
LMS7002M_WR(0x0242, 0x0000);
LMS7002M_WR(0x0243, 0x015D);
LMS7002M_WR(0x0244, 0x0000);
LMS7002M_WR(0x0245, 0x0000);
LMS7002M_WR(0x0246, 0x0000);
LMS7002M_WR(0x0247, 0x0000);
LMS7002M_WR(0x0248, 0x0000);
LMS7002M_WR(0x0249, 0x0000);
LMS7002M_WR(0x024A, 0x0000);
LMS7002M_WR(0x024B, 0x0000);
LMS7002M_WR(0x024C, 0x0000);
LMS7002M_WR(0x024D, 0x0000);
LMS7002M_WR(0x024E, 0x0000);
LMS7002M_WR(0x024F, 0x0000);
LMS7002M_WR(0x0250, 0x0000);
LMS7002M_WR(0x0251, 0x0000);
LMS7002M_WR(0x0252, 0x0000);
LMS7002M_WR(0x0253, 0x0000);
LMS7002M_WR(0x0254, 0x0000);
LMS7002M_WR(0x0255, 0x0000);
LMS7002M_WR(0x0256, 0x0000);
LMS7002M_WR(0x0257, 0x0000);
LMS7002M_WR(0x0258, 0x0000);
LMS7002M_WR(0x0259, 0x0000);
LMS7002M_WR(0x025A, 0x0000);
LMS7002M_WR(0x025B, 0x0000);
LMS7002M_WR(0x025C, 0x0000);
LMS7002M_WR(0x025D, 0x0000);
LMS7002M_WR(0x025E, 0x0000);
LMS7002M_WR(0x025F, 0x0000);
LMS7002M_WR(0x0260, 0x0000);
LMS7002M_WR(0x0261, 0x0000);
LMS7002M_WR(0x0280, 0x0000);
LMS7002M_WR(0x0281, 0x0000);
LMS7002M_WR(0x0282, 0x0000);
LMS7002M_WR(0x0283, 0x0000);
LMS7002M_WR(0x0284, 0x0000);
LMS7002M_WR(0x0285, 0x0000);
LMS7002M_WR(0x0286, 0x0000);
LMS7002M_WR(0x0287, 0x0000);
LMS7002M_WR(0x0288, 0x0000);
LMS7002M_WR(0x0289, 0x0000);
LMS7002M_WR(0x028A, 0x0000);
LMS7002M_WR(0x028B, 0x0000);
LMS7002M_WR(0x028C, 0x0000);
LMS7002M_WR(0x028D, 0x0000);
LMS7002M_WR(0x028E, 0x0000);
LMS7002M_WR(0x028F, 0x0000);
LMS7002M_WR(0x0290, 0x0000);
LMS7002M_WR(0x0291, 0x0000);
LMS7002M_WR(0x0292, 0x0000);
LMS7002M_WR(0x0293, 0x0000);
LMS7002M_WR(0x0294, 0x0000);
LMS7002M_WR(0x0295, 0x0000);
LMS7002M_WR(0x0296, 0x0000);
LMS7002M_WR(0x0297, 0x0000);
LMS7002M_WR(0x0298, 0x0000);
LMS7002M_WR(0x0299, 0x0000);
LMS7002M_WR(0x029A, 0x0000);
LMS7002M_WR(0x029B, 0x0000);
LMS7002M_WR(0x029C, 0x0000);
LMS7002M_WR(0x029D, 0x0000);
LMS7002M_WR(0x029E, 0x0000);
LMS7002M_WR(0x029F, 0x0000);
LMS7002M_WR(0x02A0, 0x0000);
LMS7002M_WR(0x02A1, 0x0000);
LMS7002M_WR(0x02A2, 0x0000);
LMS7002M_WR(0x02A3, 0x0000);
LMS7002M_WR(0x02A4, 0x0000);
LMS7002M_WR(0x02A5, 0x0000);
LMS7002M_WR(0x02A6, 0x0000);
LMS7002M_WR(0x02A7, 0x0000);
LMS7002M_WR(0x02C0, 0x0000);
LMS7002M_WR(0x02C1, 0x0000);
LMS7002M_WR(0x02C2, 0x0000);
LMS7002M_WR(0x02C3, 0x0000);
LMS7002M_WR(0x02C4, 0x0000);
LMS7002M_WR(0x02C5, 0x0000);
LMS7002M_WR(0x02C6, 0x0000);
LMS7002M_WR(0x02C7, 0x0000);
LMS7002M_WR(0x02C8, 0x0000);
LMS7002M_WR(0x02C9, 0x0000);
LMS7002M_WR(0x02CA, 0x0000);
LMS7002M_WR(0x02CB, 0x0000);
LMS7002M_WR(0x02CC, 0x0000);
LMS7002M_WR(0x02CD, 0x0000);
LMS7002M_WR(0x02CE, 0x0000);
LMS7002M_WR(0x02CF, 0x0000);
LMS7002M_WR(0x02D0, 0x0000);
LMS7002M_WR(0x02D1, 0x0000);
LMS7002M_WR(0x02D2, 0x0000);
LMS7002M_WR(0x02D3, 0x0000);
LMS7002M_WR(0x02D4, 0x0000);
LMS7002M_WR(0x02D5, 0x0000);
LMS7002M_WR(0x02D6, 0x0000);
LMS7002M_WR(0x02D7, 0x0000);
LMS7002M_WR(0x02D8, 0x0000);
LMS7002M_WR(0x02D9, 0x0000);
LMS7002M_WR(0x02DA, 0x0000);
LMS7002M_WR(0x02DB, 0x0000);
LMS7002M_WR(0x02DC, 0x0000);
LMS7002M_WR(0x02DD, 0x0000);
LMS7002M_WR(0x02DE, 0x0000);
LMS7002M_WR(0x02DF, 0x0000);
LMS7002M_WR(0x02E0, 0x0000);
LMS7002M_WR(0x02E1, 0x0000);
LMS7002M_WR(0x02E2, 0x0000);
LMS7002M_WR(0x02E3, 0x0000);
LMS7002M_WR(0x02E4, 0x0000);
LMS7002M_WR(0x02E5, 0x0000);
LMS7002M_WR(0x02E6, 0x0000);
LMS7002M_WR(0x02E7, 0x0000);
LMS7002M_WR(0x0300, 0x0000);
LMS7002M_WR(0x0301, 0x0000);
LMS7002M_WR(0x0302, 0x0000);
LMS7002M_WR(0x0303, 0x0000);
LMS7002M_WR(0x0304, 0x0000);
LMS7002M_WR(0x0305, 0x0000);
LMS7002M_WR(0x0306, 0x0000);
LMS7002M_WR(0x0307, 0x0000);
LMS7002M_WR(0x0308, 0x0000);
LMS7002M_WR(0x0309, 0x0000);
LMS7002M_WR(0x030A, 0x0000);
LMS7002M_WR(0x030B, 0x0000);
LMS7002M_WR(0x030C, 0x0000);
LMS7002M_WR(0x030D, 0x0000);
LMS7002M_WR(0x030E, 0x0000);
LMS7002M_WR(0x030F, 0x0000);
LMS7002M_WR(0x0310, 0x0000);
LMS7002M_WR(0x0311, 0x0000);
LMS7002M_WR(0x0312, 0x0000);
LMS7002M_WR(0x0313, 0x0000);
LMS7002M_WR(0x0314, 0x0000);
LMS7002M_WR(0x0315, 0x0000);
LMS7002M_WR(0x0316, 0x0000);
LMS7002M_WR(0x0317, 0x0000);
LMS7002M_WR(0x0318, 0x0000);
LMS7002M_WR(0x0319, 0x0000);
LMS7002M_WR(0x031A, 0x0000);
LMS7002M_WR(0x031B, 0x0000);
LMS7002M_WR(0x031C, 0x0000);
LMS7002M_WR(0x031D, 0x0000);
LMS7002M_WR(0x031E, 0x0000);
LMS7002M_WR(0x031F, 0x0000);
LMS7002M_WR(0x0320, 0x0000);
LMS7002M_WR(0x0321, 0x0000);
LMS7002M_WR(0x0322, 0x0000);
LMS7002M_WR(0x0323, 0x0000);
LMS7002M_WR(0x0324, 0x0000);
LMS7002M_WR(0x0325, 0x0000);
LMS7002M_WR(0x0326, 0x0000);
LMS7002M_WR(0x0327, 0x0000);
LMS7002M_WR(0x0340, 0x0000);
LMS7002M_WR(0x0341, 0x0000);
LMS7002M_WR(0x0342, 0x0000);
LMS7002M_WR(0x0343, 0x0000);
LMS7002M_WR(0x0344, 0x0000);
LMS7002M_WR(0x0345, 0x0000);
LMS7002M_WR(0x0346, 0x0000);
LMS7002M_WR(0x0347, 0x0000);
LMS7002M_WR(0x0348, 0x0000);
LMS7002M_WR(0x0349, 0x0000);
LMS7002M_WR(0x034A, 0x0000);
LMS7002M_WR(0x034B, 0x0000);
LMS7002M_WR(0x034C, 0x0000);
LMS7002M_WR(0x034D, 0x0000);
LMS7002M_WR(0x034E, 0x0000);
LMS7002M_WR(0x034F, 0x0000);
LMS7002M_WR(0x0350, 0x0000);
LMS7002M_WR(0x0351, 0x0000);
LMS7002M_WR(0x0352, 0x0000);
LMS7002M_WR(0x0353, 0x0000);
LMS7002M_WR(0x0354, 0x0000);
LMS7002M_WR(0x0355, 0x0000);
LMS7002M_WR(0x0356, 0x0000);
LMS7002M_WR(0x0357, 0x0000);
LMS7002M_WR(0x0358, 0x0000);
LMS7002M_WR(0x0359, 0x0000);
LMS7002M_WR(0x035A, 0x0000);
LMS7002M_WR(0x035B, 0x0000);
LMS7002M_WR(0x035C, 0x0000);
LMS7002M_WR(0x035D, 0x0000);
LMS7002M_WR(0x035E, 0x0000);
LMS7002M_WR(0x035F, 0x0000);
LMS7002M_WR(0x0360, 0x0000);
LMS7002M_WR(0x0361, 0x0000);
LMS7002M_WR(0x0362, 0x0000);
LMS7002M_WR(0x0363, 0x0000);
LMS7002M_WR(0x0364, 0x0000);
LMS7002M_WR(0x0365, 0x0000);
LMS7002M_WR(0x0366, 0x0000);
LMS7002M_WR(0x0367, 0x0000);
LMS7002M_WR(0x0380, 0x0000);
LMS7002M_WR(0x0381, 0x0000);
LMS7002M_WR(0x0382, 0x0000);
LMS7002M_WR(0x0383, 0x0000);
LMS7002M_WR(0x0384, 0x0000);
LMS7002M_WR(0x0385, 0x0000);
LMS7002M_WR(0x0386, 0x0000);
LMS7002M_WR(0x0387, 0x0000);
LMS7002M_WR(0x0388, 0x0000);
LMS7002M_WR(0x0389, 0x0000);
LMS7002M_WR(0x038A, 0x0000);
LMS7002M_WR(0x038B, 0x0000);
LMS7002M_WR(0x038C, 0x0000);
LMS7002M_WR(0x038D, 0x0000);
LMS7002M_WR(0x038E, 0x0000);
LMS7002M_WR(0x038F, 0x0000);
LMS7002M_WR(0x0390, 0x0000);
LMS7002M_WR(0x0391, 0x0000);
LMS7002M_WR(0x0392, 0x0000);
LMS7002M_WR(0x0393, 0x0000);
LMS7002M_WR(0x0394, 0x0000);
LMS7002M_WR(0x0395, 0x0000);
LMS7002M_WR(0x0396, 0x0000);
LMS7002M_WR(0x0397, 0x0000);
LMS7002M_WR(0x0398, 0x0000);
LMS7002M_WR(0x0399, 0x0000);
LMS7002M_WR(0x039A, 0x0000);
LMS7002M_WR(0x039B, 0x0000);
LMS7002M_WR(0x039C, 0x0000);
LMS7002M_WR(0x039D, 0x0000);
LMS7002M_WR(0x039E, 0x0000);
LMS7002M_WR(0x039F, 0x0000);
LMS7002M_WR(0x03A0, 0x0000);
LMS7002M_WR(0x03A1, 0x0000);
LMS7002M_WR(0x03A2, 0x0000);
LMS7002M_WR(0x03A3, 0x0000);
LMS7002M_WR(0x03A4, 0x0000);
LMS7002M_WR(0x03A5, 0x0000);
LMS7002M_WR(0x03A6, 0x0000);
LMS7002M_WR(0x03A7, 0x0000);
LMS7002M_WR(0x0400, 0x2081);
LMS7002M_WR(0x0401, 0x07FF);
LMS7002M_WR(0x0402, 0x07FF);
LMS7002M_WR(0x0403, 0x0000);
LMS7002M_WR(0x0404, 0x0007);
LMS7002M_WR(0x0405, 0x0000);
LMS7002M_WR(0x0406, 0x0000);
LMS7002M_WR(0x0407, 0x0000);
LMS7002M_WR(0x0408, 0x0000);
LMS7002M_WR(0x0409, 0x0000);
LMS7002M_WR(0x040A, 0x1000);
LMS7002M_WR(0x040B, 0x0000);
LMS7002M_WR(0x040C, 0x203B);
LMS7002M_WR(0x040D, 0x0000);
LMS7002M_WR(0x040E, 0x03F2);
LMS7002M_WR(0x040F, 0x03D5);
LMS7002M_WR(0x0440, 0x0020);
LMS7002M_WR(0x0441, 0x0000);
LMS7002M_WR(0x0442, 0x0000);
LMS7002M_WR(0x0443, 0x015D);
LMS7002M_WR(0x0444, 0x0000);
LMS7002M_WR(0x0445, 0x0000);
LMS7002M_WR(0x0446, 0x0000);
LMS7002M_WR(0x0447, 0x0000);
LMS7002M_WR(0x0448, 0x0000);
LMS7002M_WR(0x0449, 0x0000);
LMS7002M_WR(0x044A, 0x0000);
LMS7002M_WR(0x044B, 0x0000);
LMS7002M_WR(0x044C, 0x0000);
LMS7002M_WR(0x044D, 0x0000);
LMS7002M_WR(0x044E, 0x0000);
LMS7002M_WR(0x044F, 0x0000);
LMS7002M_WR(0x0450, 0x0000);
LMS7002M_WR(0x0451, 0x0000);
LMS7002M_WR(0x0452, 0x0000);
LMS7002M_WR(0x0453, 0x0000);
LMS7002M_WR(0x0454, 0x0000);
LMS7002M_WR(0x0455, 0x0000);
LMS7002M_WR(0x0456, 0x0000);
LMS7002M_WR(0x0457, 0x0000);
LMS7002M_WR(0x0458, 0x0000);
LMS7002M_WR(0x0459, 0x0000);
LMS7002M_WR(0x045A, 0x0000);
LMS7002M_WR(0x045B, 0x0000);
LMS7002M_WR(0x045C, 0x0000);
LMS7002M_WR(0x045D, 0x0000);
LMS7002M_WR(0x045E, 0x0000);
LMS7002M_WR(0x045F, 0x0000);
LMS7002M_WR(0x0460, 0x0000);
LMS7002M_WR(0x0461, 0x0000);
LMS7002M_WR(0x0480, 0x0000);
LMS7002M_WR(0x0481, 0x0000);
LMS7002M_WR(0x0482, 0x0000);
LMS7002M_WR(0x0483, 0x0000);
LMS7002M_WR(0x0484, 0x0000);
LMS7002M_WR(0x0485, 0x0000);
LMS7002M_WR(0x0486, 0x0000);
LMS7002M_WR(0x0487, 0x0000);
LMS7002M_WR(0x0488, 0x0000);
LMS7002M_WR(0x0489, 0x0000);
LMS7002M_WR(0x048A, 0x0000);
LMS7002M_WR(0x048B, 0x0000);
LMS7002M_WR(0x048C, 0x0000);
LMS7002M_WR(0x048D, 0x0000);
LMS7002M_WR(0x048E, 0x0000);
LMS7002M_WR(0x048F, 0x0000);
LMS7002M_WR(0x0490, 0x0000);
LMS7002M_WR(0x0491, 0x0000);
LMS7002M_WR(0x0492, 0x0000);
LMS7002M_WR(0x0493, 0x0000);
LMS7002M_WR(0x0494, 0x0000);
LMS7002M_WR(0x0495, 0x0000);
LMS7002M_WR(0x0496, 0x0000);
LMS7002M_WR(0x0497, 0x0000);
LMS7002M_WR(0x0498, 0x0000);
LMS7002M_WR(0x0499, 0x0000);
LMS7002M_WR(0x049A, 0x0000);
LMS7002M_WR(0x049B, 0x0000);
LMS7002M_WR(0x049C, 0x0000);
LMS7002M_WR(0x049D, 0x0000);
LMS7002M_WR(0x049E, 0x0000);
LMS7002M_WR(0x049F, 0x0000);
LMS7002M_WR(0x04A0, 0x0000);
LMS7002M_WR(0x04A1, 0x0000);
LMS7002M_WR(0x04A2, 0x0000);
LMS7002M_WR(0x04A3, 0x0000);
LMS7002M_WR(0x04A4, 0x0000);
LMS7002M_WR(0x04A5, 0x0000);
LMS7002M_WR(0x04A6, 0x0000);
LMS7002M_WR(0x04A7, 0x0000);
LMS7002M_WR(0x04C0, 0x0000);
LMS7002M_WR(0x04C1, 0x0000);
LMS7002M_WR(0x04C2, 0x0000);
LMS7002M_WR(0x04C3, 0x0000);
LMS7002M_WR(0x04C4, 0x0000);
LMS7002M_WR(0x04C5, 0x0000);
LMS7002M_WR(0x04C6, 0x0000);
LMS7002M_WR(0x04C7, 0x0000);
LMS7002M_WR(0x04C8, 0x0000);
LMS7002M_WR(0x04C9, 0x0000);
LMS7002M_WR(0x04CA, 0x0000);
LMS7002M_WR(0x04CB, 0x0000);
LMS7002M_WR(0x04CC, 0x0000);
LMS7002M_WR(0x04CD, 0x0000);
LMS7002M_WR(0x04CE, 0x0000);
LMS7002M_WR(0x04CF, 0x0000);
LMS7002M_WR(0x04D0, 0x0000);
LMS7002M_WR(0x04D1, 0x0000);
LMS7002M_WR(0x04D2, 0x0000);
LMS7002M_WR(0x04D3, 0x0000);
LMS7002M_WR(0x04D4, 0x0000);
LMS7002M_WR(0x04D5, 0x0000);
LMS7002M_WR(0x04D6, 0x0000);
LMS7002M_WR(0x04D7, 0x0000);
LMS7002M_WR(0x04D8, 0x0000);
LMS7002M_WR(0x04D9, 0x0000);
LMS7002M_WR(0x04DA, 0x0000);
LMS7002M_WR(0x04DB, 0x0000);
LMS7002M_WR(0x04DC, 0x0000);
LMS7002M_WR(0x04DD, 0x0000);
LMS7002M_WR(0x04DE, 0x0000);
LMS7002M_WR(0x04DF, 0x0000);
LMS7002M_WR(0x04E0, 0x0000);
LMS7002M_WR(0x04E1, 0x0000);
LMS7002M_WR(0x04E2, 0x0000);
LMS7002M_WR(0x04E3, 0x0000);
LMS7002M_WR(0x04E4, 0x0000);
LMS7002M_WR(0x04E5, 0x0000);
LMS7002M_WR(0x04E6, 0x0000);
LMS7002M_WR(0x04E7, 0x0000);
LMS7002M_WR(0x0500, 0x0000);
LMS7002M_WR(0x0501, 0x0000);
LMS7002M_WR(0x0502, 0x0000);
LMS7002M_WR(0x0503, 0x0000);
LMS7002M_WR(0x0504, 0x0000);
LMS7002M_WR(0x0505, 0x0000);
LMS7002M_WR(0x0506, 0x0000);
LMS7002M_WR(0x0507, 0x0000);
LMS7002M_WR(0x0508, 0x0000);
LMS7002M_WR(0x0509, 0x0000);
LMS7002M_WR(0x050A, 0x0000);
LMS7002M_WR(0x050B, 0x0000);
LMS7002M_WR(0x050C, 0x0000);
LMS7002M_WR(0x050D, 0x0000);
LMS7002M_WR(0x050E, 0x0000);
LMS7002M_WR(0x050F, 0x0000);
LMS7002M_WR(0x0510, 0x0000);
LMS7002M_WR(0x0511, 0x0000);
LMS7002M_WR(0x0512, 0x0000);
LMS7002M_WR(0x0513, 0x0000);
LMS7002M_WR(0x0514, 0x0000);
LMS7002M_WR(0x0515, 0x0000);
LMS7002M_WR(0x0516, 0x0000);
LMS7002M_WR(0x0517, 0x0000);
LMS7002M_WR(0x0518, 0x0000);
LMS7002M_WR(0x0519, 0x0000);
LMS7002M_WR(0x051A, 0x0000);
LMS7002M_WR(0x051B, 0x0000);
LMS7002M_WR(0x051C, 0x0000);
LMS7002M_WR(0x051D, 0x0000);
LMS7002M_WR(0x051E, 0x0000);
LMS7002M_WR(0x051F, 0x0000);
LMS7002M_WR(0x0520, 0x0000);
LMS7002M_WR(0x0521, 0x0000);
LMS7002M_WR(0x0522, 0x0000);
LMS7002M_WR(0x0523, 0x0000);
LMS7002M_WR(0x0524, 0x0000);
LMS7002M_WR(0x0525, 0x0000);
LMS7002M_WR(0x0526, 0x0000);
LMS7002M_WR(0x0527, 0x0000);
LMS7002M_WR(0x0540, 0x0000);
LMS7002M_WR(0x0541, 0x0000);
LMS7002M_WR(0x0542, 0x0000);
LMS7002M_WR(0x0543, 0x0000);
LMS7002M_WR(0x0544, 0x0000);
LMS7002M_WR(0x0545, 0x0000);
LMS7002M_WR(0x0546, 0x0000);
LMS7002M_WR(0x0547, 0x0000);
LMS7002M_WR(0x0548, 0x0000);
LMS7002M_WR(0x0549, 0x0000);
LMS7002M_WR(0x054A, 0x0000);
LMS7002M_WR(0x054B, 0x0000);
LMS7002M_WR(0x054C, 0x0000);
LMS7002M_WR(0x054D, 0x0000);
LMS7002M_WR(0x054E, 0x0000);
LMS7002M_WR(0x054F, 0x0000);
LMS7002M_WR(0x0550, 0x0000);
LMS7002M_WR(0x0551, 0x0000);
LMS7002M_WR(0x0552, 0x0000);
LMS7002M_WR(0x0553, 0x0000);
LMS7002M_WR(0x0554, 0x0000);
LMS7002M_WR(0x0555, 0x0000);
LMS7002M_WR(0x0556, 0x0000);
LMS7002M_WR(0x0557, 0x0000);
LMS7002M_WR(0x0558, 0x0000);
LMS7002M_WR(0x0559, 0x0000);
LMS7002M_WR(0x055A, 0x0000);
LMS7002M_WR(0x055B, 0x0000);
LMS7002M_WR(0x055C, 0x0000);
LMS7002M_WR(0x055D, 0x0000);
LMS7002M_WR(0x055E, 0x0000);
LMS7002M_WR(0x055F, 0x0000);
LMS7002M_WR(0x0560, 0x0000);
LMS7002M_WR(0x0561, 0x0000);
LMS7002M_WR(0x0562, 0x0000);
LMS7002M_WR(0x0563, 0x0000);
LMS7002M_WR(0x0564, 0x0000);
LMS7002M_WR(0x0565, 0x0000);
LMS7002M_WR(0x0566, 0x0000);
LMS7002M_WR(0x0567, 0x0000);
LMS7002M_WR(0x0580, 0x0000);
LMS7002M_WR(0x0581, 0x0000);
LMS7002M_WR(0x0582, 0x0000);
LMS7002M_WR(0x0583, 0x0000);
LMS7002M_WR(0x0584, 0x0000);
LMS7002M_WR(0x0585, 0x0000);
LMS7002M_WR(0x0586, 0x0000);
LMS7002M_WR(0x0587, 0x0000);
LMS7002M_WR(0x0588, 0x0000);
LMS7002M_WR(0x0589, 0x0000);
LMS7002M_WR(0x058A, 0x0000);
LMS7002M_WR(0x058B, 0x0000);
LMS7002M_WR(0x058C, 0x0000);
LMS7002M_WR(0x058D, 0x0000);
LMS7002M_WR(0x058E, 0x0000);
LMS7002M_WR(0x058F, 0x0000);
LMS7002M_WR(0x0590, 0x0000);
LMS7002M_WR(0x0591, 0x0000);
LMS7002M_WR(0x0592, 0x0000);
LMS7002M_WR(0x0593, 0x0000);
LMS7002M_WR(0x0594, 0x0000);
LMS7002M_WR(0x0595, 0x0000);
LMS7002M_WR(0x0596, 0x0000);
LMS7002M_WR(0x0597, 0x0000);
LMS7002M_WR(0x0598, 0x0000);
LMS7002M_WR(0x0599, 0x0000);
LMS7002M_WR(0x059A, 0x0000);
LMS7002M_WR(0x059B, 0x0000);
LMS7002M_WR(0x059C, 0x0000);
LMS7002M_WR(0x059D, 0x0000);
LMS7002M_WR(0x059E, 0x0000);
LMS7002M_WR(0x059F, 0x0000);
LMS7002M_WR(0x05A0, 0x0000);
LMS7002M_WR(0x05A1, 0x0000);
LMS7002M_WR(0x05A2, 0x0000);
LMS7002M_WR(0x05A3, 0x0000);
LMS7002M_WR(0x05A4, 0x0000);
LMS7002M_WR(0x05A5, 0x0000);
LMS7002M_WR(0x05A6, 0x0000);
LMS7002M_WR(0x05A7, 0x0000);

//////////////////////////////////////////////////////////////////////////////////////
}

void loop()
{
  // Trigger rising edge of RSSI capture:
  LMS7002M_WR(0x0400, 0x0081);
  delay (50);
  LMS7002M_WR(0x0400, 0x8081); 


  // Read from 0x040F register:
  raddr = 0x040F;
  rreg = LMS7002M_RD(raddr);
  Serial.print("RSSI:  "); 
  Serial.print("0x");
  Serial.print(raddr, HEX);
  Serial.print(" = 0x");
  Serial.println(rreg, HEX);

  delay(5000);
}

// Write register value to LMS7002M via SPI
void LMS7002M_WR(int addr, int val)
{
  digitalWrite(LMS7_SS_Pin, LOW);
  SPI.transfer( ((addr >> 8) | 0x80) );
  SPI.transfer( (addr & 0xFF) );
  SPI.transfer( ((val >> 8) & 0xFF) );
  SPI.transfer( (val & 0xFF) );
  digitalWrite(LMS7_SS_Pin, HIGH);
}

// Read register value from LMS7002M via SPI
int LMS7002M_RD(int addr) 
{
  digitalWrite(LMS7_SS_Pin, LOW);
  SPI.transfer( ((addr >> 8) & 0x7F) );
  SPI.transfer( (addr & 0xFF) );
  byte msb = SPI.transfer(0x00);
  byte lsb = SPI.transfer(0x00);
  digitalWrite(LMS7_SS_Pin, HIGH);

  return (msb << 8 | lsb);
}

unsigned long GetRSSI()
{
unsgined long msbReg, lsbReg;
// Trigger rising edge of RSSI capture:
LMS7002M_WR(0x0400, 0x0081);
delay (50);
LMS7002M_WR(0x0400, 0x8081);
msbReg = LMS7002M_RD(0x040F);
lsbReg = LMS7002M_RD(0x040E);
return (msbReg << 2) | (lsbReg & 0x3);
}

1 Like

This may (or may not) be relevant to what you’re doing. Unable to sleep one evening I thought for sure this would launch me into quiet slumber:

https://wiki.myriadrf.org/LimeMicro:LMS7002M_Datasheet

It almost worked. The part that I stored into the gray (grey) matter was this:

####When the RSSI output is to be read, the main RX path of that channel should be disabled. Also, RF RSSI analog output can be provided off-chip at the test pin and further processed by external circuits. In this case none of the RX paths needs to be disabled. The RSSI detects the input from -70 dBm to -20 dBm, corresponding to the full dynamic range of the ADC.

I have to confess I didn’t store that all into the gray matter. I merely stored the pointer. :wink:

1 Like

Yes it is relevant - thanks for spotting it. I’ve read the data sheet about 5 times now and have even started to actually understand it! Must have missed the RSSI but that you spotted, probably by falling asleep. Reading the data sheet is indeed a Guaranteed way to get sleepy :slight_smile:

Goes without saying, but anyway no offense to the authors of course. Exciting tehcnical documentation is definitely a contradiction in terms.

Its very well written but could do with some humanity. A few well placed jokes would help one’s attention levels.

Okay, true. Here’s one:

A guy walks into a bar with his alligator. He walks up to the bar tender and asks "Do you serve RF Engineers here?" and the bartender replies with a smile "Of course we do, what can I get you?" The guy replies "I'll have one beer and an RF Engineer."

2 Likes

That’s a really bad joke - you must have got it out of a Christmas cracker?

Anyway, it’s not really what I meant - the joke would need to be a lot more subtle. I think our brains take in information a lot better if it’s stimulated with a bit of humour, even if it makes the author/product look a bit silly. The Emperor’s OLD clothes?

Worse than a Christmas Cracker, a bottle top!

Technical documents lose respect when interspersed with non-essential information.

But more importantly, what am I supposed to read to find peaceful, quite slumber if they start making technical documents with humor.

1 Like

Hey,

According to what I understood from the datasheet, this issue of disabling the RX path is only applicable to the RF RSSI value. The digital RSSI you can read it as suggested by @ricardas.

Thanks,
Saptarshi

1 Like