深度解析 3GPP TS 27.007:5 General commands (通用命令)

本文技术原理深度参考了3GPP TS 27.007 V19.4.0 (2025-09) Release 19 规范中,关于“5 General commands”的核心章节。本章是与蜂窝模组进行交互的“第一声问候”,我们将跟随工程师小李,学习如何通过这些基础命令,完成对模组身份的识别、通信语言的设定、用户身份的读取,以及开启“多任务处理”模式的钥匙。

写在前面:小李的“第一次亲密接触”

在系统学习了AT命令的宏观架构与基础语法后,我们的主角——物联网工程师小李,已经迫不及待地要与他“天眼”项目中的5G模组进行第一次“亲密接触”了。他将模组稳稳地固定在开发板上,连接好串口线,打开了熟悉的串口调试助手。

此时的模组,对于小李来说,还是一个“黑盒”。它是什么品牌?什么型号?固件版本是多少?里面插的SIM卡是否被正确识别?这些都是在他编写任何业务逻辑代码之前,必须弄清楚的基本问题。这就像我们在一个项目中引入一个新的软件库,首先要做的就是打印出它的版本号,调用它的初始化函数,确认它已经“活”过来了。

而完成这一系列“破冰”任务的“钥匙”,就藏在规范的第五章——“General commands”(通用命令)之中。这一章的命令,构成了与任何蜂-窝模组通信的起点。它们虽然看似简单,但每一个命令的背后,都关联着设备与网络世界建立联系的关键标识。让我们跟随小李,敲下第一行AT命令,开启这段探索之旅。


1. 模组身份大揭秘:用“ID四件套”验明正身

小李深吸一口气,在串口终端里敲下了 AT 并回车。模组迅速返回了 OK。很好,最基础的通信链路是通畅的。现在,他要开始对这个“黑盒”进行身份盘查。规范的5.1至5.4节,提供了一个标准的“身份识别四件套”。

ITU-T Recommendation V.250 includes “Generic DCE Control” commands with the prefix +G. These commands are for the identification of the TA. Four of those commands are adapted here to be the identification commands of the MT. Syntax is otherwise similar, but the prefix is +CG. TIA IS- 99 uses same commands for base station identification.

这段引文揭示了这些命令的“血统”——它们源自于ITU-T的通用DCE(数据通信设备)控制命令,但在3GPP体系中,为了特指蜂窝(Cellular)设备,前缀从+G(Generic)改为了+CG(Cellular General)。

1.1 AT+CGMI:你是谁家“出品”?(Request Manufacturer Identification)

这是小李敲下的第一条有意义的命令。了解制造商是后续寻求技术支持、查找文档的第一步。

Description

Execution command causes the TA to return one or more lines of information text , determined by the MT manufacturer, which is intended to permit the user of the TA to identify the manufacturer of the MT to which it is connected to.

小李的实践:

  1. 发送命令: AT+CGMI

  2. 模组响应:

    
    Quectel
    
    OK
    
    
  3. 解读与收获: 小李立刻就知道了,他手中的这块5G模组来自“移远通信(Quectel)”。这个信息让他心里有了底,他知道可以去移远的官方网站查找更详细的模组规格书和应用笔记了。

1.2 AT+CGMM:你的“大名”是什么?(Request Model Identification)

确认了“厂家”,接下来就是具体的“型号”。

Description

Execution command causes the TA to return one or more lines of information text , determined by the MT manufacturer, which is intended to permit the user of the TA to identify the specific model of the MT to which it is connected to.

小李的实践:

  1. 发送命令: AT+CGMM

  2. 模组响应:

    
    RM500Q-CN
    
    OK
    
    
  3. 解读与收获: 型号为RM500Q-CN。这个信息比制造商更具体,也更关键。“RM500Q”是产品系列名,“-CN”则可能代表面向中国(CN)市场的特定版本。小李知道,不同的型号后缀可能意味着支持的频段、认证等有所不同。他在后续软件适配时,甚至可以加入基于+CGMM响应的判断逻辑,来兼容不同型号的模组。

1.3 AT+CGMR:你的“版本号”是多少?(Request Revision Identification)

在软件开发的世界里,没有什么比“版本”更重要了。固件版本决定了模组的功能、性能,甚至是Bug的有无。

Description

Execution command causes the TA to return one or more lines of information text , determined by the MT manufacturer, which is intended to permit the user of the TA to identify the version, revision level or date, or other pertinent information of the MT…

小李的实践:

  1. 发送命令: AT+CGMR

  2. 模组响应:

    
    RM500QCNFBR11A05M4G
    
    OK
    
    ```3.  **解读与收获:** 这串复杂的版本号就是模组固件的“指纹”。当小李的“天眼”项目量产后,如果现场出现问题,他首先需要远程读取的就是这个版本号。通过对比版本,他可以快速判断问题是否是由于某个特定批次的固件Bug引起的。这也是他向模组原厂(FAE)寻求技术支持时,对方第一个会要求他提供的信息。
    

1.4 AT+CGSN:你的“身份证号”是多少?(Request Product Serial Number Identification)

这是“身份四件套”中技术含量最高,也是最核心的一环。它用于获取模组的唯一身份标识——IMEI。

Description

Execution command causes the TA to return IMEI (International Mobile station Equipment Identity number) and related information to identify the MT that the TE is connected to.

规范中定义了+CGSN命令的一个可选参数<snt> (serial number type),允许TE请求不同格式的序列号信息。

Table 5: +CGSN action command syntax

| Command | Possible response(s) |

| :--- | :--- |

| +CGSN[=<snt>]| … |

| +CGSN=? | +CGSN: (list of supported <snt>s) |

小李首先使用测试命令来查看模组支持哪些<snt>类型:

  1. 发送测试命令: AT+CGSN=?

  2. 模组响应:

    
    +CGSN: (0,1,2,3)
    
    OK
    
    
  3. 解读: 模组告诉他,<snt>参数支持0, 1, 2, 3四种值。接着,小李逐一尝试:

    • 请求类型 1 (IMEI):

      = 1 returns the IMEI (International Mobile station Equipment Identity)

      • 发送命令: AT+CGSN=1

      • 模组响应: +CGSN: "867854051234567"

      • 解读: 这是模组的15位IMEI号。IMEI由TAC(Type Allocation Code,前8位,由GSMA分配给厂商和型号)和SNR(Serial Number,后6位,厂商自行分配)以及一位校验码组成。它是设备在网络中的唯一硬件标识,运营商网络可以通过IMEI对设备进行识别和管理。

    • 请求类型 2 (IMEISV):

      = 2 returns the IMEISV (International Mobile station Equipment Identity and Software Version number)

      • 发送命令: AT+CGSN=2

      • 模组响应: +CGSN: "86785405123456701"

      • 解读: 这是IMEISV,共16位。它是在14位的IMEI(不含校验位)后面加上了2位的SVN(Software Version Number)。SVN代表了模组软件的版本。IMEISV在网络信令中有时会用到,它能让网络知道设备的硬件身份和软件版本。

    • 请求类型 3 (SVN):

      = 3 returns the SVN (Software Version Number)

      • 发送命令: AT+CGSN=3

      • 模组响应: +CGSN: "01"

      • 解读: 这直接返回了两位数的软件版本号SVN。

    • 默认请求 (类型 0 或不带参数):

      =0 (or omitted) and command successful:

      • 发送命令: AT+CGSN

      • 模组响应: 867854051234567 (注意,没有+CGSN:前缀)

      • 解读: 为了向后兼容,不带参数的AT+CGSN会直接返回序列号字符串,并且不带命令名。这个细节对于编写兼容性好的驱动程序非常重要。

通过“ID四件套”,小李已经彻底摸清了模组的“家底”。这个过程就像新员工入职,HR要检查他的身份证、毕业证、学位证一样,是建立信任和后续管理的基础。


2. 编码的艺术:用 AT+CSCS 命令与模组“说同一种语言”

在身份识别之后,小李要解决一个看似微小但极易引发“乱码”惨案的问题——字符编码。MCU(TE)和模组(TA)可能使用不同的方式来理解和表示字符,尤其是在处理非ASCII字符(如中文)时。AT+CSCS (Select TE character set) 命令就是用来统一双方“语言”的。

Description

Set command informs TA which character set is used by the TE. TA is then able to convert character strings correctly between TE and MT character sets.

Table 6: +CSCS parameter command syntax

| Command | Possible response(s) |

| :--- | :--- |

| +CSCS=[<chset>] | |

| +CSCS? | +CSCS: <chset> |

| +CSCS=? | +CSCS: (list of supported <chset>s) |

小李首先查询模组支持的字符集:

  1. 发送测试命令: AT+CSCS=?

  2. 模组响应:

    
    +CSCS: ("GSM","PCCP437","UCS2","UTF-8")
    
    OK
    
    
  3. 解读与选择:

    • "GSM": 3GPP TS 23.038定义的7-bit默认字母表。主要用于英文短信,对于物联网应用,除非有特殊省流量需求,一般不常用。

    • "UCS2": 16-bit通用多八位编码字符集。每个字符用两个字节表示,可以用来表示中文等。例如,AT+CSMS="UCS2"后,发送短信时就需要提供UCS2编码的字符串。

    • "UTF-8": 变长字节编码,是当今互联网应用的事实标准。它对ASCII字符只用1个字节,而对中文字符通常用3个字节。

    • "HEX": 这是一个“危险”但强大的模式。它告诉模组:“别翻译!我给你的就是最终的十六进制字符串,你直接当成二进制数据用就行。” 这在需要精确控制底层PDU格式时非常有用,但也极易出错。

小李的场景:

他的“天眼”项目需要上报地理位置的中文描述,并且与云平台交互的数据格式统一为UTF-8。因此,统一TE和模组的字符集为UTF-8是最佳选择。

  1. 发送设置命令: AT+CSCS="UTF-8"

  2. 模组响应: OK

设置完成后,当小李通过AT+CPBW写入中文联系人姓名,或者通过AT+CUSD发送包含中文的USSD指令时,他就可以直接在他的MCU代码中使用UTF-8编码的字符串,而不用自己手动转换为UCS2或其他编码,大大简化了开发。


3. 用户的“灵魂”:通过 AT+CIMI/CSUPI/CNAI 读取用户身份

模组的身份(IMEI)是硬件身份,而真正让设备得以接入运营商网络的,是用户的身份。这个身份存储在SIM卡中,通过AT+CIMI等命令读取。

3.1 AT+CIMI:读取“SIM卡之魂”IMSI

IMSI (International Mobile Subscriber Identity) 是运营商识别用户的唯一标识。

Description

Execution command causes the TA to return , which is intended to permit the TE to identify the individual SIM card or active application in the UICC (GSM or USIM) which is attached to MT.

Table 7: +CIMI action command syntax

| Command | Possible response(s) |

| :--- | :--- |

| +CIMI | <IMSI> |

| +CIMI=?| |

小李的实践:

  1. 发送命令: AT+CIMI

  2. 模组响应:

    
    460011234567890
    
    OK
    
    ```3.  **解读与分析:**
    
    *   **460:** 移动国家码(MCC),代表中国。
    
    *   **01:** 移动网络码(MNC),代表中国联通。
    
    *   **1234567890:** 移动用户识别码(MSIN)。
    
    获取到正确的IMSI,是设备能够成功注册到网络的最基本前提。小李的程序可以在启动时执行`AT+CIMI`,如果读取失败或返回错误,就可以判断SIM卡存在问题(未插好、损坏或被锁)。
    

3.2 5G时代的身份演进:+CSUPI+CNAI

随着5G的到来,为了增强安全性(防止通过空口嗅探IMSI)和支持更多样的接入方式,SUPI(Subscription Permanent Identifier)取代了IMSI成为主要的用户永久标识。

  • AT+CSUPI (Request 5G subscription permanent identifier):

    这条命令直接请求5G的SUPI。如果SUPI是基于IMSI构建的(最常见的情况),其格式通常是 imsi-<IMSI>

  • AT+CNAI (Request 5G network specific identifier):

    这条命令请求网络接入标识符(NAI)。SUPI的一种表现形式就是NAI,其格式类似于电子邮件地址,例如 [email protected]

小李的决策:

对于他的5G模-组,虽然AT+CIMI依然可用(为了兼容性),但使用AT+CSUPIAT+CNAI是更“面向未来”的做法。这体现了AT命令集随技术演进而不断补充和发展的特点。


4. “分身之术”:AT+CMUX 多路复用模式详解

这是第五章中技术上最复杂,但也极其强大的一个命令。AT+CMUX (Multiplexing mode) 允许在一个物理串口上,虚拟出多个逻辑上的串口通道。

Description

This command is used to enable/disable the 3GPP TS 27.010 multiplexing protocol control channel.

解决的痛点:

小李很快就预见到了一个问题:当“天眼”追踪器通过 ATD*99***1# 建立数据连接后,物理串口就进入了数据模式,变成了透明的数据通道,无法再发送AT命令。如果此时他想查询一下信号质量(AT+CSQ?)或者网络状态(AT+CGREG?),该怎么办?

答案就是+CMUX

工作原理:

一旦通过AT+CMUX命令进入多路复用模式,TE和TA之间的数据传输就不再是简单的原始数据流,而是遵循3GPP TS 27.010协议的帧结构。这个协议允许建立多个“数据链路连接”(DLCs),每个DLC表现为一个独立的虚拟串口。

  • DLC 0 通常作为控制通道,专门用于传输AT命令和响应。

  • 其他DLCs (如DLC 1, 2, …) 可以被绑定到不同的业务上,例如一个用于PPP数据连接,一个用于输出GPS的NMEA数据流等。

Table 8: +CMUX parameter command syntax

(由于表格过于庞大,此处仅列出其结构和核心参数进行解读)

| Command | Possible response(s) |

| :--- | :--- |

| +CMUX=<transparency>[,<subset>...<k>] | … |

核心参数解读:

  • <transparency>: 透明度模式。0代表基本模式,1代表高级模式。高级模式支持更复杂的流控和错误恢复。

  • <port_speed>: TE-TA接口的物理波特率。

  • <N1>: 帧的最大长度(Maximum frame size)。

  • <T1>: 应答计时器(Acknowledgement timer)。定义了发送一个I帧后,等待对方确认的超时时间。

  • <N2>: 最大重传次数(Maximum number of re-transmissions)。

  • <T2>: 响应计时器(Response timer)。

  • <k>: 窗口大小(Window size),用于滑动窗口流控。

小李的实践蓝图:

  1. 启动CMUX: 在MCU程序初始化阶段,发送AT+CMUX=0。模组返回OK后,物理串口的通信协议就从原始字节流切换到了CMUX帧模式。

  2. 多任务并行:

    • MCU在虚拟串口0 (DLC 0) 上,可以随时发送AT+CSQ?, AT+CGREG?等命令,并接收响应。

    • 同时,MCU在虚拟串口1 (DLC 1) 上,执行PPP拨号,建立数据连接,并进行TCP/UDP数据收发。

    • 如果模组还输出了GNSS数据,他可以再开启虚拟串口2 (DLC 2),专门接收NMEA数据。

通过+CMUX,小李的MCU真正实现了“一心多用”,在保持数据业务不中断的同时,还能对模组进行实时的监控和管理,这对于一个高可靠性的物联网产品来说是不可或缺的能力。


总结

第五章“通用命令”是每一位嵌入式通信开发者的“必修第一课”。通过本章的学习,小李已经从一个面对“黑盒”模组的初学者,成长为一个能够清晰地识别设备、设定通信环境、并规划复杂交互模式的入门工程师。

  • 身份识别 (+CGMI+CGSN) 是建立信任和可追溯性的基础。

  • 字符集设定 (+CSCS) 是保证数据正确传输、避免“乱码”的关键。

  • 用户身份读取 (+CIMI/+CSUPI) 是设备接入网络的前提。

  • 多路复用 (+CMUX) 则是从“单线程”思维迈向“多线程”并行处理的高级技能,是构建复杂、健壮应用的利器。

掌握了这些“通用”技能后,小李已经为深入更具体的网络服务和数据业务命令做好了充分的准备。他的“天眼”项目,正稳步地从一块开发板,向着一个真正的智能物联产品迈进。


FAQ:快速问答

Q1:IMEI, IMSI, SUPI 这些标识符有什么区别?哪个最重要?

A1:它们都是重要的身份标识,但作用不同:

  • IMEI (International Mobile Equipment Identity):设备的身份标识,固化在模组硬件中,全球唯一。相当于你的手机的序列号

  • IMSI (International Mobile Subscriber Identity):用户的身份标识,存储在SIM卡中,全球唯一。相当于你的手机号码背后的用户身份

  • SUPI (Subscription Permanent Identifier): 是IMSI在5G时代的升级版,同样是用户身份标识,但形式更多样、安全性更高。

对于网络接入来说,IMSI/SUPI 是必需的,因为它标识了付费的用户。IMEI 则用于网络对设备的管理、追踪和黑名单限制。

Q2:我只是通过模组传输纯英文和数字,还需要设置AT+CSCS吗?

A2:即使只传输ASCII字符,显式地设置AT+CSCS也是一个好习惯。通常建议设置为"UTF-8""IRA"(国际参考字母表,基本等同于ASCII)。这样做可以避免因模组默认字符集不确定而导致的潜在问题。将AT+CSCS作为初始化序列的一部分,可以增强代码的确定性和可移植性。

Q3:AT+CMUX看起来很复杂,我是否必须使用它?

A3:不是必须的,但强烈推荐。如果你的应用非常简单,例如设备只在启动时上报一次数据然后就休眠,那么可以不使用+CMUX。但对于绝大多数需要保持长时间在线、或者在数据传输过程中需要进行状态监控的应用(如“天眼”追踪器),使用+CMUX几乎是唯一的选择。它能让你在数据业务进行中,还能通过独立的控制通道发送AT命令,极大地提升了设备的可管理性和调试效率。

Q4:为什么AT+CGSN(不带参数)的响应格式和其他+CG...命令不一样,没有+CGSN:前缀?

A4:这是为了向后兼容。在3GPP对AT命令进行标准化之前,许多厂商已经有了自己的AT+CGSN实现,它们通常直接返回IMEI字符串。为了让那些为旧模组编写的软件也能在新的标准化模组上运行,3GPP保留了这种不带前缀的响应格式作为默认行为。而通过添加参数(如AT+CGSN=1),则启用带有+CGSN:前缀的新标准格式,这样新的软件就可以进行更精确的解析。

Q5:当我执行AT+CMUX后,我的串口程序就收不到任何数据了,这是为什么?

A5:因为一旦AT+CMUX成功执行,物理串口上的数据流就不再是简单的ASCII字符了,而是变成了遵循TS 27.010协议的二进制帧。你的普通串口接收程序无法解析这种帧格式。你需要使用或编写一个支持CMUX协议的客户端,它会在底层处理帧的打包、解包、校验和虚拟通道(DLC)的管理,然后为你的上层应用提供多个独立的虚拟串口接口。许多操作系统(如Linux)的内核已经内置了CMUX驱动。