
上面的DIO maping 看懂就比较好理解了,DIO0,DIO1,DIO3,
发送和接收都可以触发中断,cad模式需要使用CADDetected和CADDone。
CADDetected这个中断就是有数据接收了,触发进入接收模式,前导码个数的计算还是比较简单的。

从上图可以看出,若要可靠唤醒
WOR
,发送包的前导码必须大于
T1+2*T2 才能可靠唤醒。
TS=2^SF/BW 这个值是一个字节传输所用的时间,发送前导码的个数对应的的时间要不小于T1+2*T2才能唤醒。
举个例子:SF=9,BW=125K,传输一个码元的时间就是TS=2^SF/BW=2^9/125K=4.1ms/symb,
睡眠时间加上CAD时间除以单个码元的时间就是合理的前导码长度,这个长度在一个周期内足以唤醒模块。就是发包的时间有点久。
lora_write(0x20,0x03)--前导码长度
lora_write(0x21,0xec)--前导码长度
lora_write(0x21,0xec)--前导码长度
目前使用2017年在stm32平台开发的lora dtu,现在移植到lua 的平台。
想要实现实时通信,可以借助运营商基站工作原理(通信原理),蜂窝通信,一回事,使用一组公共信道(收发上行和下行,注册使用),然后从机使用公共信道注册,rssi符合要求,分配一组上行和下行信道给其使用。
local lora = {}
local sys = require "sys"
local spiId = 2
local _nss=13
local _dio0=8
local _dio1=4
local _dio3=5
local MC1={
BW125=0x70,
BW250=0x80,
BW500=0x90,
BW150=0x00
}
local MC2={
FSK=0x00,
SF6=0x60,
SF7=0x70,
SF8=0x80,
SF9=0x90,
SF10=0xA0,
SF11=0xB0,
SF12=0xC0
}
-- MC1["4/5"]=0x02
-- MC1["4/6"]=0x04
-- MC1["4/7"]=0x06
-- MC1["4/8"]=0x08
local _freq=470000000
local _bw=MC1.BW125
local _sf=MC2.SF9
local cspin = gpio.setup(_nss, 1)
local rst = gpio.setup(9, 1)
--收发数据
local function sendRecv(data,len)
local r = ""
cspin(0)
if da

本文详细介绍了LoRa无线通信模块的配置,包括DIO映射、前导码长度设置、CAD模式以及中断处理。通过DIO0、DIO1和DIO3的中断函数,实现接收数据和CAD检测。代码示例展示了如何在STM32平台上初始化LoRa模块,设置接收和发送模式,并利用CAD检测进行低功耗操作。此外,还涉及了频率设置、数据速率配置以及实时通信的概念。

3万+

被折叠的 条评论
为什么被折叠?



