sx126x_driver.lua 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. --- 模块功能:sx126x模块驱动
  2. -- 读取FLASH ID
  3. -- @author openLuat
  4. -- @module spi.testSpiFlash
  5. -- @license MIT
  6. -- @copyright openLuat
  7. -- @release 2018.03.27
  8. module(...,package.seeall)
  9. require"utils"
  10. require"pm"
  11. pm.wake("wake11")
  12. require"pins"
  13. -- require "sx126x_reg"
  14. require "Drv_spi"
  15. require "sx126x_reg"
  16. local SX126x = sx126x_reg.SX126x_t
  17. SX126xResetGPIO = pins.setup(pio.P0_13,0)
  18. OperatingMode = sx126x_reg.RadioStandbyModes_t.STDBY_RC
  19. -- 初始化SPI
  20. function SX126xIoInit()
  21. Drv_spi.SPI_GPIO_Init()
  22. end
  23. -- 复位SX126x
  24. function SX126xReset()
  25. sys.wait(10)
  26. SX126xResetGPIO(0)
  27. sys.wait(20)
  28. SX126xResetGPIO(1)
  29. sys.wait(10)
  30. end
  31. function SX126xWakeup()
  32. local command = sx126x_reg.RadioCommands.RADIO_GET_STATUS .. "00"
  33. local ret = Drv_spi.drv_spi_read_write_byte(command)
  34. log.info("SX126xWakeup",ret)
  35. end
  36. --local numbers = {10, 20, 30, 40} -- Indices: 1→10, 2→20, 3→30, 4→40
  37. function SX126xWriteCommand(command,buffer)
  38. local bufferTotal = ""
  39. for i, num in ipairs(buffer) do
  40. bufferTotal = bufferTotal .. num
  41. end
  42. Drv_spi.drv_spi_read_write_byte(command,0)
  43. sys.wait(20)
  44. Drv_spi.drv_spi_read_write_byte(bufferTotal,0);
  45. sys.wait(20)
  46. end
  47. function SX126xReadRegisters(address,size)
  48. local command = sx126x_reg.RadioCommands.RADIO_READ_REGISTER
  49. local sendData = command .. address .. "00"
  50. local receiverDataCount= size
  51. while size > 0 do
  52. sendData = sendData .. "00"
  53. size = size - 1
  54. end
  55. local result = Drv_spi.drv_spi_read_write_byte(sendData,receiverDataCount*2) --这里乘2的意思是,16进制是两位,但是转成字符串的形式就是4位了。
  56. log.info("SX126xReadRegisters",result)
  57. return result
  58. end
  59. function SX126xWriteRegisters(address,buffer,size)
  60. if address == nil or buffer == nil or size == nil then
  61. log.error("SX126xWriteRegisters","参数错误")
  62. return
  63. end
  64. local command = sx126x_reg.RadioCommands.RADIO_WRITE_REGISTER
  65. local sendData = command .. address .. "00"
  66. local receiverDataCount= size
  67. while size > 0 do
  68. sendData = sendData .. "00"
  69. size = size - 1
  70. end
  71. local result = Drv_spi.drv_spi_read_write_byte(sendData,receiverDataCount*2) --这里乘2的意思是,16进制是两位,但是转成字符串的形式就是4位了。
  72. log.info("SX126xReadRegisters",result)
  73. return result
  74. end
  75. function SX126xWriteRegister(address,value)
  76. SX126xWriteRegisters( address,value,1);
  77. end
  78. -- function SX126xReadRegisters(address,size)
  79. -- SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_STANDBY)
  80. -- end
  81. function SX126xSetStandby(standbyConfig)
  82. SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_STANDBY,standbyConfig)
  83. if standbyConfig[0] == sx126x_reg.RadioStandbyModes_t.STDBY_RC then
  84. OperatingMode = sx126x_reg.RadioOperatingModes_t.STDBY_RC
  85. else
  86. OperatingMode = sx126x_reg.RadioOperatingModes_t.STDBY_XOSC
  87. end
  88. end
  89. function SX126xSetRegulatorMode(mode)
  90. SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_REGULATORMODE,mode)
  91. end
  92. function SX126xSetBufferBaseAddress(txBaseAddress, rxBaseAddress)
  93. local buf = {txBaseAddress,rxBaseAddress}
  94. SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_BUFFERBASEADDRESS,buf)
  95. end
  96. function SX126xSetPaConfig(paDutyCycle,hpMax,deviceSel,paLut)
  97. local buf = {paDutyCycle,hpMax,deviceSel,paLut}
  98. -- log.info("SX126xSetPaConfig",buf)
  99. SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_PACONFIG,buf)
  100. end
  101. function SX126xSetTxParams(power, rampTime)
  102. local buf = {power,rampTime}
  103. SX126xSetPaConfig("04","07","00","01")
  104. SX126xWriteRegister( sx126x_reg.REG_OCP, "38" );
  105. SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_TXPARAMS,buf)
  106. end
  107. function SX126xSetDioIrqParams(timeout, freq, rfChain, power, preambleLen)
  108. local buf = {timeout, freq, rfChain, power, preambleLen}
  109. SX126xSetTxParams(power, sx126x_reg.RadioRampTimes_t.RADIO_RAMP_40_US)
  110. SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_TX,buf)
  111. end
  112. function SX126xSetStopRxTimerOnPreambleDetect(enable)
  113. SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_STOPRXTIMERONPREAMBLE,{enable})
  114. end
  115. function SX126xSetLoRaSymbNumTimeout(SymbNum)
  116. SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_SET_LORASYMBTIMEOUT,{SymbNum})
  117. end
  118. function RadioSetTxConfig(modem,power,fdev,bandwidth,datarate,coderate,preambleLen,fixLen,crcOn,freqHopOn,hopPeriod,iqInverted,timeout)
  119. SX126xSetStopRxTimerOnPreambleDetect(false)
  120. SX126xSetLoRaSymbNumTimeout(0)
  121. -- local test = sx126x_reg.SX126x_t
  122. -- test.ModulationParams_t.RadioPacketTypes_t = sx126x_reg.RadioPacketTypes_t;
  123. end
  124. -- 初始化SX126x
  125. function SX126xInit()
  126. SX126xIoInit()
  127. SX126xReset()
  128. SX126xWakeup()
  129. local table = {sx126x_reg.RadioStandbyModes_t.STDBY_RC}
  130. SX126xSetStandby(table)
  131. local table1 = {sx126x_reg.RadioStandbyModes_t.USE_DCDC}
  132. SX126xSetRegulatorMode(table1)
  133. SX126xSetBufferBaseAddress("00","00")
  134. SX126xSetTxParams( 0, RADIO_RAMP_200_US )
  135. SX126xSetDioIrqParams( IRQ_RADIO_ALL, IRQ_RADIO_ALL, IRQ_RADIO_NONE, IRQ_RADIO_NONE )
  136. local table2 = {sx126x_reg.RadioStandbyModes_t.STDBY_RC}
  137. SX126xSetStandby(table2)
  138. end
  139. -- --测试案例1
  140. -- sys.taskInit(function ()
  141. -- sys.wait(3000)
  142. -- -- SX126xInit()
  143. -- sys.wait(3000)
  144. -- i = 0
  145. -- while true do
  146. -- -- local ret = Drv_spi.drv_spi_read_write_byte("1D0740000000",4)
  147. -- -- log.info("提取结果", ret) -- 输出: 1D0F
  148. -- log.info("计算结果", i%2)
  149. -- if i%2 == 0 then
  150. -- log.info("1")
  151. -- SX126xResetGPIO(1)
  152. -- else
  153. -- log.info("0")
  154. -- SX126xResetGPIO(0)
  155. -- end
  156. -- i = i + 1
  157. -- sys.wait(3*1000)
  158. -- end
  159. -- spi.close(spi.SPI_1)
  160. -- end)
  161. -- --测试案例:获取 local sendData = sx126x_reg.RadioCommands[RADIO_READ_REGISTER]语法是否正确
  162. -- sys.taskInit(function ()
  163. -- sys.wait(3000)
  164. -- log.info("计算结果", "测试1")
  165. -- while true do
  166. -- log.info("计算结果", sx126x_reg.RadioCommands.RADIO_READ_REGISTER)
  167. -- log.info("计算结果", "测试")
  168. -- sys.wait(3*1000)
  169. -- end
  170. -- end)
  171. -- --测试案例:测试字符拼接
  172. -- sys.taskInit(function ()
  173. -- sys.wait(3000)
  174. -- SX126xInit()
  175. -- sys.wait(3000)
  176. -- log.info("计算结果", "测试1")
  177. -- while true do
  178. -- log.info("计算结果", SX126xReadRegisters("0740",2))
  179. -- sys.wait(3*1000)
  180. -- end
  181. -- end)
  182. --测试案例:测试初始化
  183. sys.taskInit(function ()
  184. sys.wait(3000)
  185. -- SX126xInit()
  186. sys.wait(3000)
  187. SX126x.ModulationParams.PacketType = sx126x_reg.PACKET_TYPE_LORA;
  188. log.info("计算结果", SX126x.)
  189. log.info("计算结果", "测试1")
  190. end)
  191. -- --测试案例:拼接buffer
  192. -- sys.taskInit(function ()
  193. -- sys.wait(3000)
  194. -- SX126xWriteCommand(sx126x_reg.RadioCommands.RADIO_READ_REGISTER,numbers)
  195. -- sys.wait(3000)
  196. -- log.info("计算结果", "测试1")
  197. -- end)
  198. -- [I]-[修改前数据]
  199. -- [I]-[源数据] {"KEY6":[1,2,3],"KEY3":"VALUE3","KEY4":"VALUE4","KEY2":"VALUE2","KEY1":"VALUE1","KEY5":{"KEY5_2":"VALU5_2","KEY5_1":"VALU5_1"}}
  200. -- [I]-[源数据复制] {"KEY6":[1,2,3],"KEY3":"VALUE3","KEY4":"VALUE4","KEY2":"VALUE2","KEY1":"VALUE1","KEY5":{"KEY5_2":"VALU5_2","KEY5_1":"VALU5_1"}}
  201. -- [I]-[修改后数据]
  202. -- [I]-[源数据] {"KEY6":[1,2,3],"KEY3":"VALUE3","KEY4":"VALUE4","KEY2":"VALUE2","KEY1":"VALUE1_1","KEY5":{"KEY5_2":"VALU5_2","KEY5_1":"VALU5_1"}}
  203. -- [I]-[源数据复制] {"KEY6":[1,2,3],"KEY3":"VALUE3","KEY4":"VALUE4","KEY2":"VALUE2","KEY1":"VALUE1_1","KEY5":{"KEY5_2":"VALU5_2","KEY5_1":"VALU5_1"}}
  204. -- [I]-[计算结果] 测试1
  205. -- sys.taskInit(function ()
  206. -- sys.wait(3000)
  207. -- -- SX126xInit()
  208. -- sys.wait(3000)
  209. -- local Person = {
  210. -- name = "openLuat",
  211. -- age = 18,
  212. -- sex = "male",
  213. -- hobby = {"reading","programming"},
  214. -- }
  215. -- local torigin =
  216. -- {
  217. -- KEY1 = "VALUE1",
  218. -- KEY2 = "VALUE2",
  219. -- KEY3 = "VALUE3",
  220. -- KEY4 = "VALUE4",
  221. -- KEY5 = {KEY5_1="VALU5_1",KEY5_2="VALU5_2"},
  222. -- KEY6 = {1,2,3},
  223. -- }
  224. -- local torigin_gson = torigin
  225. -- log.info("修改前数据")
  226. -- log.info("源数据",json.encode(torigin))
  227. -- log.info("源数据复制",json.encode(torigin_gson))
  228. -- log.info("修改后数据")
  229. -- torigin_gson.KEY1 = "VALUE1_1"
  230. -- log.info("源数据",json.encode(torigin))
  231. -- log.info("源数据复制",json.encode(torigin_gson))
  232. -- log.info("计算结果", "测试1")
  233. -- end)