Преглед на файлове

测试发生command+驱动移植

xuxinyi преди 4 месеца
родител
ревизия
bbc0600be5
променени са 3 файла, в които са добавени 155 реда и са изтрити 26 реда
  1. 2 2
      drv_periph/Drv_spi.lua
  2. 134 23
      drv_periph/sx126x_driver.lua
  3. 19 1
      drv_periph/sx126x_reg.lua

+ 2 - 2
drv_periph/Drv_spi.lua

@@ -32,11 +32,11 @@ 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
-        return string.sub(ret, -size)
+        return string.sub(ret, -size*2)
     end
 end
 

+ 134 - 23
drv_periph/sx126x_driver.lua

@@ -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)

+ 19 - 1
drv_periph/sx126x_reg.lua

@@ -7,13 +7,25 @@ module(...,package.seeall)
     The addresses of the register holding LoRa Modem SyncWord value
 ]]
 REG_LR_SYNCWORD = "0740"
+REG_LR_SYNCWORD_LSB = "0741"
 REG_OCP         = "08E7"
 
+
+LORA_MAC_PRIVATE_SYNCWORD = "1424"
+
+
+LORA_MAC_PUBLIC_SYNCWORD = "3444"
+
 RadioStandbyModes_t = {
     STDBY_RC = "00",
     STDBY_XOSC = "01",
 }
 
+RadioModems_t = {
+    MODEM_FSK = 0,
+    MODEM_LORA = 1,
+}
+
 
 RadioOperatingModes_t = { 
     MODE_SLEEP = "00",
@@ -121,6 +133,13 @@ RadioLoRaCodingRates_t = {
     LORA_CR_4_8 = "04",
 }
 
+RadioLoRaBandwidths_t = {
+    LORA_BW_125,
+    LORA_BW_250,
+    LORA_BW_500
+}
+Bandwidths = RadioLoRaBandwidths_t
+
 PacketParams_t = { 
     PacketType = RadioPacketTypes_t,
     Params = {
@@ -181,7 +200,6 @@ ModulationParams_t = {
 }
 
 SX126x_t = {
-    test = "测试",
     PacketParams = PacketParams_t,
     PacketStatus = PacketStatus_t,
     ModulationParams = ModulationParams_t