xuxinyi 4 månader sedan
förälder
incheckning
53b346ed1d
3 ändrade filer med 93 tillägg och 171 borttagningar
  1. 1 1
      drv_periph/Drv_spi.lua
  2. 68 167
      drv_periph/sx126x_driver.lua
  3. 24 3
      drv_periph/sx126x_reg.lua

+ 1 - 1
drv_periph/Drv_spi.lua

@@ -32,7 +32,7 @@ end
 ]]
 function drv_spi_read_write_byte(txDat,size)
     local ret = spi.send_recv(spi.SPI_1,string.fromHex(txDat)):toHex()
-    -- log.info("spi_read_write_byte",ret)
+    log.info("spi_read_write_byte",ret)
     if size == nil or size == 0 then
         return 0
     else

+ 68 - 167
drv_periph/sx126x_driver.lua

@@ -25,9 +25,9 @@ local RadioPublicNetwork_t = {
     Current  = false
 }
 
-RadioPublicNetwork = nil
+RadioPublicNetwork = RadioPublicNetwork_t
 
--- SX126xResetGPIO = pins.setup(pio.P0_13,0)
+SX126xResetGPIO = pins.setup(pio.P0_13,0)
 OperatingMode = sx126x_reg.RadioStandbyModes_t.STDBY_RC
 
 -- 初始化SPI
@@ -66,6 +66,7 @@ function SX126xWriteCommand(command,buffer)
 end
 
 function SX126xReadCommand(command,size)
+    Drv_spi.drv_spi_read_write_byte(command,0)
     for i = 1, size do
         command = command .. "00"
     end
@@ -118,7 +119,7 @@ end
 
 
 function SX126xSetStandby(standbyConfig)
-    SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_STANDBY,standbyConfig)
+    SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_STANDBY,{standbyConfig})
 
     if standbyConfig[0] == sx126x_reg.RadioStandbyModes_t.STDBY_RC then
         OperatingMode = sx126x_reg.RadioOperatingModes_t.STDBY_RC
@@ -128,7 +129,7 @@ function SX126xSetStandby(standbyConfig)
 end
 
 function SX126xSetRegulatorMode(mode)
-    SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_REGULATORMODE,mode)
+    SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_REGULATORMODE,{mode})
 end
 
 function SX126xSetBufferBaseAddress(txBaseAddress, rxBaseAddress)
@@ -139,23 +140,32 @@ end
 function SX126xSetPaConfig(paDutyCycle,hpMax,deviceSel,paLut)
     local buf = {paDutyCycle,hpMax,deviceSel,paLut}
     -- log.info("SX126xSetPaConfig",buf)
-    SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_PACONFIG,buf)
+    SX126xWriteCommand("95",buf)
 end
 
 function SX126xSetTxParams(power, rampTime)
     local buf = {power,rampTime}
     SX126xSetPaConfig("04","07","00","01")
-    SX126xWriteRegister( sx126x_reg.REG_OCP, "38" ); 
+SX126xWriteRegister( sx126x_reg.REG_OCP, {"38"} ); 
     SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_TXPARAMS,buf)
 
 end
 
-function SX126xSetDioIrqParams(timeout, freq, rfChain, power, preambleLen)
+function SX126xSetDioIrqParams2222(timeout, freq, rfChain, power, preambleLen)
     local buf = {timeout, freq, rfChain, power, preambleLen}
     SX126xSetTxParams(power, sx126x_reg.RadioRampTimes_t.RADIO_RAMP_40_US)
     SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_TX,buf)
 end
 
+
+function SX126xSetDioIrqParams(irqMask, dio1Mask, dio2Mask, dio3Mask )
+    local buf = {"02","01","02","01","00","00","00","00"}
+    buf[2] = irqMask
+    buf[4] = irqMask
+    SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_CFG_DIOIRQ,buf)
+end
+
+
 function SX126xSetStopRxTimerOnPreambleDetect(enable)
     SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_STOPRXTIMERONPREAMBLE,{enable})
 end
@@ -166,17 +176,17 @@ end
 
 function SX126xSetPacketType(packetType)
     PacketType = packetType;
-    SX126xWriteCommand( RADIO_SET_PACKETTYPE,{PacketType});
+    SX126xWriteCommand( sx126x_reg.RadioCommands.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");
+        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" );
+        SX126xWriteRegister( sx126x_reg.REG_LR_SYNCWORD, {"07"});
+        SX126xWriteRegister( sx126x_reg.REG_LR_SYNCWORD_LSB, {"41"} );
     end
 end
 
@@ -198,8 +208,14 @@ function RadioSetModem(modem)
 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);
+    buf = {modulationParams.Params.LoRa.SpreadingFactor, 
+    modulationParams.Params.LoRa.Bandwidth,
+    modulationParams.Params.LoRa.CodingRate, 
+    modulationParams.Params.LoRa.LowDatarateOptimize
+    }
+    local jsondata = json.encode(buf)
+log.info("testJson.encode",jsondata)
+    SX126xWriteCommand( sx126x_reg.RadioCommands.RADIO_SET_MODULATIONPARAMS,buf);
 end
 
 
@@ -209,24 +225,27 @@ function SX126xSetPacketParams(packetParams)
             packetParams.Params.LoRa.PayloadLength, 
             packetParams.Params.LoRa.CrcMode, 
             packetParams.Params.LoRa.InvertIQ}
-    SX126xWriteCommand(sx126x_reg.RADIO_SET_PACKETPARAMS,buf);
+    local jsondata = json.encode(buf)
+    log.info("testJson.encode",jsondata)
+    SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_PACKETPARAMS,buf);
 end
 
 function RadioSetTxConfig(modem,power,fdev,bandwidth,datarate,coderate,preambleLen,fixLen,crcOn,freqHopOn,hopPeriod,iqInverted,timeout)
-    SX126xSetStopRxTimerOnPreambleDetect(false)
-    SX126xSetLoRaSymbNumTimeout(0)
-    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]
+    SX126xSetStopRxTimerOnPreambleDetect("00")  -- = flase
+    SX126xSetLoRaSymbNumTimeout("00")
+    SX126xCopy.ModulationParams.PacketType = sx126x_reg.RadioPacketTypes_t.PACKET_TYPE_LORA
+	SX126xCopy.ModulationParams.Params.LoRa.SpreadingFactor = "0b"
+	SX126xCopy.ModulationParams.Params.LoRa.Bandwidth =  "06"
 	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
+    -- 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.ModulationParams.Params.LoRa.LowDatarateOptimize = "00"
 
-    SX126xCopy.PacketParams.PacketType = sx126x_reg.PacketType_t.PACKET_TYPE_LORA
+    SX126xCopy.PacketParams.PacketType = sx126x_reg.RadioPacketTypes_t.PACKET_TYPE_LORA
 
     SX126xCopy.PacketParams.Params.LoRa.PreambleLength = preambleLen
 
@@ -235,8 +254,8 @@ function RadioSetTxConfig(modem,power,fdev,bandwidth,datarate,coderate,preambleL
 	SX126xCopy.PacketParams.Params.LoRa.CrcMode = crcOn
 	SX126xCopy.PacketParams.Params.LoRa.InvertIQ = iqInverted
 
-    SX126xSetStandby({sx126x_reg.RadioStandbyModes_t.STDBY_RC})
-    RadioSetModem(1)
+    SX126xSetStandby(sx126x_reg.RadioStandbyModes_t.STDBY_RC)
+    RadioSetModem(sx126x_reg.RadioModems_t.MODEM_LORA)
     SX126xSetModulationParams(SX126xCopy.ModulationParams)
     SX126xSetPacketParams(SX126xCopy.PacketParams)
     SX126xSetTxParams(power,sx126x_reg.RADIO_RAMP_40_US)
@@ -247,146 +266,26 @@ function SX126xInit()
     SX126xIoInit()
     SX126xReset()
     SX126xWakeup()
-    -- 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)
+    -- -- local table = {sx126x_reg.RadioStandbyModes_t.STDBY_RC}
+    SX126xSetStandby(sx126x_reg.RadioStandbyModes_t.STDBY_RC)
+    -- local table1 = {sx126x_reg.RadioStandbyModes_t.USE_DCDC}
+    SX126xSetRegulatorMode(sx126x_reg.RadioStandbyModes_t.USE_DCDC)
     SX126xSetBufferBaseAddress("00","00")
-    SX126xSetTxParams( 0, sx126x_reg.RADIO_RAMP_200_US )
-    SX126xSetDioIrqParams( IRQ_RADIO_ALL, IRQ_RADIO_ALL, IRQ_RADIO_NONE, IRQ_RADIO_NONE )
+    SX126xSetTxParams( "00", sx126x_reg.RadioRampTimes_t.RADIO_RAMP_200_US )
+    SX126xSetDioIrqParams( sx126x_reg.RadioIrqMasks_t.IRQ_RADIO_ALL, sx126x_reg.RadioIrqMasks_t.IRQ_RADIO_ALL, sx126x_reg.RadioIrqMasks_t.IRQ_RADIO_NONE, sx126x_reg.RadioIrqMasks_t.IRQ_RADIO_NONE )
 
-    local table2 = {sx126x_reg.RadioStandbyModes_t.STDBY_RC}
-    SX126xSetStandby(table2)
-end
+    -- local table2 = {sx126x_reg.RadioStandbyModes_t.STDBY_RC}
+    SX126xSetStandby("00")
 
+    sys.wait(2000)
 
--- --测试案例1
--- sys.taskInit(function ()
---     sys.wait(3000)
---     -- SX126xInit()
---     sys.wait(3000)
---     i = 0
---     while true do
---         -- local ret = Drv_spi.drv_spi_read_write_byte("1D0740000000",4)
-
---         -- log.info("提取结果", ret)  -- 输出: 1D0F
---         log.info("计算结果", i%2)
---         if i%2 == 0 then
---             log.info("1")
---             SX126xResetGPIO(1)
---         else
---             log.info("0")
---             SX126xResetGPIO(0)
---         end
---         i = i + 1
---         sys.wait(3*1000)
---     end
---     spi.close(spi.SPI_1)
--- end)
-
--- --测试案例:获取 local sendData = sx126x_reg.RadioCommands[RADIO_READ_REGISTER]语法是否正确
--- sys.taskInit(function ()
---     sys.wait(3000)
---     log.info("计算结果", "测试1")
---     while true do
---         log.info("计算结果", sx126x_reg.RadioCommands.RADIO_READ_REGISTER)
---         log.info("计算结果", "测试")
---         sys.wait(3*1000)
---     end
--- end)
-
--- --测试案例:测试字符拼接
--- sys.taskInit(function ()
---     sys.wait(3000)
---     SX126xInit()
---     sys.wait(3000)
---     log.info("计算结果", "测试1")
---     while true do
---         log.info("计算结果", SX126xReadRegisters("0740",2))
---         sys.wait(3*1000)
---     end
--- end)
-
-
---测试案例:测试配置索引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)
-
---     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
--- sys.taskInit(function ()
---     sys.wait(3000)
---     SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_READ_REGISTER,numbers)
---     sys.wait(3000)
---     log.info("计算结果", "测试1")
--- end)
-
--- [I]-[修改前数据]
--- [I]-[源数据] {"KEY6":[1,2,3],"KEY3":"VALUE3","KEY4":"VALUE4","KEY2":"VALUE2","KEY1":"VALUE1","KEY5":{"KEY5_2":"VALU5_2","KEY5_1":"VALU5_1"}}
--- [I]-[源数据复制] {"KEY6":[1,2,3],"KEY3":"VALUE3","KEY4":"VALUE4","KEY2":"VALUE2","KEY1":"VALUE1","KEY5":{"KEY5_2":"VALU5_2","KEY5_1":"VALU5_1"}}
--- [I]-[修改后数据]
--- [I]-[源数据] {"KEY6":[1,2,3],"KEY3":"VALUE3","KEY4":"VALUE4","KEY2":"VALUE2","KEY1":"VALUE1_1","KEY5":{"KEY5_2":"VALU5_2","KEY5_1":"VALU5_1"}}
--- [I]-[源数据复制] {"KEY6":[1,2,3],"KEY3":"VALUE3","KEY4":"VALUE4","KEY2":"VALUE2","KEY1":"VALUE1_1","KEY5":{"KEY5_2":"VALU5_2","KEY5_1":"VALU5_1"}}
--- [I]-[计算结果] 测试1
--- sys.taskInit(function ()
---     sys.wait(3000)
---     -- SX126xInit()
---     sys.wait(3000)
-
---     local Person = {
---         name = "openLuat",
---         age = 18,
---         sex = "male",
---         hobby = {"reading","programming"},
---     }
-
---     local torigin =
---     {
---         KEY1 = "VALUE1",
---         KEY2 = "VALUE2",
---         KEY3 = "VALUE3",
---         KEY4 = "VALUE4",
---         KEY5 = {KEY5_1="VALU5_1",KEY5_2="VALU5_2"},
---         KEY6 = {1,2,3},
---     }
---     local torigin_gson = torigin
---     log.info("修改前数据")   
---     log.info("源数据",json.encode(torigin))   
---     log.info("源数据复制",json.encode(torigin_gson))   
---     log.info("修改后数据")   
---     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")
+    RadioSetTxConfig(sx126x_reg.RadioModems_t.MODEM_LORA,"16",0,2,11,"01","0c","00","01",nil,nil,nil)
+end
 
 sys.taskInit(function ()
     sys.wait(5000)
-    local i = 0x00
+    SX126xInit()
+    sys.wait(2000)
     while true do
         -- log.info("testSpiFlash.readFlashID",spi.send_recv(spi.SPI_1,s):toHex())--收发读写
 
@@ -402,12 +301,14 @@ sys.taskInit(function ()
         -- log.info("testSpiFlash.readFlashID",ret)
 
         -- SX126xWriteCommand("1d",{"0740"})
-        SX126xWriteRegister("0740",{string.format("%02X", i),string.format("%02X", i+1)})
-        log.info("计算结果0740寄存器", SX126xReadRegister("0740"))
-        log.info("计算结果0741寄存器", SX126xReadRegister("0741"))
-        SX126xWriteCommand("1d",{"07400000"})
-        SX126xReadCommand(sx126x_reg.RadioCommands.RADIO_GET_STATUS,8)
-        i = i + 1
+        -- SX126xWriteRegister("0740",{string.format("%02X", i),string.format("%02X", i+1)})
+        -- log.info("计算结果0740寄存器", SX126xReadRegister("0740"))
+        -- log.info("计算结果0741寄存器", SX126xReadRegister("0741"))
+        -- SX126xWriteCommand("1d",{"07400000"})
+    
+        sys.wait(20)
+        log.info("计算结果")
+        SX126xReadCommand(sx126x_reg.RadioCommands.RADIO_GET_STATUS,1)
         sys.wait(2000)
     end
     spi.close(spi.SPI_1)

+ 24 - 3
drv_periph/sx126x_reg.lua

@@ -26,6 +26,20 @@ RadioModems_t = {
     MODEM_LORA = 1,
 }
 
+RadioIrqMasks_t = {
+    IRQ_RADIO_NONE            = "0000",
+    IRQ_TX_DONE               = "0001",
+    IRQ_RX_DONE               = "0002",
+    IRQ_PREAMBLE_DETECTED     = "0004",
+    IRQ_SYNCWORD_VALID        = "0008",
+    IRQ_HEADER_VALID          = "0010",
+    IRQ_HEADER_ERROR          = "0020",
+    IRQ_CRC_ERROR             = "0040",
+    IRQ_CAD_DONE              = "0080",
+    IRQ_CAD_ACTIVITY_DETECTED = "0100",
+    IRQ_RX_TX_TIMEOUT         = "0200",
+    IRQ_RADIO_ALL             = "FFFF",
+}
 
 RadioOperatingModes_t = { 
     MODE_SLEEP = "00",
@@ -134,9 +148,16 @@ RadioLoRaCodingRates_t = {
 }
 
 RadioLoRaBandwidths_t = {
-    LORA_BW_125,
-    LORA_BW_250,
-    LORA_BW_500
+    LORA_BW_500  = 6,
+    LORA_BW_250  = 5,
+    LORA_BW_125  = 4,
+    LORA_BW_062  = 3,
+    LORA_BW_041  = 10,
+    LORA_BW_031  = 2,
+    LORA_BW_020  = 9,
+    LORA_BW_015  = 1,
+    LORA_BW_010  = 8,
+    LORA_BW_007  = 0,
 }
 Bandwidths = RadioLoRaBandwidths_t