|
|
@@ -16,9 +16,18 @@ require"pins"
|
|
|
require "Drv_spi"
|
|
|
require "sx126x_reg"
|
|
|
|
|
|
-local SX126x = sx126x_reg.SX126x_t
|
|
|
+local SX126x = json.encode(sx126x_reg.SX126x_t)
|
|
|
+local SX126xCopy,result,errinfo = json.decode(SX126x)
|
|
|
+SX126x = nil
|
|
|
|
|
|
-SX126xResetGPIO = pins.setup(pio.P0_13,0)
|
|
|
+local RadioPublicNetwork_t = {
|
|
|
+ Previous = false,
|
|
|
+ Current = false
|
|
|
+}
|
|
|
+
|
|
|
+RadioPublicNetwork = nil
|
|
|
+
|
|
|
+-- SX126xResetGPIO = pins.setup(pio.P0_13,0)
|
|
|
OperatingMode = sx126x_reg.RadioStandbyModes_t.STDBY_RC
|
|
|
|
|
|
-- 初始化SPI
|
|
|
@@ -49,7 +58,8 @@ function SX126xWriteCommand(command,buffer)
|
|
|
end
|
|
|
Drv_spi.drv_spi_read_write_byte(command,0)
|
|
|
sys.wait(20)
|
|
|
- Drv_spi.drv_spi_read_write_byte(bufferTotal,0);
|
|
|
+ local ret = Drv_spi.drv_spi_read_write_byte("1d07400000",1);
|
|
|
+ log.info("SX126xWriteCommand",ret)
|
|
|
sys.wait(20)
|
|
|
end
|
|
|
|
|
|
@@ -145,12 +155,82 @@ function SX126xSetLoRaSymbNumTimeout(SymbNum)
|
|
|
SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_LORASYMBTIMEOUT,{SymbNum})
|
|
|
end
|
|
|
|
|
|
+function SX126xSetPacketType(packetType)
|
|
|
+ PacketType = packetType;
|
|
|
+ SX126xWriteCommand( RADIO_SET_PACKETTYPE,{PacketType});
|
|
|
+end
|
|
|
+
|
|
|
+function RadioSetPublicNetwork(enable)
|
|
|
+ SX126xSetPacketType(sx126x_reg.RadioPacketTypes_t.PACKET_TYPE_LORA)
|
|
|
+ if enable == true then
|
|
|
+ SX126xWriteRegister( sx126x_reg.REG_LR_SYNCWORD,"07");
|
|
|
+ SX126xWriteRegister( sx126x_reg.REG_LR_SYNCWORD_LSB,"40");
|
|
|
+ else
|
|
|
+ SX126xWriteRegister( sx126x_reg.REG_LR_SYNCWORD, "07");
|
|
|
+ SX126xWriteRegister( sx126x_reg.REG_LR_SYNCWORD_LSB, "41" );
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+
|
|
|
+function RadioSetModem(modem)
|
|
|
+ if modem == sx126x_reg.RadioModems_t.MODEM_FSK then
|
|
|
+ -- 处理 FSK 调制的逻辑
|
|
|
+ -- SX126xSetPacketType(sx126x_reg.RadioPacketTypes_t.PACKET_TYPE_GFSK)
|
|
|
+ elseif modem == sx126x_reg.RadioModems_t.MODEM_LORA then
|
|
|
+ SX126xSetPacketType(sx126x_reg.RadioPacketTypes_t.PACKET_TYPE_LORA)
|
|
|
+ if RadioPublicNetwork.Current ~= RadioPublicNetwork.Previous then
|
|
|
+ RadioPublicNetwork.Current = RadioPublicNetwork.Previous
|
|
|
+ RadioSetPublicNetwork(RadioPublicNetwork.Current)
|
|
|
+ end
|
|
|
+ else
|
|
|
+ -- 处理未知调制类型的逻辑
|
|
|
+ print("错误:未知的调制类型")
|
|
|
+ end
|
|
|
+end -- 增加了函数结束标记
|
|
|
+
|
|
|
+function SX126xSetModulationParams(modulationParams)
|
|
|
+ buf = {modulationParams.Params.LoRa.SpreadingFactor, modulationParams.Params.LoRa.Bandwidth,modulationParams.Params.LoRa.CodingRate, modulationParams.Params.LoRa.CodingRate}
|
|
|
+ SX126xWriteCommand( sx126x_reg.RADIO_SET_MODULATIONPARAMS);
|
|
|
+end
|
|
|
+
|
|
|
+
|
|
|
+function SX126xSetPacketParams(packetParams)
|
|
|
+ buf = { packetParams.Params.LoRa.PreambleLength,
|
|
|
+ packetParams.Params.LoRa.HeaderType,
|
|
|
+ packetParams.Params.LoRa.PayloadLength,
|
|
|
+ packetParams.Params.LoRa.CrcMode,
|
|
|
+ packetParams.Params.LoRa.InvertIQ}
|
|
|
+ SX126xWriteCommand(sx126x_reg.RADIO_SET_PACKETPARAMS,buf);
|
|
|
+end
|
|
|
+
|
|
|
function RadioSetTxConfig(modem,power,fdev,bandwidth,datarate,coderate,preambleLen,fixLen,crcOn,freqHopOn,hopPeriod,iqInverted,timeout)
|
|
|
SX126xSetStopRxTimerOnPreambleDetect(false)
|
|
|
SX126xSetLoRaSymbNumTimeout(0)
|
|
|
- -- local test = sx126x_reg.SX126x_t
|
|
|
+ SX126xCopy.ModulationParams.PacketType = sx126x_reg.PacketType_t.PACKET_TYPE_LORA
|
|
|
+ SX126xCopy.ModulationParams.Params.LoRa.SpreadingFactor = datarate
|
|
|
+ SX126xCopy.ModulationParams.Params.LoRa.Bandwidth = sx126x_reg.Bandwidths[bandwidth]
|
|
|
+ SX126xCopy.ModulationParams.Params.LoRa.CodingRate= coderate
|
|
|
+
|
|
|
+ if ( (bandwidth == 0) and ( (datarate == 11) or (datarate == 12) ) ) or ( (bandwidth == 1) and (datarate == 12) ) then
|
|
|
+ SX126xCopy.ModulationParams.Params.LoRa.LowDatarateOptimize = 0x01
|
|
|
+ else
|
|
|
+ SX126xCopy.ModulationParams.Params.LoRa.LowDatarateOptimize = 0x00
|
|
|
+ end
|
|
|
+
|
|
|
+ SX126xCopy.PacketParams.PacketType = sx126x_reg.PacketType_t.PACKET_TYPE_LORA
|
|
|
+
|
|
|
+ SX126xCopy.PacketParams.Params.LoRa.PreambleLength = preambleLen
|
|
|
+
|
|
|
+ SX126xCopy.PacketParams.Params.LoRa.HeaderType = fixLen
|
|
|
+ SX126xCopy.PacketParams.Params.LoRa.PayloadLength = MaxPayloadLength
|
|
|
+ SX126xCopy.PacketParams.Params.LoRa.CrcMode = crcOn
|
|
|
+ SX126xCopy.PacketParams.Params.LoRa.InvertIQ = iqInverted
|
|
|
|
|
|
- -- test.ModulationParams_t.RadioPacketTypes_t = sx126x_reg.RadioPacketTypes_t;
|
|
|
+ SX126xSetStandby({sx126x_reg.RadioStandbyModes_t.STDBY_RC})
|
|
|
+ RadioSetModem(1)
|
|
|
+ SX126xSetModulationParams(SX126xCopy.ModulationParams)
|
|
|
+ SX126xSetPacketParams(SX126xCopy.PacketParams)
|
|
|
+ SX126xSetTxParams(power,sx126x_reg.RADIO_RAMP_40_US)
|
|
|
end
|
|
|
|
|
|
-- 初始化SX126x
|
|
|
@@ -158,12 +238,12 @@ function SX126xInit()
|
|
|
SX126xIoInit()
|
|
|
SX126xReset()
|
|
|
SX126xWakeup()
|
|
|
- local table = {sx126x_reg.RadioStandbyModes_t.STDBY_RC}
|
|
|
- SX126xSetStandby(table)
|
|
|
+ -- local table = {sx126x_reg.RadioStandbyModes_t.STDBY_RC}
|
|
|
+ SX126xSetStandby({sx126x_reg.RadioStandbyModes_t.STDBY_RC})
|
|
|
local table1 = {sx126x_reg.RadioStandbyModes_t.USE_DCDC}
|
|
|
SX126xSetRegulatorMode(table1)
|
|
|
SX126xSetBufferBaseAddress("00","00")
|
|
|
- SX126xSetTxParams( 0, RADIO_RAMP_200_US )
|
|
|
+ SX126xSetTxParams( 0, sx126x_reg.RADIO_RAMP_200_US )
|
|
|
SX126xSetDioIrqParams( IRQ_RADIO_ALL, IRQ_RADIO_ALL, IRQ_RADIO_NONE, IRQ_RADIO_NONE )
|
|
|
|
|
|
local table2 = {sx126x_reg.RadioStandbyModes_t.STDBY_RC}
|
|
|
@@ -219,18 +299,30 @@ end
|
|
|
-- end)
|
|
|
|
|
|
|
|
|
---测试案例:测试初始化
|
|
|
-sys.taskInit(function ()
|
|
|
- sys.wait(3000)
|
|
|
- -- SX126xInit()
|
|
|
- sys.wait(3000)
|
|
|
+--测试案例:测试配置索引SX126xCopy.ModulationParams.PacketType = sx126x_reg.RadioPacketTypes_t.PACKET_TYPE_LORA
|
|
|
+-- sys.taskInit(function ()
|
|
|
+-- sys.wait(3000)
|
|
|
+-- -- SX126xInit()
|
|
|
+-- sys.wait(3000)
|
|
|
+-- log.info("计算结果", SX126xCopy.ModulationParams.PacketType)
|
|
|
+-- SX126xCopy.ModulationParams.PacketType = sx126x_reg.RadioPacketTypes_t.PACKET_TYPE_LORA
|
|
|
+-- log.info("计算结果", SX126xCopy.ModulationParams.PacketType)
|
|
|
|
|
|
- SX126x.ModulationParams.PacketType = sx126x_reg.PACKET_TYPE_LORA;
|
|
|
+-- log.info("计算结果", "测试1")
|
|
|
+-- end)
|
|
|
|
|
|
- log.info("计算结果", SX126x.)
|
|
|
|
|
|
- log.info("计算结果", "测试1")
|
|
|
-end)
|
|
|
+--测试案例:测试添加table元素。仿造C语言中的枚举
|
|
|
+-- sys.taskInit(function ()
|
|
|
+-- sys.wait(3000)
|
|
|
+-- -- SX126xInit()
|
|
|
+-- sys.wait(3000)
|
|
|
+-- SX126x.test = "nihao"
|
|
|
+-- local jsondata = json.encode(SX126x)
|
|
|
+-- log.info("testJson.encode",jsondata)
|
|
|
+
|
|
|
+-- log.info("计算结果", "测试1")
|
|
|
+-- end)
|
|
|
|
|
|
|
|
|
-- --测试案例:拼接buffer
|
|
|
@@ -277,12 +369,31 @@ end)
|
|
|
-- torigin_gson.KEY1 = "VALUE1_1"
|
|
|
-- log.info("源数据",json.encode(torigin))
|
|
|
-- log.info("源数据复制",json.encode(torigin_gson))
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
|
|
|
+local result = spi.setup(spi.SPI_1,0,0,8,100000,1)--初始化spi,
|
|
|
+log.info("spi1",spi.SPI_1)
|
|
|
+log.info("testSpiFlash.init",result)
|
|
|
+local s = string.fromHex("1D0740000000")
|
|
|
|
|
|
+sys.taskInit(function ()
|
|
|
+ sys.wait(5000)
|
|
|
+ while true do
|
|
|
+ -- log.info("testSpiFlash.readFlashID",spi.send_recv(spi.SPI_1,s):toHex())--收发读写
|
|
|
+
|
|
|
+ --下面方法和上面的等价
|
|
|
+ -- spi.send(spi.SPI_1,string.char(0x1d,0x07,0x40,0x00,0x00,0x00))
|
|
|
+ -- sys.wait(5)
|
|
|
+ -- log.info("testSpiFlash.readFlashID",spi.recv(spi.SPI_1,8):toHex())--收数据
|
|
|
+
|
|
|
+ -- local ret = Drv_spi.drv_spi_read_write_byte("1D",1)
|
|
|
+ -- log.info("testSpiFlash.readFlashID",ret)
|
|
|
+ -- sys.wait(20)
|
|
|
+ -- local ret = Drv_spi.drv_spi_read_write_byte("07400000",1)
|
|
|
+ -- log.info("testSpiFlash.readFlashID",ret)
|
|
|
+
|
|
|
+ SX126xWriteCommand("1d",{"0740"})
|
|
|
+ sys.wait(2000)
|
|
|
+ end
|
|
|
+ spi.close(spi.SPI_1)
|
|
|
+end)
|
|
|
|
|
|
--- log.info("计算结果", "测试1")
|
|
|
--- end)
|