From 211e3ba366a028e4e9a5918c5f77a9c02a8fb4ae Mon Sep 17 00:00:00 2001 From: soypat Date: Wed, 7 Jun 2023 22:51:02 -0300 Subject: [PATCH] finish init bare --- sx127x/barebones.go | 38 ++++++++++++++++++++++++++++++++++++++ sx127x/registers.go | 22 +++++++++++++++++++--- sx127x/sx127x.go | 18 ++++++++++++++++++ 3 files changed, 75 insertions(+), 3 deletions(-) diff --git a/sx127x/barebones.go b/sx127x/barebones.go index fed2583..2ff5398 100644 --- a/sx127x/barebones.go +++ b/sx127x/barebones.go @@ -24,6 +24,18 @@ func (d *DeviceLoRaBare) Configure(c lora.Config) (err error) { return err } + for _, irv := range initRegValues { + err = d.setModem(irv.modem) + if err != nil { + return err + } + err = d.DL.Write8(irv.addr, irv.val) + if err != nil { + return err + } + } + return d.setModem(modeFSK) + // Set up FIFO // We configure so that we can use the entire 256 byte FIFO for either receive // or transmit, but not both at the same time @@ -119,3 +131,29 @@ func (d *DeviceLoRaBare) Read(addr uint8) uint8 { val, _ := d.DL.read8(addr) return val } + +const modeFSK, modeLoRa = 0, 1 + +var initRegValues = []struct { + modem uint8 + addr uint8 + val uint8 +}{ + {modeFSK, regLNA, 0x23}, + {modeFSK, regRXConfig, 0x1E}, + {modeFSK, regRSSIConfig, 0xD2}, + {modeFSK, regAFCFEI, 0x01}, + {modeFSK, regPreambleDetect, 0xAA}, + {modeFSK, regOsc, 0x07}, + {modeFSK, regSyncConfig, 0x12}, + {modeFSK, regSyncValue1, 0xC1}, + {modeFSK, regSyncValue2, 0x94}, + {modeFSK, regSyncValue3, 0xC1}, + {modeFSK, regPacketConfig1, 0xD8}, + {modeFSK, regFifoThresh, 0x8F}, + {modeFSK, regImageCal, 0x02}, + {modeFSK, regDIO_MAPPING_1, 0x00}, + {modeFSK, regDIO_MAPPING_2, 0x30}, + {modeLoRa, regDETECTION_OPTIMIZE, 0x43}, + {modeLoRa, regMAX_PAYLOAD_LENGTH, 0x40}, +} diff --git a/sx127x/registers.go b/sx127x/registers.go index 9489075..eb79a92 100644 --- a/sx127x/registers.go +++ b/sx127x/registers.go @@ -160,13 +160,29 @@ const ( // FSK/OOK registers. const ( - regImageCal = 0x3b - regTemp = 0x3c - + regImageCal = 0x3b + regTemp = 0x3c + regRXConfig = 0x0D + regRSSIConfig = 0x0E + regAFCFEI = 0x1a + regPreambleDetect = 0x1f + regOsc = 0x24 + regSyncConfig = 0x27 + regSyncValue1 = 0x28 + regSyncValue2 = 0x29 + regSyncValue3 = 0x2A + regSyncValue4 = 0x2B + regSyncValue5 = 0x2C + regSyncValue6 = 0x2D + regSyncValue7 = 0x2E + regSyncValue8 = 0x2F + regPacketConfig1 = 0x30 + regFifoThresh = 0x35 // Values that would be read from regTemp: lowTempVal uint8 = 64 // -40 C medTempVal uint8 = 245 // +25 C hiTempVal uint8 = 181 // +85 C + ) var bandwidths = [bw500_0 + 1]lora.Frequency{ diff --git a/sx127x/sx127x.go b/sx127x/sx127x.go index a0033d3..08530ef 100644 --- a/sx127x/sx127x.go +++ b/sx127x/sx127x.go @@ -1170,3 +1170,21 @@ func (d *DeviceLoRa) imageCal(deadline time.Time) error { } return nil } + +func (d *DeviceLoRaBare) setModem(mode uint8) error { + d.SetOpModeBare(OpSleep) + const loramask uint8 = 0x7f + switch mode { + case modeFSK: + d.DL.writeMasked8(regOP_MODE, ^loramask, 0) + d.DL.Write8(regDIO_MAPPING_1, 0) + d.DL.Write8(regDIO_MAPPING_2, 0x30) + case modeLoRa: + d.DL.writeMasked8(regOP_MODE, (^loramask)|uint8(opLoRaBit), byte(opLoRaBit)) + d.DL.Write8(regDIO_MAPPING_1, 0) + d.DL.Write8(regDIO_MAPPING_2, 0) + default: + return errors.New("invalid modem") + } + return nil +}