Преглед изворни кода

发生前修改,未测试

xuxinyi пре 4 месеци
родитељ
комит
c870268f46
3 измењених фајлова са 92 додато и 16 уклоњено
  1. 1 1
      drv_periph/Drv_spi.lua
  2. 79 15
      drv_periph/sx126x_driver.lua
  3. 12 0
      drv_periph/sx126x_reg.lua

+ 1 - 1
drv_periph/Drv_spi.lua

@@ -33,7 +33,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)
-    if size == nil or size = 0 then
+    if size == nil or size == 0 then
         return 0
     else
         return string.sub(ret, -size)

+ 79 - 15
drv_periph/sx126x_driver.lua

@@ -47,7 +47,7 @@ function SX126xWriteCommand(command,buffer)
     end
     Drv_spi.drv_spi_read_write_byte(command,0)
     sys.wait(20)
-    drv_spi_read_write_byte(bufferTotal,0);
+    Drv_spi.drv_spi_read_write_byte(bufferTotal,0);
     sys.wait(20)
 end
 
@@ -68,9 +68,33 @@ function SX126xReadRegisters(address,size)
 end
 
 
-function SX126xReadRegisters(address,size)
-    SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_STANDBY)
-end 
+function SX126xWriteRegisters(address,buffer,size)
+    if address == nil or buffer == nil or size == nil then
+        log.error("SX126xWriteRegisters","参数错误")
+        return
+    end
+    local command = sx126x_reg.RadioCommands.RADIO_WRITE_REGISTER
+    local sendData = command .. address .. "00"
+    local receiverDataCount= size
+
+    while size > 0 do
+        sendData = sendData .. "00"
+        size = size - 1
+    end
+
+    local result = Drv_spi.drv_spi_read_write_byte(sendData,receiverDataCount*2)  --这里乘2的意思是,16进制是两位,但是转成字符串的形式就是4位了。
+
+    log.info("SX126xReadRegisters",result)
+    return result
+end
+
+function SX126xWriteRegister(address,value)
+    SX126xWriteRegisters( address,value,1);
+end
+
+-- function SX126xReadRegisters(address,size)
+--     SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_STANDBY)
+-- end 
 
 function SX126xSetStandby(standbyConfig)
     SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_STANDBY,standbyConfig)
@@ -82,14 +106,54 @@ function SX126xSetStandby(standbyConfig)
     end
 end
 
+function SX126xSetRegulatorMode(mode)
+    SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_REGULATORMODE,mode)
+end
+
+function SX126xSetBufferBaseAddress(txBaseAddress, rxBaseAddress)
+    local buf = {txBaseAddress,rxBaseAddress}
+    SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_BUFFERBASEADDRESS,buf)
+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)
+end
+
+function SX126xSetTxParams(power, rampTime)
+    local buf = {power,rampTime}
+    SX126xSetPaConfig("04","07","00","01")
+    SX126xWriteRegister( sx126x_reg.REG_OCP, "38" ); 
+    SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_TXPARAMS,buf)
+
+end
+
+function SX126xSetDioIrqParams(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 RadioStandby()
+
+end
 
 -- 初始化SX126x
 function SX126xInit()
     SX126xIoInit()
     SX126xReset()
     SX126xWakeup()
-    local test = {sx126x_reg.RadioStandbyModes_t.STDBY_RC}
-    SX126xSetStandby(test)
+    local table = {sx126x_reg.RadioStandbyModes_t.STDBY_RC}
+    SX126xSetStandby(table)
+    local table1 = {sx126x_reg.RadioStandbyModes_t.USE_DCDC}
+    SX126xSetRegulatorMode(table1)
+    SX126xSetBufferBaseAddress("00","00")
+    SX126xSetTxParams( 0, 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}
+    SX126xSetStandby(table2)
 end
 
 
@@ -142,18 +206,18 @@ end
 
 
 --测试案例:测试初始化
--- sys.taskInit(function ()
---     sys.wait(3000)
---     SX126xInit()
---     sys.wait(3000)
---     log.info("计算结果", "测试1")
--- end)
-
---测试案例:拼接buffer
 sys.taskInit(function ()
     sys.wait(3000)
-    SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_READ_REGISTER,numbers)
+    SX126xInit()
     sys.wait(3000)
     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)
+

+ 12 - 0
drv_periph/sx126x_reg.lua

@@ -7,6 +7,7 @@ module(...,package.seeall)
     The addresses of the register holding LoRa Modem SyncWord value
 ]]
 REG_LR_SYNCWORD = "0740"
+REG_OCP         = "08E7"
 
 RadioStandbyModes_t = {
     STDBY_RC = "00",
@@ -25,6 +26,17 @@ RadioOperatingModes_t = {
     MODE_CAD = "07"
 }
 
+RadioRampTimes_t = {
+    RADIO_RAMP_10_US = "00",
+    RADIO_RAMP_20_US = "01",
+    RADIO_RAMP_40_US = "02",
+    RADIO_RAMP_80_US = "03",
+    RADIO_RAMP_200_US = "04",
+    RADIO_RAMP_800_US = "05",
+    RADIO_RAMP_1700_US = "06",
+    RADIO_RAMP_3400_US = "07"
+}
+
 -- 定义Radio命令枚举(字符串格式,用于直接通信)
 --[[
     Represents all possible opcode understood by the radio