The Application Layer (left) of our Driver exposes LoRaWAN Functions to Application Firmware ... Join Network, Open/Close Port, Transmit/Receive Packets

github.com/lupyuen/bl_iot_sdk/

Show thread

The Node Layer (centre) in our Driver handles the networking operations for our BL602 LoRaWAN Node ... It's called by the Application Layer (left)

github.com/lupyuen/bl_iot_sdk/

Show thread

Semtech Stack is structured according to IEEE 802.15.4 ... Yep LoRaWAN shares the same legacy as Thread, Zigbee and 6LoWPAN! We shall port this Legacy to

en.wikipedia.org/wiki/IEEE_802

Show thread

The Medium Access Control Layer (right) of our Driver implements the LoRaWAN Protocol: Encryption, Receive Window, Duty Cycle, ... It exposes the MCPS Messaging Interface (IEEE 802.15.4) to the Node Layer (centre) via an Event Queue

github.com/lupyuen/bl_iot_sdk/

Show thread

Curiously, our Driver includes a Command-Line Interface (bottom) that Transmits and Receives LoRa Packets ... Directly calling the SX1276 Driver 🤔

github.com/lupyuen/bl_iot_sdk/

Show thread

What's an Mbuf? Why is it used by our Driver? Mbufs are Chains of Fixed-Size Blocks ... Works great with little RAM (no fragmentation) ... Created for BSD Unix in 1983!

mynewt.apache.org/latest/os/co

Show thread

...Which explains why so many folks at STMicro are now reading this Thread

😉

Show thread

on RAKwireless can generate random Application Keys for Over-The-Air Activation (OTAA) ... We shall use keys to activate our and devices wirelessly

thethingsindustries.com/docs/d

Show thread

Something (or Someone) is transmitting Packets every minute ... Signal Strength (RSSI) shows that they're a few hundred metres away

gist.github.com/lupyuen/8dacf0

Show thread

Someday I might walk around with RAKwireless to find the Mystery Transmitter ... But for now let's test WisGate with WisBlock and BL602!

docs.rakwireless.com/Product-C

Show thread

After transmitting a packet, a Device () will open a short "Receive Window" ... To receive a Response Packet (if any) from the LoRaWAN Gateway ()

github.com/lupyuen/wisblock-lo

Show thread

When hunts for the next Frequency Channel to transmit (Spread Spectrum) ... It listens to the airwaves to check whether the channel is in use ... Let's find out whether BL602 is doing Carrier Sensing correctly 🤔

github.com/lupyuen/bl_iot_sdk/

Show thread

Oops Mynewt's Carrier Sensing implementation is outdated ... Semtech's LoRaWAN Reference Implementation does NOT require Carrier Sensing outside Japan and South Korea ... So we disable Carrier Sensing and use a random LoRa Frequency Channel

github.com/lupyuen/bl_iot_sdk/

Show thread

After disabling Carrier Sensing ... hits an Exception while transmitting the Join Network Request ... Let's lookup these addresses in the RISC-V Disassembly

github.com/lupyuen/bl_iot_sdk/

Show thread

According to our RISC-V Disassembly, Driver hits a Null Pointer Exception here ... Seems like non-essential logging code ... So let's disable this code

github.com/lupyuen/bl_iot_sdk/

Show thread

is now transmitting the Join Network Request ... But doesn't receive any response from our LoRaWAN Gateway (WisGate) ... Let's check the WisGate LoRaWAN Log

github.com/lupyuen/bl_iot_sdk/

Show thread

Sadly our Gateway didn't receive any LoRaWAN Packets transmitted by ... Let's look inside the transmitted packets ... And verify the transmission with Airspy SDR

github.com/lupyuen/bl_iot_sdk/

Show thread
Show more

@lupyuen
You rock Prof. If You needed adopting clang or fixing that 1bytedma transfers i got some spare resources.

Sign in to participate in the conversation
Qoto Mastodon

QOTO: Question Others to Teach Ourselves
An inclusive, Academic Freedom, instance
All cultures welcome.
Hate speech and harassment strictly forbidden.