lnlp / LMIC-node

LMIC-node | One example to rule them all. LMIC-node is an example LoRaWAN application for a node that can be used with The Things Network. It demonstrates how to send uplink messages, how to receive downlink messages, how to implement a downlink command and it provides useful status information. With LMIC-node it is easy to get a working node quickly up and running. LMIC-node supports many popular (LoRa) development boards out of the box. It uses the Arduino framework, the LMIC LoRaWAN library and PlatformIO.
MIT License
223 stars 102 forks source link

How to change Pico SPI channel? #40

Closed BNNorman closed 2 years ago

BNNorman commented 2 years ago

I have an iLabs Challenger RP2040 Lora (SX1276).

From what I can tell it uses the second SPI channel to talk to the RFM95W. I have found the pin outs from the schematic for the board (see diagram). That's the relatively easy bit.

How can I tell LMIC-node to use spi1 instead of spi0.

Thanks for any help.

Challenger schematic d

lnlp commented 2 years ago

LMIC-node uses the LMIC library for LoRaWAN support. As far as I'm aware LMIC can only use the default SPI port (the instance named SPI). In order to make LMIC use the second SPI port the pins for the default SPI instance will have to be redefined.

How this can be done is hardware and (in this case MBED) Arduino core dependent. The ESP32 Arduino core allows SPI pins to be (re)defined via parameters in SPI.begin(). Other cores support methods like SPI.setMOSI(), SPI.setMISO() etc. The standard Arduino core for the Pico does not provide any of these.

The IO pin mapping on the Pico appears to be very flexible so there should be some way to redefine the IO pins used for the standard SPI instance but I don't know how. I haven't looked into this.

For an example of how to use different pins for SPI with LMIC-node see BSF bsf_disco_l072cz_lrwan1.h. This uses methods that are not supported by the standard Arduino core for the Pico but it at least gives an example where in LMIC-node code the SPI pins will have to be (re)mapped.

You could ask iLabs for how to remap the pins for the standard SPI instance when using the Arduino framework.

BNNorman commented 2 years ago

Thank you for your reply. Very helpful. I'll do more digging.