USB接口

概述

Air724UG 支持1路高速USB接口,符合USB2.0规范,支持高速(480Mbps)和全速(12Mbps)模式。该接口可用于AT命令传送,数据传输,软件调试和软件升级。

管脚定义

USB接口定义:

管脚名

管脚号

作用

USB_DP

16

USB差分数据正,需要控制到90欧姆差分阻抗

USB_DM

15

USB差分数据负,需要控制到90欧姆差分阻抗

VBUS

14

USB电源,用于USB插入检测

GND

17

参考设计

参考设计电路如下所示: USB 参考设计

注意事项如下: 1. USB走线需要严格按照差分线控制,做到平行和等长; 2. USB走线的阻抗需要控制到差分90欧姆; 3. 需要尽可能的减少USB走线的stubs,减少信号发射; 4. 在靠近USB连接器或者测试点的地方添加TVS保护管,由于USB的速率较高,需要注意TVS管的选型,保证选用的TVS保护管的寄生电容小于1pF 1. VBUS作为USB插入检测,必须连接USB电源或者外接电源,否则USB无法被检测到,另外VBUS的检测电压要大于3.6V

AT版本相关控制指令

设置USB模式:AT+SETUSB

语法规则:

命令类型

语法

返回

设置命令

AT+SETUSB=<mode>[,<vid>,<pid>]

OK

查询命令

AT+SETUSB?

mode: <mode>

Vid: <vid>

Pid: <pid>

OK

测试命令

AT+SETUSB=?

OK

注意事项

该命令可以关机自动保存

参数定义:

参数

定义

取值

对取值的说明

<mode>

USB的使用模 式,设置命令的必选参数

1

RNDIS+ AT+PPP+DIAG模式,缺省值

2

ECM+AT+PPP+DIAG模式

3

保留

<vid>

Vender id,设置命令的可选参数

Air720U/Ai r724U系列缺省值为0x1782

<pid>

Product id,设置命令的可选参数

Air720U/Ai r724U系列缺省值为0x4e00

举例:

命令(→)/ 返回(←)

实例

解释和说明

AT+SETUSB=2

设成ECM网卡

OK

AT+SETUSB?

mode: 1

vid: 0x1782

pid: 0x4e00

OK

开关USBAT+USBSWITCH

语法规则:

命令类型

语法

返回

设置命令

AT+USBSWITCH=<mode>

OK

查询命令

AT+USBSWITCH?

+USBSWITCH: <mode>. <desc>

OK

测试命令

AT+USBSWITCH=?

+USBSWITCH: (0,1)

  1. Disable USB

  1. Enable USB

OK

注意事项

关闭USB后就不能 通过USB虚拟串口再启用USB了

参数定义:

参数

定义

取值

对取值的说明

<mode>

开关USB

0

关闭USB

1

开启USB

<desc>

字符串补充说明

Disabled

<mode>为0时

Enabled

<mode>为1时

举例:

命令(→)/ 返回(←)

实例

解释和说明

AT+USBSWITCH=0

关闭USB

OK

AT+USBSWITCH?

+USBSWITCH: 0. Disabled

OK

USB功能设置:**AT*USB**

语法规则:

命令类型

语法

返回

设置命令

AT*USB=<key>,<value>

OK

查询命令

AT*USB?

*USB

CPTRACE:<value>

NETMODE:<value>

DIAG:<value>

RSTDELAY:<value>

OK

测试命令

AT*USB=?

OK

注意事项

更改的设置要用AT*USB保存才能在重启后也生效

参数定义:

参数

定义

取值

对取值的说明

<key>

要设置的选项

CPTRACE

打开或关闭CP Trace

NETMODE

启用Rndis或Ecm

DIAG

打开或关闭CP和AP Trace

RSTDELAY

设置Reset延时时间

<value>

0

关闭相应功能或启用Rndis

1

开启相应功能或启用Ecm

1-63335

设置RSTDELAY时间,单位us

举例:

命令(→)/ 返回(←)

实例

解释和说明

AT*USB=RSTDELAY,20

设置Reset延时时间

OK

AT*USB

保存设置

OK

LUAT开发相关接口

USB的虚拟AT口可以被Lua代码控制,作为普通的串口收发数据。

-- 此时AT口收到的数据不会传给AT引擎处理,而是交给Lua里设置的回调函数
uart.setup(uart.USB, 0, 0, uart.PAR_NONE, uart.STOP_1)

-- 设置有数据到时的回调函数
uart.on(uart.USB, "receive", usbreader)

-- 简单打印收到的数据
local function usbreader()
    local s
    while true do
        s = uart.read(uart.USB, "*l", 0)
        if string.len(s) ~= 0 then
            log.info("usb rcv", s)
        else
            break
        end
    end
end

CSDK开发相关接口

与Lua一样,在CSDK中也可以控制虚拟AT口。

T_AMOPENAT_UART_PARAM uatCfg;
memset(&uatCfg, 0, sizeof(T_AMOPENAT_UART_PARAM));
uatCfg.baud = OPENAT_UART_BAUD_115200;
uatCfg.dataBits = 8;
uatCfg.stopBits = 1;
uatCfg.parity = OPENAT_UART_NO_PARITY;
uatCfg.flowControl = OPENAT_UART_FLOWCONTROL_NONE;
uatCfg.txDoneReport = FALSE;
uatCfg.uartMsgHandle = NULL;

// 打开at uart
iot_uart_open(UART_USB, &uatCfg);

CHAR buff[64];
CHAR xbuf[128];
UINT32 len = 0;

while (1)
{
    // 读取数据
    len = iot_uart_read(UART_USB, buff, 64, 0 /*timeout not yet support*/);
    if (len)
    {
        snprintf(xbuf, len, "%s", buff);
        iot_debug_print("recv %s", xbuf);
    }
}

相关资料以及购买链接

相关开发板购买链接 Air724UG开发板 Air724 开发板使用说明 相关软件资料下载

常见问题

https://doc.luatos.wiki/638/ ### 1.识别不到usb的可能情况: (1)没有安装usb驱动 (2)DM、DP短路、接反或者被打坏 (3)VBUS引脚没接或者VBUS电压值低于3.6V (4)查看模块是否正常开机(测量1.8V引脚电压,开机是1.8v) (5)如果电脑可以进入下载模式,但是识别不到USB端口,有可能是模块变砖,可以重新烧录救砖固件恢复

2.如何关闭usb枚举出来的端口

模块开机后,usb默认会枚举出Modem、AT、AP、CP四个端口,可通过AT+USBSWITCH命令打开或者断臂usb枚举功能 * AT版本 打开USB端口枚举功能:AT+USBSWITCH=1 关闭USB端口枚举功能:AT+USBSWITCH=0 * Luat版本 打开USB端口枚举功能:ril.request(“AT+USBSWITCH=1”) 关闭USB端口枚举功能:ril.request(“AT+USBSWITCH=0”)