4G Modem 模块示例

功能说明

本示例演示如何使用 lisa_modem 的 socket 风格接口进行蜂窝网络通信,包括:

  • modem 初始化

  • DNS 域名解析

  • TCP socket 建立、发送、接收、关闭

  • UDP sendto / recvfrom

  • 打印 UDP 响应源地址

示例内部不再依赖默认全局 modem,而是:

  • 通过 sample_modem_open() 按 backend 创建 lisa_modem_t *

  • 通过 lisa_modem_*_on() 实例接口执行 DNS / socket 操作

Backend 模式

本 sample 现在支持两种 AT 传输后端,默认使用 UART。

1. UART backend(默认)

  • 使用 src/modem_backend_uart.c

  • 通过 lisa_modem_create_uart() 打开 modem

  • 默认 AT 设备为 uart2

  • sample 内部会覆盖 lisa_uart2_pinmux(),默认把 uart2 配到 PA15/PA16

2. USB AT backend(overlay)

  • 使用 src/modem_backend_usb_at.c

  • 通过 CherryUSB Host 枚举 /dev/ttyUSBx

  • 当前仅匹配 EC801E USB ECM

  • 当前仅使用 AT 接口 intf=3

  • 通过 at_transport_usbh_serial_create() 包装 USB 串口

  • 再通过 lisa_modem_create_with_transport() 创建 modem

注意:

  • “找 AT 口”的逻辑保留在 sample 内部,不放到 lisa_modem 或 CherryUSB 侧

  • 这个 USB backend 只替换 AT 传输层,不会在 sample 中自动执行 AT+QCFG="usbnet"AT+QCFG="nat"AT+QNETDEVCTL

  • 如果你的 USB 方案依赖 ECM 数据面,请先用独立流程把模块准备好;本示例仍然走 lisa_modem 的 AT socket 能力

硬件连接

UART 模式

  • 4G 模块通过 UART 与主控连接

  • 默认使用 uart2

  • 需要根据实际硬件连接修改 src/main.c 中的 MODEM_UART_DEVICE

USB AT 模式

  • 目前只支持 ARCS EVB 作为 USB Host 接入 EC801E

  • 需要把 EC801E 的 USB 口接到开发板 USB_ARCS

  • 线材必须支持数据通信

  • 如果开发板默认是 Device 角色,需要先完成 Host 侧硬件改造

示例流程

  1. 初始化文件系统和 KV 存储

  2. 根据 backend 打开 modem

  3. 等待网络注册

  4. 解析 httpbin.org

  5. 建立 TCP 连接并发送 HTTP GET

  6. 接收服务器响应

  7. 解析 ntp.aliyun.com

  8. 发送 UDP NTP 请求并通过 recvfrom() 读取响应

关键配置

使用前请检查 src/main.c 中的配置:

#define MODEM_UART_DEVICE   "uart2"
#define TEST_SERVER_HOST    "httpbin.org"
#define TEST_SERVER_PORT    80
#define UDP_TEST_HOST       "ntp.aliyun.com"
#define UDP_TEST_PORT       123

编译

UART backend

./build.sh -C -S samples/network/modem -DBOARD=arcs_evb

USB AT backend

./build.sh -C -S samples/network/modem -DBOARD=arcs_evb -DCONFIG_FILES=prj_usb_at.conf

prj_usb_at.conf 会额外启用:

  • CONFIG_SAMPLE_MODEM_BACKEND_USB_AT=y

  • CONFIG_CHERRYUSB=y

  • CONFIG_CHERRYUSB_HOST=y

  • CONFIG_CHERRYUSB_HOST_MUSB_LISA=y

  • CONFIG_CHERRYUSB_HOST_CDC_ECM=y

  • CONFIG_CHERRYUSB_HOST_GSM=y

  • CONFIG_CHERRYUSB_HOST_CDC_ECM_NETIF=n

同时会切换到适合 CherryUSB Host 的单核内存布局,并保留 EC801E 的 ECM 类驱动加载能力,但不在 lwIP 中注册 USB 网卡,不影响 USB AT 口创建。

烧录

编译完成后,使用 SDK tools 目录下的 cskburn 工具烧录固件:

./tools/burn/cskburn -s /dev/ttyUSB0 -b 3000000 0x0 build/arcs.bin -C arcs

Note

烧录参数说明

  • -s /dev/ttyUSB0:串口设备路径,需要根据实际情况修改 - Linux 系统:通常是 /dev/ttyUSB0/dev/ttyACM0 - 可通过 ls /dev/tty* 命令查看可用串口设备 - 不同开发板或 USB 转串口芯片可能使用不同的设备名

  • -b 3000000:烧录波特率(3Mbps)

  • 0x0:烧录起始地址

  • build/arcs.bin:编译生成的固件路径

  • -C arcs:芯片类型

注意事项

  • 确保开发板已正确连接到电脑

  • 如果无法识别串口设备,请检查 USB 连接线是否正常,或尝试其他 USB 端口

关键 API

API

说明

sample_modem_open()

按 sample backend 创建 modem

sample_modem_close()

销毁 sample 创建的 modem

lisa_modem_dns_resolve_on()

DNS 解析

lisa_modem_socket_open_on()

创建 TCP/UDP socket

lisa_modem_socket_connect_on()

建立 TCP 连接

lisa_modem_socket_send_on()

发送 TCP 数据

lisa_modem_socket_recv_on()

接收 TCP 数据

lisa_modem_socket_sendto_on()

发送 UDP 数据

lisa_modem_socket_recvfrom_on()

接收 UDP 数据并带回源地址

lisa_modem_socket_close_on()

关闭 socket

验证要点

  • UART 默认配置可编译

  • USB AT overlay 可编译

  • DNS 解析

  • TCP connect / send / recv / close

  • UDP sendto / recvfrom

  • recvfrom src= 源地址打印

注意事项

  1. 使用 USB AT 模式时,当前只支持 VID:PID=0x2c7c:0x0903 的 EC801E USB ECM 设备。

  2. 使用 USB AT 模式时,当前只扫描并匹配 AT 接口 intf=3

  3. 发送和接收都带超时参数,网络较差时请适当调大。

  4. UDP 响应依赖运营商网络和目标服务器,可优先关注是否打印 recvfrom src=...

相关文档