Edit online

USB CAT1 使用说明

一般情况下,CAT.1 模组具有以下多种使用方式:

  • 用作一个openCPU,支持开发者在原有 SDK 固件的基础上进行二次开发,硬件上不需要外部 MCU 参与。
  • 用作一个高度封装网络协议栈的模组,对外提供 AT 指令来完成 TCP、UDP、http、LwM2M、FTP 等操作。

    协议栈运行在模组内部,硬件上需要一个 MCU 通过串口线与模组连接。

  • 用作一个USB device ECM/RNDIS 设备,提供基础的入网、射频等操作。

    CAT.1 模组相当于 OSI 架构中的 MAC+PHY 层,其协议栈运行在外部 MCU,需要通过 USB 将外部 MCU 与模组连接起来。

本章节以 ML307R 模组为例,讲解在 Luban-Lite 系统中将 CAT1 作为 USB device ECM/ RNDIS 设备的无线网络配置方法。合理配置 USB CAT1 无线网络可以达到 CAT.1 的极限速率(即上行 5Mbps,下行 10Mbps),并且可扩展性更强。

故障:
  • 如果出现模组一直都无法入网的情况,需要确定使用的手机卡是否欠费。

    此外,部分物联网卡模组无法使用,需要确定模组是否支持。

  • 部分模组在多次插拔后可能会出现稳定性问题,比如不响应 AT 指令,或者模拟出的 ACM口无法通讯的情况。此时可尝试拔掉模组后稍等片刻,再次插入。
  • 模组射频需要的电流较高,如果出现模组复位的情况,可尝试检查电源。
  • 如果出现能 ping 通网关但无法 ping 通外网百度的情况,可能表示模组未能成功入网,可使用 AT+MDIALUP? 命令确认模组是否正常入网。
Edit online

ML307R 模组说明

ML307R 模组对外共提供下列 interface:

  • AT 指令接口 (ACM)
  • PPP 指令接口 (ACM)
  • RNDIS 接口 (RNDIS)
  • ECM 接口 (ECM)
  • 手机 AT 接口 (ACM)
Luban-Lite 采用 “AT 指令接口+ RNDIS 接口” 的方式,详细说明如下所示:
  • AT 指令接口是 USB ACM 虚拟出来的一个串口,用于配置模组的工作模式及入网方式等。
  • RNDIS 接口用于收发以太网数据包并对接网络协议栈。

    针对 RNDIS 接口,USB 协议规范提供了统一的标准以及相应功能,因此仅需使能 SDK 中对应的配置即可。

Edit online

配置接口参数

Luban-Lite 通过 cherryUSB 协议栈来支持 RNDIS 设备,因此需要按照下列示例使能 cherryUSB 和 lwip 配置:

lwip 采用 RT-Thread 提供的 lwIP 版本。

Board options -->
[*] Using Usb1
    Select Usb1 mode (Host)  --->
Rt-Thread options > RT-Thread Components > Network
    [*] SAL: socket abstraction layer  --->
    -*- Enable network interface device  --->
    [*] LwIP: light weight TCP/IP stack  --->
Local packages options > Third-party packages options
    [*] CherryUSB: tiny and portable USB host/device stack for embedded system with USB IP  --->
    [*]   Enable usb host mode  --->
        [*]   Select usb host ip  --->
              Select chip with EHCI usb ip (AIC)  --->
        [*]   Enable usb cdc acm driver
        [*]   Enable usb rndis driver
        [*]   Use usb host template
Edit online

查看启动信息

完成配置后,编译下载运行,能在 log 中看到具体的枚举过程:

[I/USB] New high-speed device on Bus 0, Hub 1, Port 1 connected
[I/USB] New device found,idVendor:2ecc,idProduct:3012,bcdDevice:0100
[I/USB] The device has 5 interfaces
[I/USB] Enumeration success, start loading class driver
[I/USB] Loading rndis class driver (interfaces :0)[I/USB]Ep=83Attr=02Mps=512Interval=00Mult=00[I/USB]Ep=0c Attr=02Mps=512Interval=00Mult=00[I/USB] rndis init success
[I/USB] rndis query OID_GEN_SUPPORTED_LIST success,oid num :28
[W/USB] Ignore rndis query iod:00010101
[W/USB] Ignore rndis query iod:00010102
[W/USB] Ignore rndis query iod:00010103
[W/USB] Ignore rndis query iod:00010104
[I/USB] rndis query iod:00010106 success
[I/USB] rndis query iod:00010107 success
[W/USB] Ignore rndis query iod:0001010a
[W/USB] Ignore rndis query iod:0001010b
[W/USB] Ignore rndis query iod:0001010c
[W/USB] Ignore rndis query iod:0001010d
[W/USB] Ignore rndis query iod:00010116
[W/USB] Ignore rndis query iod:0001010e
[W/USB] Ignore rndis query iod:00010111
[I/USB] rndis query iod:00010114 success
[I/USB] rndis query iod:00010202 success
[W/USB] Ignore rndis query iod:00020101
[W/USB] Ignore rndis query iod:00020102
[W/USB] Ignore rndis query iod:00020103
[W/USB] Ignore rndis query iod:00020104
[W/USB] Ignore rndis query iod:00020105
[I/USB] rndis query iod:01010101 success
[I/USB] rndis query iod:01010102 success
[W/USB] Ignore rndis query iod:01010103
[W/USB] Ignore rndis query iod:01010105
[I/USB] rndis query iod:01010104 success
[W/USB] Ignore rndis query iod:01020101
[W/USB] Ignore rndis query iod:01020102
[W/USB] Ignore rndis query iod:01020103
[I/USB] rndis set OID_GEN_CURRENT_PACKET_FILTER success
[I/USB] rndis set OID_802_3_MULTICAST_LIST success
[I/USB] rndis MAC address ac:0c:29:a3:9b:6d
[I/USB] Register RNDIS Class:/dev/rndis
[I/USB] Create rndis rx thread
[I/USB] Loading cdc_data class driver (interfaces :1)[E/USB]do not support Class:0xff,Subclass:0x00,Protocl:0x00
[E/USB]do not support Class:0xff,Subclass:0x00,Protocl:0x00
[E/USB]do not support Class:0xff,Subclass:0x00,Protocl:0x00
Edit online

测试

通过 ifconfig 命令,可查看到名为 u1 的网络设备:

ifconfig

网络设备输出示例如下:

network interface device: u1 (Default)
MTU: 1500
MAC: ac 0c 29 a3 9b 6d
FLAGS: UP LINK_UP INTERNET_DOWN DHCP_ENABLE ETHARP BROADCAST IGMP
ip address: 192.168.0.100
gw address: 192.168.0.1
net mask  : 255.255.255.0
dns server #0: 192.168.0.1
dns server #1: 0.0.0.0

此时,可以直接通过 ping 命令查看网关是否可通。

ping 192.168.0.1
60 bytes from 192.168.0.1 icmp_seq=0ttl=128time=1 ms
60 bytes from 192.168.0.1 icmp_seq=1ttl=128time=0 ms
60 bytes from 192.168.0.1 icmp_seq=2ttl=128time=0 ms
60 bytes from 192.168.0.1 icmp_seq=3ttl=128time=0 ms