main.lua 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "w25q_spi_demo"
  3. VERSION = "1.0.1"
  4. sys = require("sys")
  5. --spi编号,请按实际情况修改!
  6. local spiId = 0
  7. --cs脚,请按需修改!
  8. --spi 多路复用的时候所有cs 都要拉高
  9. local cs = 8 -- CS使用GPIO8
  10. local cspin = gpio.setup(cs, 1) --配置CS为输出
  11. --收发数据
  12. local function sendRecv(data,len)
  13. local r = ""
  14. cspin(0)
  15. if data then spi.send(spiId,data) end
  16. if len then r = spi.recv(spiId,len) end
  17. cspin(1)
  18. return r
  19. end
  20. sys.taskInit(function()
  21. local result = spi.setup(
  22. spiId,--串口id
  23. nil,
  24. 0,--CPHA
  25. 0,--CPOL
  26. 8,--数据宽度
  27. 100000--,--频率
  28. -- spi.MSB,--高低位顺序 可选,默认高位在前
  29. -- spi.master,--主模式 可选,默认主
  30. -- spi.full--全双工 可选,默认全双工
  31. )
  32. print("open",result)
  33. if result ~= 0 then--返回值为0,表示打开成功
  34. print("spi open error",result)
  35. return
  36. end
  37. --检查芯片型号
  38. local chip = sendRecv(string.char(0x9f),3)
  39. if chip == string.char(0xef,0x40,0x17) then
  40. log.info("spi", "chip id read ok 0xef,0x40,0x17")
  41. else
  42. log.info("spi", "chip id read error")
  43. for i=1,#chip do
  44. print(chip:byte(i))
  45. end
  46. return
  47. end
  48. local data = "test data 123456"
  49. --enable write
  50. sendRecv(string.char(0x06))
  51. --写页数据到地址0x000001
  52. sendRecv(string.char(0x02,0x00,0x00,0x01)..data)
  53. log.info("spi","write",data)
  54. sys.wait(500)--等写入操作完成
  55. --读数据
  56. local r = sendRecv(string.char(0x03,0x00,0x00,0x01),data:len())
  57. log.info("spi","read",r)
  58. --disable write
  59. sendRecv(string.char(0x04))
  60. spi.close(spiId)
  61. end)
  62. -- 结尾总是这一句哦
  63. sys.run()