--- 模块功能:sx126x模块驱动 -- 读取FLASH ID -- @author openLuat -- @module spi.testSpiFlash -- @license MIT -- @copyright openLuat -- @release 2018.03.27 module(...,package.seeall) require"utils" require"pm" pm.wake("wake11") require"pins" -- require "sx126x_reg" require "Drv_spi" require "sx126x_reg" SX126xResetGPIO = pins.setup(pio.P0_13,0) OperatingMode = sx126x_reg.RadioStandbyModes_t.STDBY_RC -- 初始化SPI function SX126xIoInit() Drv_spi.SPI_GPIO_Init() end -- 复位SX126x function SX126xReset() sys.wait(10) SX126xResetGPIO(0) sys.wait(20) SX126xResetGPIO(1) sys.wait(10) end function SX126xWakeup() local command = sx126x_reg.RadioCommands.RADIO_GET_STATUS .. "00" local ret = Drv_spi.drv_spi_read_write_byte(command) log.info("SX126xWakeup",ret) end --local numbers = {10, 20, 30, 40} -- Indices: 1→10, 2→20, 3→30, 4→40 function SX126xWriteCommand(command,buffer) local bufferTotal = "" for i, num in ipairs(buffer) do bufferTotal = bufferTotal .. num end Drv_spi.drv_spi_read_write_byte(command,0) sys.wait(20) drv_spi_read_write_byte(bufferTotal,0); sys.wait(20) end function SX126xReadRegisters(address,size) local command = sx126x_reg.RadioCommands.RADIO_READ_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 SX126xReadRegisters(address,size) SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_STANDBY) end function SX126xSetStandby(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 else OperatingMode = sx126x_reg.RadioOperatingModes_t.STDBY_XOSC end end -- 初始化SX126x function SX126xInit() SX126xIoInit() SX126xReset() SX126xWakeup() local test = {sx126x_reg.RadioStandbyModes_t.STDBY_RC} SX126xSetStandby(test) end -- --测试案例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) --测试案例:测试初始化 -- 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) sys.wait(3000) log.info("计算结果", "测试1") end)