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