## Register Dump

Next step was to dump all registers (0x00 thru 0x40) of the SX1276/7/8/9 device

//--------------------------------------------------------------------------------- // Copyright (c) July 2018, devMobile Software // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // //--------------------------------------------------------------------------------- namespace devMobile.IoT.Rfm9x.RegisterScan { using System; using System.Diagnostics; using System.Threading.Tasks; using Windows.ApplicationModel.Background; using Windows.Devices.Gpio; using Windows.Devices.Spi; public sealed class Rfm9XDevice { private SpiDevice rfm9XLoraModem; private GpioPin chipSelectGpioPin; public Rfm9XDevice(int chipSelectPin) { SpiController spiController = SpiController.GetDefaultAsync().AsTask().GetAwaiter().GetResult(); var settings = new SpiConnectionSettings(0) { ClockFrequency = 500000, Mode = SpiMode.Mode0, }; GpioController gpioController = GpioController.GetDefault(); chipSelectGpioPin = gpioController.OpenPin(chipSelectPin); chipSelectGpioPin.SetDriveMode(GpioPinDriveMode.Output); chipSelectGpioPin.Write(GpioPinValue.High); rfm9XLoraModem = spiController.GetDevice(settings); } public Byte RegisterReadByte(byte registerAddress) { byte[] writeBuffer = new byte[] { registerAddress }; byte[] readBuffer = new byte[1]; Debug.Assert(rfm9XLoraModem != null); chipSelectGpioPin.Write(GpioPinValue.Low); rfm9XLoraModem.Write(writeBuffer); rfm9XLoraModem.Read(readBuffer); chipSelectGpioPin.Write(GpioPinValue.High); return readBuffer[0]; } } public sealed class StartupTask : IBackgroundTask { private const int ChipSelectLine = 25; private Rfm9XDevice rfm9XDevice = new Rfm9XDevice(ChipSelectLine); public void Run(IBackgroundTaskInstance taskInstance) { while (true) { for (byte registerIndex = 0; registerIndex <= 0x42; registerIndex++) { byte registerValue = rfm9XDevice.RegisterReadByte(registerIndex); Debug.WriteLine("Register 0x{0:x2} - Value 0X{1:x2} - Bits {2}", registerIndex, registerValue, Convert.ToString(registerValue, 2).PadLeft(8, '0')); } Task.Delay(10000).Wait(); } } } }

The output of the application looked like this

Register 0x00 – Value 0X00 – Bits 00000000

Register 0x01 – Value 0X09 – Bits 00001001

Register 0x02 – Value 0X1a – Bits 00011010

Register 0x03 – Value 0X0b – Bits 00001011

Register 0x04 – Value 0X00 – Bits 00000000

Register 0x05 – Value 0X52 – Bits 01010010

Register 0x06 – Value 0X6c – Bits 01101100

Register 0x07 – Value 0X80 – Bits 10000000

Register 0x08 – Value 0X00 – Bits 00000000

Register 0x09 – Value 0X4f – Bits 01001111

Register 0x0a – Value 0X09 – Bits 00001001

Register 0x0b – Value 0X2b – Bits 00101011

Register 0x0c – Value 0X20 – Bits 00100000

Register 0x0d – Value 0X08 – Bits 00001000

Register 0x0e – Value 0X02 – Bits 00000010

Register 0x0f – Value 0X0a – Bits 00001010

Register 0x10 – Value 0Xff – Bits 11111111

Register 0x11 – Value 0X71 – Bits 01110001

Register 0x12 – Value 0X15 – Bits 00010101

Register 0x13 – Value 0X0b – Bits 00001011

Register 0x14 – Value 0X28 – Bits 00101000

Register 0x15 – Value 0X0c – Bits 00001100

Register 0x16 – Value 0X12 – Bits 00010010

Register 0x17 – Value 0X47 – Bits 01000111

Register 0x18 – Value 0X32 – Bits 00110010

Register 0x19 – Value 0X3e – Bits 00111110

Register 0x1a – Value 0X00 – Bits 00000000

Register 0x1b – Value 0X00 – Bits 00000000

Register 0x1c – Value 0X00 – Bits 00000000

Register 0x1d – Value 0X00 – Bits 00000000

Register 0x1e – Value 0X00 – Bits 00000000

Register 0x1f – Value 0X40 – Bits 01000000

Register 0x20 – Value 0X00 – Bits 00000000

Register 0x21 – Value 0X00 – Bits 00000000

Register 0x22 – Value 0X00 – Bits 00000000

Register 0x23 – Value 0X00 – Bits 00000000

Register 0x24 – Value 0X05 – Bits 00000101

Register 0x25 – Value 0X00 – Bits 00000000

Register 0x26 – Value 0X03 – Bits 00000011

Register 0x27 – Value 0X93 – Bits 10010011

Register 0x28 – Value 0X55 – Bits 01010101

Register 0x29 – Value 0X55 – Bits 01010101

Register 0x2a – Value 0X55 – Bits 01010101

Register 0x2b – Value 0X55 – Bits 01010101

Register 0x2c – Value 0X55 – Bits 01010101

Register 0x2d – Value 0X55 – Bits 01010101

Register 0x2e – Value 0X55 – Bits 01010101

Register 0x2f – Value 0X55 – Bits 01010101

Register 0x30 – Value 0X90 – Bits 10010000

Register 0x31 – Value 0X40 – Bits 01000000

Register 0x32 – Value 0X40 – Bits 01000000

Register 0x33 – Value 0X00 – Bits 00000000

Register 0x34 – Value 0X00 – Bits 00000000

Register 0x35 – Value 0X0f – Bits 00001111

Register 0x36 – Value 0X00 – Bits 00000000

Register 0x37 – Value 0X00 – Bits 00000000

Register 0x38 – Value 0X00 – Bits 00000000

Register 0x39 – Value 0Xf5 – Bits 11110101

Register 0x3a – Value 0X20 – Bits 00100000

Register 0x3b – Value 0X82 – Bits 10000010

Register 0x3c – Value 0Xff – Bits 11111111

Register 0x3d – Value 0X02 – Bits 00000010

Register 0x3e – Value 0X80 – Bits 10000000

Register 0x3f – Value 0X40 – Bits 01000000

Register 0x40 – Value 0X00 – Bits 00000000

Register 0x41 – Value 0X00 – Bits 00000000

Register 0x42 – Value 0X12 – Bits 00010010

Register 0x00 – Value 0X00 – Bits 00000000

Register 0x01 – Value 0X09 – Bits 00001001

Register 0x02 – Value 0X1a – Bits 00011010

Register 0x03 – Value 0X0b – Bits 00001011

Register 0x04 – Value 0X00 – Bits 00000000

Register 0x05 – Value 0X52 – Bits 01010010

Register 0x06 – Value 0X6c – Bits 01101100

Register 0x07 – Value 0X80 – Bits 10000000

Register 0x08 – Value 0X00 – Bits 00000000

Register 0x09 – Value 0X4f – Bits 01001111

Register 0x0a – Value 0X09 – Bits 00001001

Register 0x0b – Value 0X2b – Bits 00101011

Register 0x0c – Value 0X20 – Bits 00100000

Register 0x0d – Value 0X08 – Bits 00001000

Register 0x0e – Value 0X02 – Bits 00000010

Register 0x0f – Value 0X0a – Bits 00001010

Register 0x10 – Value 0Xff – Bits 11111111

Register 0x11 – Value 0X71 – Bits 01110001

Register 0x12 – Value 0X15 – Bits 00010101

Register 0x13 – Value 0X0b – Bits 00001011

Register 0x14 – Value 0X28 – Bits 00101000

Register 0x15 – Value 0X0c – Bits 00001100

Register 0x16 – Value 0X12 – Bits 00010010

Register 0x17 – Value 0X47 – Bits 01000111

Register 0x18 – Value 0X32 – Bits 00110010

Register 0x19 – Value 0X3e – Bits 00111110

Register 0x1a – Value 0X00 – Bits 00000000

Register 0x1b – Value 0X00 – Bits 00000000

Register 0x1c – Value 0X00 – Bits 00000000

Register 0x1d – Value 0X00 – Bits 00000000

Register 0x1e – Value 0X00 – Bits 00000000

Register 0x1f – Value 0X40 – Bits 01000000

Register 0x20 – Value 0X00 – Bits 00000000

Register 0x21 – Value 0X00 – Bits 00000000

Register 0x22 – Value 0X00 – Bits 00000000

Register 0x23 – Value 0X00 – Bits 00000000

Register 0x24 – Value 0X05 – Bits 00000101

Register 0x25 – Value 0X00 – Bits 00000000

Register 0x26 – Value 0X03 – Bits 00000011

Register 0x27 – Value 0X93 – Bits 10010011

Register 0x28 – Value 0X55 – Bits 01010101

Register 0x29 – Value 0X55 – Bits 01010101

Register 0x2a – Value 0X55 – Bits 01010101

Register 0x2b – Value 0X55 – Bits 01010101

Register 0x2c – Value 0X55 – Bits 01010101

Register 0x2d – Value 0X55 – Bits 01010101

Register 0x2e – Value 0X55 – Bits 01010101

Register 0x2f – Value 0X55 – Bits 01010101

Register 0x30 – Value 0X90 – Bits 10010000

Register 0x31 – Value 0X40 – Bits 01000000

Register 0x32 – Value 0X40 – Bits 01000000

Register 0x33 – Value 0X00 – Bits 00000000

Register 0x34 – Value 0X00 – Bits 00000000

Register 0x35 – Value 0X0f – Bits 00001111

Register 0x36 – Value 0X00 – Bits 00000000

Register 0x37 – Value 0X00 – Bits 00000000

Register 0x38 – Value 0X00 – Bits 00000000

Register 0x39 – Value 0Xf5 – Bits 11110101

Register 0x3a – Value 0X20 – Bits 00100000

Register 0x3b – Value 0X82 – Bits 10000010

Register 0x3c – Value 0Xff – Bits 11111111

Register 0x3d – Value 0X02 – Bits 00000010

Register 0x3e – Value 0X80 – Bits 10000000

Register 0x3f – Value 0X40 – Bits 01000000

Register 0x40 – Value 0X00 – Bits 00000000

Register 0x41 – Value 0X00 – Bits 00000000

Register 0x42 – Value 0X12 – Bits 00010010

I also started to refactor the code (extracting the Read functionality and format the output in both hexadecimal and binary (convert.ToString in base2 + padleft) to make comparison of register values with the datasheet easier.

The device was not in LoRa mode (Bit 7 of RegOpMode 0x01) so the next step was to read and write registers so I could change its configuration.