#LoRaWAN Receive Windows are explained in the LoRaWAN Specs
https://lora-alliance.org/resource_hub/lorawan-104-specification-package/
#BL602 tries to join the #LoRaWAN Network ... But no Join Request gets transmitted to WisGate 🤔
https://github.com/lupyuen/bl_iot_sdk/tree/lorawan/customer_app/sdk_app_lorawan#lorawan-commands
Oops Mynewt's #LoRaWAN 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
After disabling #LoRaWAN Carrier Sensing ... #BL602 hits an Exception while transmitting the Join Network Request ... Let's lookup these addresses in the RISC-V Disassembly
https://github.com/lupyuen/bl_iot_sdk/tree/lorawan/customer_app/sdk_app_lorawan#output-log
#BL602 is now transmitting the #LoRaWAN Join Network Request ... But doesn't receive any response from our LoRaWAN Gateway (WisGate) ... Let's check the WisGate LoRaWAN Log
https://github.com/lupyuen/bl_iot_sdk/tree/lorawan/customer_app/sdk_app_lorawan#output-log
#WisGate #ChirpStack you're so funny ... I'm nowhere near Chinese Garden, Japanese Garden and Jurong Bird Park 😂
Sadly our #WisGate #LoRaWAN Gateway didn't receive any LoRaWAN Packets transmitted by #BL602 ... Let's look inside the transmitted packets ... And verify the transmission with Airspy SDR
https://github.com/lupyuen/bl_iot_sdk/tree/lorawan/customer_app/sdk_app_lorawan#output-log
Airspy SDR verifies that #BL602 is indeed transmitting the Join #LoRaWAN Network packet ... Maybe it contains garbage 🤔
https://github.com/lupyuen/bl_iot_sdk/tree/lorawan/customer_app/sdk_app_lorawan#output-log
Here's the "Join Network" #LoRaWAN Packet transmitted by #BL602 ... Does this look right? 🤔 Let's compare with WisBlock
https://github.com/lupyuen/bl_iot_sdk/tree/lorawan/customer_app/sdk_app_lorawan#output-log
#LoRaWAN "Join Network" Packet transmitted by #WisBlock ... Looks similar to the one transmitted by BL602 ... Nonce and Message Integrity Code will differ of course
https://github.com/lupyuen/wisblock-lorawan/blob/master/README.md#output-log
#LoRaWAN Packet: #BL602 vs #WisBlock ... Seems BL602 is transmitting at Lower Power than WisBlock ... Let's check the Power Amplifier settings 🤔
https://github.com/lupyuen/bl_iot_sdk/tree/lorawan/customer_app/sdk_app_lorawan#output-log
#BL602 vs #WisBlock: Join #LoRaWAN Network Request ... Let's check the Nonce and Message Integrity Code ... Wonder if we can retransmit the BL602 packet from WisBlock 🤔
https://github.com/lupyuen/bl_iot_sdk/tree/lorawan/customer_app/sdk_app_lorawan#output-log
Let's copy the Join #LoRaWAN Network Request generated by #BL602 ... And retransmit with #WisBlock ... Surprise: the Join Request succeeds! 😲 Which proves the Nonce and Message Integrity Code are OK ... Probably the BL602 Power Amplifier setting is wrong 🤔
https://github.com/lupyuen/bl_iot_sdk/tree/lorawan/customer_app/sdk_app_lorawan#output-log
But wait: Will #LoRaWAN allow replayed "Join Network" Requests? 😲 Nope it doesn't! #WisGate #ChirpStack will reject Replayed Requests because the Nonce needs to be unique ... Here's how we find Nonce Errors in RAKwireless WisGate
Taking a short BL602 break ... To write about everything I've done with #RAKwireless #WisGate
https://docs.rakwireless.com/Product-Categories/WisGate/RAK7244C/Quickstart/
#WisGate #LoRaWAN Gateway receives LoRaWAN Data Packet from #BL602 yay! 🎉
https://github.com/lupyuen/bl_iot_sdk/blob/lorawan/customer_app/sdk_app_lorawan/README.md#output-log
We should always select "Public LoRa Network" (instead of Private) ... So that our #BL602 #LoRaWAN Driver will transmit Public Sync Word 0x3444 (instead of 0x1424) ... Duh! 🙄
https://github.com/lupyuen/bl_iot_sdk/blob/lorawan/customer_app/sdk_app_lorawan/Makefile#L66-L69
#LoRa Concentrator Doc made me wonder ... Could our #LoRaWAN Gateway be dropping packets from #BL602 because we sent the wrong Sync Word? Yep indeed!
https://github.com/Lora-net/sx1302_hal/tree/master/libloragw#61-spreading-factor-sf5--sf6
#BL602 transmits a packet to #LoRaWAN Gateway and receives the response ... Why is BL602 transmitting at Lower Power, when the Power Amplifier is enabled? 🤔
https://github.com/lupyuen/bl_iot_sdk/blob/lorawan/customer_app/sdk_app_lorawan/README.md#output-log
Here's how we connect #PineCone #BL602 @PINE64 to Pine64 RFM90 #LoRa Module
https://lupyuen.github.io/articles/lorawan?3#connect-bl602-to-lora-module
Magical Pin DIO1 on RFM90 #LoRa Module @PINE64
https://lupyuen.github.io/articles/lorawan?4#connect-bl602-to-lora-module
Let's dive into the #BL602 Drivers for #LoRa and #LoRaWAN
https://lupyuen.github.io/articles/lorawan?8#lora-transceiver-driver
#LoRa SX1262 Driver for #BL602 ... How it works
https://lupyuen.github.io/articles/lorawan?9#lora-transceiver-driver
#LoRaWAN handles these parameters automatically ... But if we ever need to call the #BL602 LoRa Driver directly, here are the parameters
https://lupyuen.github.io/articles/lorawan?14#configure-lora-transceiver
How we init the #BL602 #LoRa Driver for SX1262 / RFM90
https://lupyuen.github.io/articles/lorawan?15#initialise-lora-transceiver
Receiving a #LoRa Packet with #BL602 Driver for SX1262 / RFM90 ... Which will become simpler with LoRaWAN
https://lupyuen.github.io/articles/lorawan?17#receive-lora-packet
#BL602 #LoRaWAN Driver sends Join Network Request ... Durian not included 😂
https://lupyuen.github.io/articles/lorawan?23#join-network-request
How our #BL602 #LoRaWAN Driver handles the Join Network Response
https://lupyuen.github.io/articles/lorawan?26#join-network-response
How our #BL602 #LoRaWAN Driver opens an Application Port
https://lupyuen.github.io/articles/lorawan?28#open-lorawan-port
How our #BL602 #LoRaWAN Driver transmits data packets
https://lupyuen.github.io/articles/lorawan?31#transmit-data-packet
Here's how we Build and Flash the #BL602 Firmware for #LoRaWAN
https://lupyuen.github.io/articles/lorawan?32#build-and-run-the-bl602-lorawan-firmware
How we run the #BL602 #LoRaWAN Firmware ... To join a network and send a data packet
https://lupyuen.github.io/articles/lorawan?34#enter-lorawan-commands
Here's how we troubleshoot #BL602 #LoRaWAN issues
https://lupyuen.github.io/articles/lorawan?37#troubleshoot-lorawan
#BL602 with #LoRa RFM90 seems to be transmitting with Lower Power ... Would be great if you could help me understand why 🙏
https://lupyuen.github.io/articles/lorawan?38#appendix-lora-transmit-power
Why the #LoRa Sync Word matters for our #BL602 #LoRaWAN Driver
https://lupyuen.github.io/articles/lorawan?38#appendix-lora-sync-word
3 #LoRaWAN Stacks ... 3 different implementations of Carrier Sensing ... My apologies to #BL602 Fans in Japan and South Korea 🙏
https://lupyuen.github.io/articles/lorawan?41#appendix-lora-carrier-sensing
#LoRaWAN AS923 Region Settings look different across the 3 LoRaWAN Stacks 🤔
https://lupyuen.github.io/articles/lorawan?41#appendix-lora-carrier-sensing
How our #BL602 #LoRaWAN Driver uses Packet Buffers from the Lightweight IP Stack (LWIP)
https://lupyuen.github.io/articles/lorawan?45#appendix-packet-buffer-and-queue
Packet Buffer Queues in our #BL602 #LoRaWAN Driver
https://lupyuen.github.io/articles/lorawan?46#packet-buffer-queue
How our #BL602 #LoRaWAN Driver calls the BL602 SPI Hardware Abstraction Layer
https://lupyuen.github.io/articles/lorawan?47#appendix-bl602-spi-functions
RFM90 / SX1262 triggers a GPIO Interrupt when it receives a #LoRa Packet ... Here's how #BL602 handles the GPIO Interrupt
https://lupyuen.github.io/articles/lorawan?48#appendix-bl602-gpio-interrupts
#BL602 #LoRaWAN Driver has Layers ... Like Onions and Shrek 😂
https://lupyuen.github.io/articles/lorawan?20#lorawan-driver