netdrv_eth_spi.lua 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. --[[
  2. @module netdrv_eth_spi
  3. @summary "以太网SPI网卡"驱动模块
  4. @version 1.0
  5. @date 2025.11.4
  6. @author 拓毅恒
  7. @usage
  8. 本文件为以太网SPI网卡驱动模块,核心业务逻辑为:
  9. 1、初始化以太网SPI接口;
  10. 2、配置以太网适配器;
  11. 3、设置IP地址;
  12. 4、当网络连接成功后,会发布CREATE_OK事件通知HTTP服务器启动;
  13. 本文件没有对外接口,直接在其他功能模块中require "netdrv_eth_spi"就可以加载运行;
  14. ]]
  15. gpio.setup(140, 1, gpio.PULLUP) --打开ch390供电
  16. -- 以太网IP状态变化处理
  17. local function eth_ip_ready_func(ip, adapter)
  18. if adapter == socket.LWIP_ETH then
  19. log.info("netdrv_eth_spi", "IP_READY", ip)
  20. -- 发布CREATE_OK事件,通知HTTP服务器启动
  21. sys.publish("CREATE_OK")
  22. end
  23. end
  24. -- 订阅以太网相关事件
  25. sys.subscribe("IP_READY", eth_ip_ready_func)
  26. -- 创建并启动以太网初始化任务
  27. local function netdrv_eth_init_task()
  28. -- 设置默认网卡为socket.LWIP_ETH
  29. socket.dft(socket.LWIP_ETH)
  30. -- 初始化SPI接口连接CH390
  31. local result = spi.setup(
  32. 1,--串口id
  33. nil,
  34. 0,--CPHA
  35. 0,--CPOL
  36. 8,--数据宽度
  37. 25600000--频率
  38. )
  39. if result ~= 0 then--返回值为0,表示打开成功
  40. log.info("netdrv_eth_spi", "SPI初始化失败", result)
  41. return
  42. end
  43. log.info("netdrv_eth_spi", "SPI初始化成功")
  44. -- 设置CH390驱动和网络参数
  45. netdrv.setup(socket.LWIP_ETH, netdrv.CH390, {spi=1,cs=12})
  46. sys.wait(3000)
  47. -- 配置从路由器获取IP地址(DHCP客户端模式)
  48. log.info("netdrv_ethernet_spi", "开始从路由器获取IP地址...")
  49. netdrv.dhcp(socket.LWIP_ETH, true) -- 启用DHCP客户端
  50. sys.wait(3000)
  51. -- 获取并显示分配的IP地址
  52. local ipv4, mark, gw = netdrv.ipv4(socket.LWIP_ETH)
  53. -- 手动设置IP地址
  54. -- local ipv4,mark, gw = netdrv.ipv4(socket.LWIP_ETH, "192.168.4.1", "255.255.255.0", "192.168.4.1")
  55. server_ip = ipv4
  56. log.info("netdrv_ethernet_spi", "IP配置完成:", ipv4, mark, gw)
  57. -- 等待以太网连接
  58. while netdrv.link(socket.LWIP_ETH) ~= true do
  59. sys.wait(100)
  60. end
  61. while netdrv.link(socket.LWIP_GP) ~= true do
  62. sys.wait(100)
  63. end
  64. log.info("netdrv_ethernet_spi", "以太网连接状态:", netdrv.link(socket.LWIP_ETH))
  65. end
  66. -- 启动以太网初始化任务
  67. sys.taskInit(netdrv_eth_init_task)