nvidia agx orin驱动Quectel EM05-CE(4G)

一、说明

1.1 为什么使用4G模组

核心优势具体说明应用场景示例
高速数据传输理论速率达150Mbps(下行),支持高清视频、大文件实时传输。远程监控摄像头、车载娱乐系统、工业设备固件升级。
低延迟平均延迟30-50ms,满足实时交互需求(如自动驾驶、远程控制)。无人机直播、VR/AR设备、医疗机器人手术。
广泛覆盖全球主流运营商支持,城市/郊区/高速公路信号稳定。智能电表、共享单车锁、物流车辆追踪。
低功耗设计支持PSM/eDRX模式,待机电流低至微安级,延长电池寿命。智能水表、环境监测传感器、可穿戴设备。
成熟产业链模组成本低至20−50,开发工具链完善,缩短产品上市周期。智能POS机、零售终端、农业灌溉控制系统。
高可靠性支持AES加密、网络认证,故障率低于新兴技术(如LoRa)。金融支付终端、工业自动化控制、远程医疗设备。
兼容性支持2G/3G回退,适配全球频段,无需更换硬件即可升级。跨境物流设备、国际旅行路由器、出海产品。

1.2 4G模组和其他通信技术对比

比维度4G模组5G模组Wi-Fi/蓝牙LoRa/NB-IoT
速率高速(150Mbps)超高速(10Gbps)中速(100Mbps)低速(50Kbps)
延迟30-50ms1-10ms10-100ms100ms-1s
覆盖范围广(全球)局部(城市热点)短(100米内)超广(偏远地区)
功耗中低(支持省电模式)超低
成本低(20−50)高($100+)极低(5−10)低(10−20)
适用场景移动设备、实时监控、工业控制自动驾驶、云游戏、8K视频智能家居、室内定位智能抄表、环境监测

1.3  Quectel EM05-CE  4G模组

EM05移远通信的一款带分集接收功能的 LTE/UMTS/HSPA+无线通信模块,支持 LTE-FDDLTE-TDD、DC-HSDPA、HSPA+HSDPAHSUPAWCDMA CDMA 网络数据连接,可提供 GNSS 功能。EM05 模块有三种型号:EM05-CEEM05-CML EM05-E。EM05 模块支持的频段如下表所示。
性能指标如下:
项目详情
基本信息LTE 类别 4 模块,采用标准 M.2 外形尺寸(NGFF),专为 M2M 和 IoT 应用优化
网络制式支持 LTE-FDD、LTE-TDD、DC-HSDPA、HSPA+、HSDPA、HSUPA、WCDMA、CDMA 1X/EVDO 和 GSM/GPRS/EDGE 等多种网络制式,其中 WCDMA 支持频段 B1/B8,CDMA 1X/EVDO 支持频段 BC0
数据传输速率最大下行速率 150Mbps,最大上行速率 50Mbps
天线与连接MIMO 技术,支持 Antenna DL MIMO 和 Rx-diversity,通常配备 3 根天线座
功能特性支持 DFOTA(设备固件空中下载技术)和 DTMF(双音多频)等功能
协议与接口内置丰富的互联网协议,集成多个工业标准接口,通过 AT 指令控制
操作系统支持提供适用于 Windows XP、Windows Vista、Windows 7、Windows 8/8.1、Windows 10、Linux、Android 等操作系统的 USB 驱动程序
应用领域工业路由器、工业 PDA、坚固耐用的平板电脑、视频监控、数字标牌、远程监控系统、手持移动设备、无线 POS 系统、智能计量系统等
封装形式M.2(NGFF)封装,超薄、紧凑,便于嵌入到小尺寸产品中

二、电路图设计

 

2.1 核心模块与接口

  • M.2 接口:作为模块物理连接基础,定义引脚功能,实现模块与主板的数据、电源交互,图中围绕 M.2 展开各类信号走线。
  • Quectel EM05 - CE:4G 通信核心,处理无线数据收发、协议转换,依托 M.2 接口与外部电路协同,实现 4G 网络接入。

2.2 电源电路

  • VDD_3V3:为模块及周边电路提供 3.3V 电源,如给电容 C96、C97 供电,保障模块基础工作电压;经电阻(如 R211 等)分压、限流,为特定引脚或电路供电。
  • 电容作用:C96(10uF)、C97(0.1uF )等是滤波电容,前者滤除低频干扰,后者滤除高频噪声,稳定电源电压,确保模块供电纯净。

2.3 SIM 卡电路(USIM 相关)

  • 信号定义
    • USIM_RST_N(复位)、USIM_CLK(时钟)、USIM_DAT(数据):是 SIM 卡通信关键信号,与模块交互,实现身份认证、数据传输,类似标准 SIM 卡接口时序,保障模块识别、使用 SIM 卡联网。
    • USIM_VDD(电源):为 SIM 卡提供工作电压,通过电路控制供电,确保 SIM 卡上电、断电符合流程;USIM_DET(检测):用于检测 SIM 卡是否插入,反馈状态给模块,辅助模块初始化 SIM 卡通信。
  • 电阻与滤波:电阻(如 R220、R222 等)起限流、分压作用,保护 SIM 卡信号;部分电路可能有隐性滤波设计,保障 SIM 卡通信信号稳定,避免干扰导致认证失败。

2.4 数据通信接口

  • USB 接口:图中 USB 相关引脚(如 USB_DP、USB_DN ),是模块与主机(如工控板、电脑)的数据通道,用于传输 4G 网络数据(如上网流量)、模块配置指令(AT 指令交互 ),实现 “模块联网 - 主机数据收发” 功能。
  • PCIE 接口:PCIE 信号(如 PCIE_RX、PCIE_TX ),提供高速数据传输通道,满足大带宽需求(如高清视频回传、高速数据采集 ),拓展模块数据交互能力,适配不同应用场景对速率的要求。

2.5 控制与状态信号

  • WWAN LED#:模块状态指示灯控制信号,可通过该信号驱动外部 LED,显示模块工作状态(如联网、待机、故障 ),直观反馈模块运行情况。
  • Power_OFF#:模块关机控制信号,主机或外部电路可通过该信号控制模块上电、下电,实现节能或重启模块等操作,管理模块电源状态。

2.6 天线相关

  • ANT 引脚:图中天线接口(如 GND_ANT 、各类天线信号引脚 ),用于连接 4G 天线,接收、发射无线信号,保障模块与基站通信;通过合理的天线设计(阻抗匹配、布局 ),提升信号强度、稳定性,优化网络连接质量。

2.7 其他辅助电路

  • 电阻(R 系列):除上述功能,电阻还用于信号分压、限流,匹配电路阻抗,如 USB、PCIE 信号线路上的电阻,保障信号电平符合接口标准,避免信号过冲、欠压导致通信异常。
  • 电容(C 系列):除电源滤波,部分电容用于信号耦合、去耦,如数据信号线上的小容值电容,隔离直流、传递交流信号,同时滤除信号线上的噪声,保障数据传输准确。

 三、驱动设计

 第一步:添加VID 和PID

vim drivers/usb/serial/option.c
# 增加如下
static const struct usb_device_id option_ids[] = {
        { USB_DEVICE(0x2C7C, 0x0125)},  

第二步:使用USBNet 驱动

vim drivers/usb/serial/option.c
# 增加如下
static int option_probe(struct usb_serial *serial,
                        const struct usb_device_id *id)
{                       
        struct usb_interface_descriptor *iface_desc =
                                &serial->interface->cur_altsetting->desc;
        unsigned long device_flags = id->driver_info;
        
        /* Never bind to the CD-Rom emulation interface */
        if (iface_desc->bInterfaceClass == USB_CLASS_MASS_STORAGE)
                return -ENODEV;
                
        /*      
         * Don't bind reserved interfaces (like network ones) which often have
         * the same class/subclass/protocol as the serial interfaces.  Look at
         * the Windows driver .INF files for reserved interface numbers.
         */
        if (iface_is_reserved(device_flags, iface_desc->bInterfaceNumber))
                return -ENODEV;
                
        /*      
         * Allow matching on bNumEndpoints for devices whose interface numbers
         * can change (e.g. Quectel EP06).
         */
        if (device_flags & NUMEP2 && iface_desc->bNumEndpoints != 2)
                return -ENODEV;
        // 新增
        if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)) {
                __u16 idProduct = le16_to_cpu(serial->dev->descriptor.idProduct);
                struct usb_interface_descriptor *intf = &serial->interface->cur_altsetting->desc;
                if (intf->bInterfaceClass != 0xFF || intf->bInterfaceSubClass == 0x42) {
                        //ECM, RNDIS, NCM, MBIM, ACM, UAC, ADB
                        return -ENODEV;
                }       
                
        if ((idProduct&0xF000) == 0x0000) {
                //MDM interface 4 is QMI
                if (intf->bInterfaceNumber == 4 && intf->bNumEndpoints == 3
                        && intf->bInterfaceSubClass == 0xFF &&
                        intf->bInterfaceProtocol == 0xFF)
                        return -ENODEV;
                }       
        }       
        // 结束
        /* Store the device flags so we can use them during attach. */
        usb_set_serial_data(serial, (void *)device_flags);

        return 0;
}

第三步:修改内核配置

CONFIG_USB_SERIAL

CONFIG_USB_SERIAL_WWAN

CONFIG_USB_SERIAL_OPTION

确认是否打开,可以menuconfig搜索或者grep筛选配置文件

第四步:添加零包机制

vim drivers/usb/serial/usb_wwan.c

该代码可以不修改,默认代码中已经开启了零包机制。手册要改的地方:

 内核源码已有内容:

 第五步:添加Reset-resume 机制

vim drivers/usb/serial/option.c

该代码可以不修改,默认代码中已经开启了零包机制。手册要改的地方:

内核源码已有内容:

第六步: QMI_WWAN 驱动

(1)、内核配置:

CONFIG_USB_NET_DRIVERS

CONFIG_USB_USBNET

CONFIG_USB_NET_QMI_WWAN

CONFIG_USB_WDM 上述配置后,这个也就配置好了

(2)、

vim drivers/net/usb/Makefile

obj-${CONFIG_USB_NET_QMI_WWAN} += qmi_wwan_q.o #add by why.20231109

obj-$(CONFIG_USB_NET_QMI_WWAN) += qmi_wwan.o

(3)、交叉编译V1.6.1,为后来的5G模组做准备

export CROSS_COMPILE=/opt/nvidia/bin/aarch64-buildroot-linux-gnu-

make

第六步:验证

输出如下表示驱动成功

执行:dmesg  grep qmi
输出:
4.245366] usbcore: registered new interface driver qmi_wwan_q
4.251456] usbcore: registered new interface driver qmi_wwan
8.991415] qmi_wwan_q 1-4.4:1.4: cdc-wdm0: USB WDM device
8.998449] qmi_wwan_q 1-4.4:1.4: Quectel Android work on RawIP mode
9.005310] qmi_wwan_q 1-4.4:1.4:rx_urb_size =1520
9.010633] qmi_wan_q 1-4.4:1.4 wwan0: register 'qmi_wwan_q' at usb-3610000.xhci-4.4, WWAN/QMI device,fe:cc:f2:6e:42:15
root@baidu-desktop:/home/baidu#./quectel-CM
[11-08_16:40:11:173] QConnectManager_Linux_V1.6.1
[11-08_16:40:11:174] Find /sys/bus/usb/devices/1-4.4 idVendor=0x2c7c idProduct=0x125,bus=0x001, dev=0x003
[11-08_16:40: 11:174] Auto find qmichannel = /dev/cdc-wdm0
[11-08_16:40: 11: 174] Auto find usbnet_adapter = wwan0
[11-08_16:40:11:174] netcard driver = qmi_wwan_q, driver version = V1.2.0.23
[11-08_16:40: 11:174] Modem works in QMI mode
[11-08_16:40:11:182] cdc_wdm_fd=7
[11-08_16:40:11:289] Get clientWDS =7
[11-08_16:40:11:322] Get clientDMS = 1
[11-08_16:40:11:354] Get clientNAS = 2
[11-08_16:40:11:386] Get clientUIM = 1
[11-08_16:40:11:418] Get clientWDA =1
[11-08_16:40:11:450] requestBaseBandVersion EM05CEFCR06A04M1G_ND
[11-08_16:40:11:577] requestGetSIMStatus SIMStatus: SIM_READY
[11-08_16:40:11:611] requestGetProfile[1]///0/IPV4V6
[11-08_16:40:11:643] requestRegistrationState2 MCC: 460, MNC: 0, PS: Attached, DataCap: LTE
[11-08_16:40:11:673] requestQueryDataCal1 IPv4ConnectionStatus: DISCONNECTED
[11-08_16:40:11:673] ifconfig wwan0 0.0.0.0
[11-08_16:40:11:679] ifconfig wwan0 down
[11-08_16:40:12:090] requestSetupDataCall WdsConnectionIPv4Handle:0x87248e00
[11-08_16:40:12:219] ifconfig wwan0 up
[11-88_16:40:12:226] No default.script found, it should be in '/usr/share/udhcpc/' or '/etc//udhcpc' depend on your udhcpc version!
[11-08_16:40:12:226] busybox udhcpc -f -n -q -t 5 -i wwan0
sh: 1: busybox: not found
[11-08_16:40: 12: 229] ip -4 address flush dev wwan0
[11-08_16:40:12: 255] ip -4 address add 10.6.139.58/30 dev wwan0
[11-08_16:40: 12:257] ip -4 route add default via 10.6.139.57 dev wwan0
执行:ifconfig
输出:
wwan0: flags=193<UP,RUNNING,NOARP> mtu 1500
    inet 10.6.139.58 netmask 255.255.255.252
    inet6 fe80::fccc:f2ff:fe6e:4215 prefixlen 64 scopeid 0x20<1ink>
    ether fe:cc: f2: 6e:42:15 txqueuelen 1000(Ethernet)
    RX packets 16 bytes 1742 (1.7 KB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 19 bytes 2210 (2.2 KB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

执行"ls dev/cdc-wdm0",显示存在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坏一点

您的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值