跳转至

以太网

一、演示功能概述

本章节用两个示例演示 Air780EGH 核心板的以太网功能

第一个示例:Air780EGH 核心板通过 外接CH390模块 连接路由器,访问公网获取数据。

第二个示例:Air780EGH 核心板通过 外接CH390模块 连接电脑,使用 4G 转以太网功能,给电脑提供网络。

二、准备硬件环境

2.1 Air780EGH 核心板V1.0 及 所需测试配件 CH390H模块

2.2 Air780EGH 核心板与 CH390H模块 接线示意图

三、准备软件环境

在开始实践本示例之前,先筹备一下软件环境:

1. Luatools 工具

2. 内核固件文件(底层 core 固件文件):LuatOS-SoC_V2007_Air780EGH;参考项目使用的内核固件

3. luatos 需要的脚本和资源文件

脚本和资源文件:点我,查看demo链接

lib 脚本文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件;

准备好软件环境之后,接下来查看如何烧录项目文件到 Air780EGH 开发板,将本篇文章中演示使用的项目文件烧录到 Air780EGH 核心板中。

四、以太网软硬件资料

4.1 API 接口介绍

netdrv - 网络设备管理 - luatos@air780egh - 合宙模组资料中心

五、代码示例介绍

5.1 代码介绍

5.1.1 main.lua

-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "NETDRV_CH390H_TEST"
VERSION = "001.000.000"

--添加硬狗防止程序卡死
if wdt then
    wdt.init(9000)--初始化watchdog设置为9s
    sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
end

--log.info("ch390", "打开LDO供电")
--gpio.setup(20, 1)  --打开LDO供电, 对于核心板外接CH390H模块时可以不需要配置

-- 以下功能测试模块,测试时一次加载一个测试模块
-- wan功能通信测试
require "wan"
-- lan功能通信测试
--require "lan"

-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

5.1.2 wan.lua

WAN通信流程示意图:

Air780EGH 核心板通过 CH390 连接路由器LAN口,通过路由器DHCP获取IP后,此时可以通过路由器连接的光纤宽带,接入互联网访问网站资源。

WAN demo code关键实现说明:

-- 网络配置,netdrv模块启动ch390h以太网模块
function network_setup()
    -- 配置以太网模块ch390h的spi接口参数,使用SPI0
    -- sys.wait(3000)
    local result = spi.setup(
        0,--串口id
        nil,
        0,--CPHA
        0,--CPOL
        8,--数据宽度
        38400000--,--频率,这里注意若通过杜邦线连接CH390H与核心板需调整总线速率,过大的速率会造成通信失败
        -- spi.MSB,--高低位顺序    可选,默认高位在前
        -- spi.master,--主模式     可选,默认主
        -- spi.full--全双工       可选,默认全双工
    )
    log.info("main", "open",result)
    if result ~= 0 then--返回值为0,表示打开成功
        log.info("main", "spi open error",result)
        return
    end
    -- 配置以太网网络,使用SPI0, CS为GPIO08
    netdrv.setup(socket.LWIP_ETH, netdrv.CH390, {spi=0,cs=8})
    -- 使能DHCP
    netdrv.dhcp(socket.LWIP_ETH, true)
end

-- CH390H通过网线连接路由器LAN口,路由器已拨号上网,通过路由器接入互联网进行http通信测试
function test_http_requet()
    -- sys.waitUntil("IP_READY")
    while 1 do
        sys.wait(6000)
        -- 定时通过http get请求来获取4K数据
        log.info("http", http.request("GET", "http://httpbin.air32.cn/bytes/4096", nil, nil, {adapter=socket.LWIP_ETH}).wait())
        log.info("lua", rtos.meminfo())
        log.info("sys", rtos.meminfo("sys"))
    end
end

-- 启动wan网络配置任务
sys.taskInit(network_setup)
-- 启动wan网络数据通信任务
sys.taskInit(test_http_requet)

5.1.3 lan.lua

LAN通信流程示意图:

Air780EGH 开发板通过 CH390 连接电脑,使用 4G 转以太网功能,给PC电脑提供网络

LAN demo code关键实现说明:

-- 加载dhcp server模块,用于动态ip地址分配
dhcps = require "dhcpsrv"
-- 加载dns模块,用于域名解析
dnsproxy = require "dnsproxy"

-- 网络配置,netdrv模块启动ch390h以太网模块和4g网络
function network_setup()
    -- 配置以太网模块ch390h的spi接口参数,使用SPI0
    -- sys.wait(3000)
    local result = spi.setup(
        0,--串口id
        nil,
        0,--CPHA
        0,--CPOL
        8,--数据宽度
        38400000--,--频率, 这里注意若通过杜邦线连接CH390H与核心板需调整总线速率,过大的速率会造成通信失败
        -- spi.MSB,--高低位顺序    可选,默认高位在前
        -- spi.master,--主模式     可选,默认主
        -- spi.full--全双工       可选,默认全双工
    )
    log.info("main", "open",result)
    if result ~= 0 then--返回值为0,表示打开成功
        log.info("main", "spi open error",result)
        return
    end
    -- 配置以太网网络,使用SPI0, CS为GPIO08
    netdrv.setup(socket.LWIP_ETH, netdrv.CH390, {spi=0,cs=8})
    sys.wait(3000)
    -- 配置以太网网络参数,包括静态IP,子网掩码,网关IP,
    -- 本测试需要将4G网络转以太网络相当于自身作为路由器,网关IP地址为自身静态IP地址
    local ipv4,mark, gw = netdrv.ipv4(socket.LWIP_ETH, "192.168.4.1", "255.255.255.0", "192.168.4.1")
    log.info("ipv4", ipv4,mark, gw)
    -- 等待以太网网口连接
    while netdrv.link(socket.LWIP_ETH) ~= true do
        sys.wait(100)
    end

    -- 插入sim卡,等待4G网络连接
    while netdrv.link(socket.LWIP_GP) ~= true do
        sys.wait(100)
    end

    -- 配置以太网络打开DHCP服务器
    dhcps.create({adapter=socket.LWIP_ETH})
    -- 配置DNS服务
    dnsproxy.setup(socket.LWIP_ETH, socket.LWIP_GP)
    -- 使用4G网络作为主网关出口
    netdrv.napt(socket.LWIP_GP)

    -- 若支持iper则建立iper服务器,用于吞吐测试
    if iperf then
        log.info("启动iperf服务器端")
        iperf.server(socket.LWIP_ETH)
    end    

end

-- 外部网络设备通过网线连接CH390H模块,通过4G网络进行http通信测试
function test_http_requet()
    -- sys.waitUntil("IP_READY")
    while 1 do
        sys.wait(300000)
        -- 注意这里会耗费sim卡4G网络流量,默认先屏蔽该功能,按需打开
        -- 定时通过http get请求来获取4K数据
        -- log.info("http", http.request("GET", "http://httpbin.air32.cn/bytes/4096", nil, nil, {adapter=socket.LWIP_ETH}).wait())
        log.info("lua", rtos.meminfo())
        log.info("sys", rtos.meminfo("sys"))
    end
end

-- 启动lan网络配置任务
sys.taskInit(network_setup)
-- 启动lan网络数据通信任务
sys.taskInit(test_http_requet)

5.2 WAN 功能测试

将脚本烧录进开发板,以太网正常 DHCP 后,获得 IP,6 秒一次循环向 http 服务器请求 4K 数据。

如下图,可以看到运行结果。

5.3 LAN 功能测试

将脚本烧录进开发板,将电脑其他上网途径关掉,仅打开以太网上网方式,通过网线将 Air780EGH外接的CH390H模块与电脑相连。

代码烧录成功,网线连接正常,电脑通过DHCP正确获取IP地址,并且 4G 模块正常联网的情况下,运行结果参考下图。

六、总结

本教程演示了 Air780EGH 以太网功能的两种使用方式,请根据具体场景选择您需要的 demo 即可。