netdrv_4g.lua 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. --[[
  2. @module netdrv_4g
  3. @summary “通过SPI接口外挂4G模组(Air780EHM/Air780EHV/Air780EGH/Air780EPM)的4G网卡”驱动模块
  4. @version 1.0
  5. @date 2025.07.27
  6. @author 朱天华
  7. @usage
  8. 本文件为 “通过SPI接口外挂4G模组(Air780EHM/Air780EHV/Air780EGH/Air780EPM)的4G网卡”驱动模块,核心业务逻辑为:
  9. 1、初始化和外部4G网卡的配置(初始化AirLINK、配置桥接网络、配置SPI、静态配置IP地址/子网掩码/网关);
  10. 2、4G网卡的连接状态发生变化时,在日志中进行打印;
  11. 硬件环境使用以下两种环境中的一种即可:
  12. 1、Air8101核心板+Air780EHM/Air780EHV/Air780EGH/Air780EPM核心板
  13. 2、Air8101核心板+Air780EHM/Air780EHV/Air780EGH/Air780EPM开发板
  14. 一、当使用第1种硬件环境时,Air8101核心板和Air780EHM/Air780EHV/Air780EGH/Air780EPM核心板的硬件接线方式为:
  15. 1、Air8101核心板:
  16. - 核心板通过TYPE-C USB口供电(核心板背面的功耗测试开关拨到OFF一端);
  17. - 如果测试发现软件重启,并且日志中出现 poweron reason 0,表示供电不足,此时再通过直流稳压电源对核心板的VIN管脚进行5V供电;
  18. 2、Air780EHM/Air780EHV/Air780EGH/Air780EPM核心板:
  19. - 核心板通过TYPE-C USB口供电(TYPE-C USB口旁边的ON/OFF拨动开关拨到ON一端);
  20. - 如果测试发现软件重启,并且日志中出现 poweron reason 0,表示供电不足,此时再通过直流稳压电源对核心板的5V管脚进行5V供电;
  21. 3、
  22. | Air8101核心板 | Air780EHM/Air780EHV/Air780EGH/Air780EPM核心板 |
  23. | ------------ | ---------------------------------------------- |
  24. | gnd | GND |
  25. | 54/DISP | 83/SPI0CS |
  26. | 55/HSYN | 84/SPI0MISO |
  27. | 57/DE | 85/SPI0MOSI |
  28. | 28/DCLK | 86/SPI0CLK |
  29. | 43/R2 | 19/GPIO22 |
  30. | 75/GPIO28 | 22/GPIO1 |
  31. 二、当使用第2种硬件环境时,Air8101核心板和Air780EHM/Air780EHV/Air780EGH/Air780EPM开发板的硬件接线方式为:
  32. 1、Air8101核心板:
  33. - 核心板通过TYPE-C USB口供电(核心板背面的功耗测试开关拨到OFF一端);
  34. - 如果测试发现软件重启,并且日志中出现 poweron reason 0,表示供电不足,此时再通过直流稳压电源对核心板的VIN管脚进行5V供电;
  35. 2、Air780EHM/Air780EHV/Air780EGH/Air780EPM开发板:
  36. - 核心板通过TYPE-C USB口供电(外部供电/USB供电拨动开关拨到USB供电一端);
  37. - 如果测试发现软件重启,并且日志中出现 poweron reason 0,表示供电不足,此时再通过直流稳压电源对开发板的5V管脚进行5V供电;
  38. 3、
  39. | Air8101核心板 | Air780EHM/Air780EHV/Air780EGH/Air780EPM开发板 |
  40. | ------------ | ---------------------------------------------- |
  41. | gnd | GND |
  42. | 54/DISP | SPI_CS |
  43. | 55/HSYN | SPI_MISO |
  44. | 57/DE | SPI_MOSI |
  45. | 28/DCLK | SPI_CLK |
  46. | 43/R2 | GPIO22 |
  47. | 75/GPIO28 | GPIO1 |
  48. 三、以上两种硬件环境,Air8101使用的SPI0默认的一组引脚,也可以使用SPI1;使用SPI1时,硬件连接说明的更多资料参考:
  49. https://docs.openluat.com/air8101/luatos/hardware/design/4gnet/
  50. 软件代码需要做以下配置:
  51. airlink.config(airlink.CONF_SPI_ID, 1)
  52. airlink.config(airlink.CONF_SPI_CS, 10)
  53. 四、测试本功能模块时,Air780EHM/Air780EHV/Air780EGH/Air780EPM需要烧录以下软件:
  54. 1、最新版本的内核固件
  55. 2、脚本:https://gitee.com/openLuat/LuatOS/tree/master/module/Air8101/demo/multi_network/WIFI_4G_ETH/Air8101_Air780EPM/Air780EPM_master
  56. 本文件没有对外接口,直接在其他功能模块中require "netdrv_4g"就可以加载运行;
  57. ]]
  58. local function ip_ready_func(ip, adapter)
  59. if adapter == socket.LWIP_USER0 then
  60. log.info("netdrv_4g.ip_ready_func", "IP_READY", socket.localIP(socket.LWIP_USER0))
  61. end
  62. end
  63. local function ip_lose_func(adapter)
  64. if adapter == socket.LWIP_USER0 then
  65. log.warn("netdrv_4g.ip_lose_func", "IP_LOSE")
  66. end
  67. end
  68. -- 此处订阅"IP_READY"和"IP_LOSE"两种消息
  69. -- 在消息的处理函数中,仅仅打印了一些信息,便于实时观察“通过SPI接口外挂4G模组(Air780EHM/Air780EHV/Air780EGH/Air780EPM)的4G网卡”的连接状态
  70. -- 也可以根据自己的项目需求,在消息处理函数中增加自己的业务逻辑控制,例如可以在连网状态发生改变时更新网络图标
  71. sys.subscribe("IP_READY", ip_ready_func)
  72. sys.subscribe("IP_LOSE", ip_lose_func)
  73. -- 设置默认网卡为socket.LWIP_USER0
  74. socket.dft(socket.LWIP_USER0)
  75. -- 初始化airlink,Air8101和4G网卡之间,在spi之上,基于airlink协议通信
  76. airlink.init()
  77. -- 创建桥接网络设备
  78. -- 此处第一个参数必须是socket.LWIP_USER0,是因为Air780EHM/Air780EHV/Air780EGH/Air780EPM使用的也是socket.LWIP_USER0,双方是点对点通讯的对等网络
  79. -- 此处第二个参数必须是netdrv.WHALE,表示虚拟网卡的实现方式
  80. netdrv.setup(socket.LWIP_USER0, netdrv.WHALE)
  81. -- 启动airlink,配置Air8101作为SPI从机模式。
  82. airlink.start(airlink.MODE_SPI_SLAVE)
  83. -- 静态配置IPv4地址
  84. -- 本地ip地址为"192.168.111.1",网关ip地址为"192.168.111.2",子网掩码为"255.255.255.0"
  85. -- 此处设置的本地ip地址要和Air780EHM/Air780EHV/Air780EGH/Air780EPM中设置的网关ip地址完全一样
  86. -- 此处设置的网关ip地址要和Air780EHM/Air780EHV/Air780EGH/Air780EPM中设置的本地ip地址完全一样
  87. -- 此处设置的子网掩码要和Air780EHM/Air780EHV/Air780EGH/Air780EPM中设置的子网掩码完全一样
  88. netdrv.ipv4(socket.LWIP_USER0, "192.168.111.1", "255.255.255.0", "192.168.111.2")
  89. -- 4G联网成功后,内核固件会产生一个"IP_READY"消息
  90. -- 各个功能模块可以订阅"IP_READY"消息实时处理4G联网成功的事件
  91. -- 也可以在任何时刻调用socket.adapter(socket.LWIP_USER0)来获取4G网络是否连接成功
  92. -- 4G断网后,内核固件会产生一个"IP_LOSE"消息
  93. -- 各个功能模块可以订阅"IP_LOSE"消息实时处理4G网络断网的事件
  94. -- 也可以在任何时刻调用socket.adapter(socket.LWIP_USER0)来获取4G网络是否连接成功