深度解析 3GPP TS 27.007:8 Mobile termination control and status commands (移动终端控制与状态命令)

本文技术原理深度参考了3GPP TS 27.007 V19.4.0 (2025-09) Release 19 规范中,关于“8 Mobile termination control and status commands”的核心章节。本章是AT命令集中最贴近“硬件”和“设备本体”的一章,我们将深入探索如何通过AT命令,将一个蜂窝模组从一个单纯的网络接口,转变为一个可被精细管理的、具备人机交互能力的智能设备。

写在前面:小李的“天眼”进化论——从“黑盒”到“水晶盒”

经过前几个章节的学习,我们的物联网工程师小李已经成功打通了“天眼”追踪器与5G网络之间的数据链路。他的原型机现在能够成功附着网络、激活PDU会话,并将模拟的位置数据上报到云端。然而,这个原型机仍然是一个“黑盒”,它的内部状态对外界来说是未知的。

为了让“天眼”项目从实验室走向真实的部署环境,小李必须解决一系列新的问题:

  • 现场诊断:维修人员在现场如何快速判断设备状态?

  • 用户交互:设备是否需要一个按钮,用于紧急上报或手动唤醒?

  • 电源管理:如何精确控制设备的射频状态,以在待机和传输之间实现最佳能效比?

  • 信息存储:如何将一些关键的联系号码或配置信息(如服务器地址)固化在设备中?

为了解决这些问题,小李在“天眼”追踪器的第二版原型上增加了一个小巧的OLED显示屏、一个物理按键和一个电池电量计。现在,他需要学习如何通过AT命令来“驱动”这些新的外设,并将模组的内部状态“透明化”。

所有这些“内功心法”,都详细规定在规范的第八章——“Mobile termination control and status commands”中。这一章的命令,不再仅仅关注于与远端网络的通信,而是聚焦于对移动终端(MT)本身的控制和状态查询。它涵盖了电源管理、硬件状态、用户接口(键盘、显示、指示灯)、本地数据(电话本、时钟)乃至底层SIM卡访问等方方面面。

掌握了这一章,小李就能将他的“天眼”从一个只能默默传输数据的“黑盒”,进化为一个状态完全可见、行为完全可控的“水晶盒”。这不仅是产品功能的丰富,更是设备可靠性、可维护性和用户体验的巨大飞跃。


1. 设备的“脉搏”:核心状态控制与查询

在与设备进行任何复杂的交互之前,首先要掌握其最基本、最核心的生命体征。本节的命令,如同医生的听诊器,帮助我们感知模组的“心跳”与“呼吸”。

1.1 +CPAS:模组,你现在“忙”吗?(Phone Activity Status)

这是在向模组下发任何可能耗时或改变状态的命令之前,都应该先执行的一条“礼貌性”查询。

Description

Execution command returns the activity status of the MT. It can be used to interrogate the MT before requesting action from the phone.

Table 60: +CPAS action command syntax

| Command | Possible response(s) |

| :--- | :--- |

| +CPAS | +CPAS: <pas> |

| +CPAS=? | +CPAS: (list of supported <pas>s) |

+CPAS返回一个数字<pas>,直观地告诉我们模组当前的核心状态。

  • 0 (ready): 准备就绪。模组空闲,可以接收任何命令。

  • 1 (unavailable): 不可用。模组正忙于内部操作,暂时无法响应。

  • 2 (unknown): 未知状态。

  • 3 (ringing): 正在响铃。有来电,但仍可接收命令。

  • 4 (call in progress): 通话中。通话或数据连接正在进行中。

  • 5 (asleep): 睡眠模式。模组处于低功耗状态,可能无法处理命令。

小李的编程实践:

在他的MCU固件中,每次需要执行关键操作(如发起数据连接)前,他都会先发送AT+CPAS

  1. 发送命令: AT+CPAS

  2. 模组响应: +CPAS: 0+CPAS: 4

  3. 逻辑判断:

    • 如果返回0 (ready),则可以继续执行后续的数据连接命令。

    • 如果返回4 (call in progress),说明数据连接可能已经存在,他需要根据业务逻辑判断是重用还是先断开再重连。

    • 如果返回5 (asleep),他需要先唤醒模组,再执行操作。

+CPAS就像一个看门人,确保了MCU总是在模组状态合适的时候下发指令,避免了大量的命令冲突和超时错误。

1.2 +CFUN:射频的“总开关” (Set Phone Functionality)

+CFUN是电源管理的核心命令,它直接控制着模组最耗电的部分——射频收发单元。

Description

Set command selects the level of functionality in the MT. Level “full functionality” is where the highest level of power is drawn. “Minimum functionality” is where minimum power is drawn.

Table 61: +CFUN parameter command syntax

| Command | Possible response(s) |

| :--- | :--- |

| +CFUN=[<fun>[,<rst>]] | |

| +CFUN? | +CFUN: <fun> |

| +CFUN=? | +CFUN: (list of supported <fun>s),(list of supported <rst>s) |

核心参数<fun>的含义:

  • 0 (minimum functionality): 最小功能模式。通常会关闭射频收发电路,但模组的AT命令接口和核心系统仍在运行。此时模组会从网络去附着(detach)。这是实现深度睡眠的关键。

  • 1 (full functionality): 全功能模式。开启所有射频电路,模组会进行网络搜索和注册。这是正常工作的状态。

  • 4 (disable phone both transmit and receive RF circuits): 飞行模式。关闭射频电路,但与0不同的是,SIM卡通常保持激活,模组内部状态也可能保留,再次切换回1时可以更快地恢复网络。

  • 1,1 (带<rst>参数): 在切换到全功能模式前,先对模组进行一次软件复位。这是一个“大招”,常用于从某些异常状态中恢复。

小李的低功耗策略:

“天眼”追踪器大部分时间都处于静止状态,无需与网络通信。小李设计了如下策略:

  1. 数据上报: MCU唤醒,发送AT+CFUN=1,等待模组注册网络,然后建立数据连接,上报位置信息。

  2. 进入休眠: 数据上报完毕,MCU发送AT+CFUN=0。模组关闭射频,功耗降至最低。MCU自身也进入低功耗模式。

  3. 定时唤醒/事件唤醒: MCU的RTC(实时时钟)或加速度传感器中断将其唤醒,重复步骤1。

通过+CFUN=0+CFUN=1的交替使用,小李极大地延长了“天眼”追踪器的电池续航时间。

1.3 +CPIN:通往SIM卡的“钥匙” (Enter PIN)

SIM卡是设备接入网络的通行证,但这张“通行证”可能被PIN码锁住。+CPIN就是用来查询状态和输入密码的命令。

Description

Set command sends to the MT a password which is necessary before it can be operated (SIM PIN, SIM PUK, PH- SIM PIN, etc.).

Table 62: +CPIN parameter command syntax

| Command | Possible response(s) |

| :--- | :--- |

| +CPIN=<pin>[,<newpin>] | |

| +CPIN? | +CPIN: <code> |

| +CPIN=? | |

小李的设备初始化流程:

设备上电后,一个健壮的程序必须检查SIM卡状态。

  1. 查询状态: MCU发送AT+CPIN?

  2. 模组响应与MCU决策:

    • 响应 +CPIN: READY: SIM卡状态正常,无需任何操作,可以继续后续的网络注册流程。

    • 响应 +CPIN: SIM PIN: SIM卡需要输入PIN码。MCU会尝试从预设的配置中读取PIN码,然后通过AT+CPIN="1234"进行解锁。

    • 响应 +CPIN: SIM PUK: PIN码多次输错,SIM卡已被PUK码锁定。这种情况通常需要人工干预。MCU可以点亮一个红色LED告警,并将此状态上报(如果已有其他通信方式)。

    • 响应 +CME ERROR: 10 (SIM not inserted): 模组检测不到SIM卡。MCU应提示用户检查SIM卡是否插好。

+CPIN命令的正确处理,是保证设备在各种SIM卡状态下都能正确初始化或给出明确提示的关键。


2. “体检报告”:硬件状态的实时监控

一个健康的设备,需要能实时反馈自身的“生理指标”。

2.1 +CBC:电量还有多少?(Battery Charge)

对于电池供电的“天眼”,电量是其生命线。+CBC命令提供了查询电池状态和电量的标准方法。

Description

Execution command returns battery connection status and battery charge level of the MT.

Table 63: +CBC action command syntax

| Command | Possible response(s) |

| :--- | :--- |

| +CBC | +CBC: <bcs>,<bcl> |

| +CBC=? | +CBC: (list of supported <bcs>s),(list of supported <bcl>s) |

响应解读:

  • <bcs> (Battery Connection Status): 电池连接状态。0表示由电池供电,1表示有电池但未用其供电(如正在充电),2表示无电池。

  • <bcl> (Battery Charge Level): 电池电量等级。通常是0-100的百分比。

小李的应用:

MCU可以每隔一段时间(例如1小时)发送AT+CBC,并将获取到的<bcl>值包含在下一次数据上报中。云平台通过分析电量下降曲线,可以预测设备的剩余使用时间,并提前向用户发送低电量告警。

2.2 +CSQ:信号怎么样?(Signal Quality)

我们在第七章已经接触过+CREG等命令返回的宏观网络状态,而+CSQ则提供了更物理层的信号质量指标。

Description

Execution command returns received signal strength indication and channel bit error rate from the MT.

Table 64: +CSQ action command syntax

| Command | Possible response(s) |

| :--- | :--- |

| +CSQ | +CSQ: <rssi>,<ber> |

| +CSQ=? | +CSQ: (list of supported <rssi>s),(list of supported <ber>s) |

响应解读:

  • <rssi> (Received Signal Strength Indication):

    • 0: -113 dBm or less

    • 1: -111 dBm

    • 2..30: -109 to -53 dBm (每2dBm一级)

    • 31: -51 dBm or greater

    • 99: not known or not detectable

  • <ber> (Bit Error Rate): 在现代数字网络中,这个值通常是99,表示不适用。

小李的诊断程序:

当设备上报“网络连接失败”时,+CSQ的返回值是排查问题的第一步。

  • 如果+CSQ返回99,99或一个非常小的值(如5,99),那么问题很可能出在物理环境:设备处于地下室、金属货柜中,或者天线接触不良。

  • 如果+CSQ返回值很好(如20,99),但依然注册不上网络,那么问题可能出在SIM卡、网络侧配置或模组固件上。

+CSQ为远程诊断提供了最直接的无线环境依据。


3. 人机交互的桥梁:UI控制与事件上报

小李为“天眼”二代增加了屏幕和按钮,现在他需要通过AT命令来驱动它们。

3.1 +CMEC:UI控制权的“交接仪式” (Mobile Termination Control Mode)

当设备本身(MT)和外部控制器(TE)都可能有UI时(如带屏幕键盘的工业PDA外接模组),+CMEC用于决定谁来控制键盘、屏幕和指示灯。

Description

Set command selects the equipment, which operates MT keypad, writes to MT display and sets MT indicators.

Table 65: +CMEC parameter command syntax

| Command | Possible response(s) |

| :--- | :--- |

|+CMEC=[<keyp>[,<disp>[,<ind>...]]]|…|

对于小李的“天眼”项目,模组本身没有UI,所有UI都在TE(MCU)侧。他虽然不需要这个命令,但理解它有助于明白,AT命令体系考虑到了各种复杂的终端形态。

3.2 +CDIS, +CIND, +CKPD:TE的“遥控器”

这组命令允许TE远程“操作”MT的UI。但在小李的场景中,UI在TE侧,因此这组命令反向使用——MCU通过它们来“假装”是用户,从而驱动自己的屏幕和按键逻辑。更常见的用法是,TE通过这些命令来控制一个带有完整UI的“功能手机”模组。

  • +CDIS (Display Control): TE向MT的屏幕写入文本。

  • +CIND (Indicator Control): TE控制MT上的指示灯(如信号、电池、短信)。

  • +CKPD (Keypad Control): TE模拟MT的按键输入。

3.3 +CMER:事件驱动的“神经系统” (Mobile Termination Event Reporting)

如果MCU需要不断轮询按键是否被按下、屏幕内容是否需要更新,那将是低效且耗电的。+CMER命令建立了一个事件上报机制,将UI交互从“轮询”模式转变为“事件驱动”模式。

Description

Set command enables or disables sending of unsolicited result codes from TA to TE in the case of key pressings, display changes, and indicator state changes.

Table 70: +CMER parameter command syntax

| Command | Possible response(s) |

| :--- | :--- |

| +CMER=[<mode>[,<keyp>...]] | |

小李的按键上报应用:

他希望当现场人员按下“天眼”上的紧急按钮时,MCU能立刻收到通知并执行上报。

  1. 使能事件上报: MCU在初始化时发送AT+CMER=1,1

    • <mode>=1: 开启URC转发。

    • <keyp>=1: 开启按键事件上报。

  2. 用户按下按键: 现场人员按下了连接到模组某个GPIO的按键。

  3. 模组主动上报URC: 模组检测到按键事件,立刻通过串口向MCU发送一个URC:

    +CKEV: "S",1

    • +CKEV: 键盘事件的URC。

    • "S": 按键的字符码,例如代表“Send”键。

    • 1: 1代表按下,0代表释放。

  4. MCU响应: MCU的串口接收中断程序捕获到+CKEV,立即执行紧急数据上报的业务逻辑。

通过+CMER,小李构建了一个高效的、事件驱动的UI交互系统,极大地提升了设备的响应速度并降低了功耗。


4. 本地“数据库”:电话本与时钟管理

AT命令不仅能控制通信,还能管理模组内部的简单数据存储。

4.1 电话本“四件套”:+CPBS, +CPBR, +CPBF, +CPBW

这四个命令提供了对模组电话本(Phonebook)完整的增删改查(CRUD)功能。

  • +CPBS (Select Phonebook Memory Storage): 选择要操作的电话本存储区。常见的值有"SM" (SIM卡电话本), "ME" (设备电话本), "FD" (SIM卡固定拨号本)等。

  • +CPBR (Read Phonebook Entries): 读取电话本条目。

  • +CPBF (Find Phonebook Entries): 根据文本查找电话本条目。

  • +CPBW (Write Phonebook Entry): 写入或删除电话本条目。

小李的“白名单”应用:

为了安全起见,“天眼”追踪器只应该向预设的服务器IP或域名发送数据,并且只接收来自特定号码的短信指令。

  1. 选择存储区: AT+CPBS="ME" (选择设备电话本)。

  2. 写入服务器地址: AT+CPBW=1,"data.myserver.com",129,"SERVER_ADDR"。将服务器域名作为“号码”写入1号位置。

  3. 写入管理员号码: AT+CPBW=2,"+86139...",145,"ADMIN"

在程序逻辑中,设备发起数据连接或处理短信时,会先从这些预设的电话本条目中读取地址和号码,而不是使用硬编码的字符串,这大大增强了配置的灵活性和安全性。

4.2 +CCLK+CALA:时间与闹钟

  • +CCLK (Clock): 读取或设置模组的实时时钟。模组通常可以通过NITZ(Network Identity and Time Zone)功能从网络自动获取时间。AT+CCLK?可以读取到这个时间。

  • +CALA (Alarm): 在模组内部设置闹钟。这在一些简单的应用中可以用来实现定时唤醒,但通常MCU自己有更强大的RTC功能。


总结

第八章“移动终端控制与状态命令”为开发者打开了深入模组内部世界的大门。通过本章的学习,小李已经能够将他的“天眼”追踪器打造成一个软硬件紧密结合的完整产品。

  • 他学会了通过 +CPAS, +CFUN, +CPIN 来管理设备的核心生命周期

  • 他掌握了使用 +CBC, +CSQ 来获取设备的硬件体征,为健康监控和故障诊断提供了依据。

  • 他理解了如何通过 +CMER 和相关UI命令 构建事件驱动的交互界面,提升了用户体验和系统效率。

  • 他利用电话本命令为设备构建了一个灵活的本地配置“数据库”,增强了安全性和可维护性。

如果说前面的章节是关于“对外交流”,那么第八章就是关于“修身养性”。一个内外兼修的物联网设备,才能在严酷的商业环境中立于不败之地。


FAQ:快速问答

Q1:AT+CFUN=0AT+CFUN=4和AT+CPOF(关机命令)有什么区别?

A1:这三个命令都会关闭射频,但级别和状态不同:

  • +CFUN=0 (最小功能模式): 射频关闭,从网络去附着。模组核心系统仍在运行,AT口可用。这是实现低功耗睡眠的首选。

  • +CFUN=4 (飞行模式): 射频关闭。通常不会从网络去附着,SIM卡也保持初始化状态。再次切换回+CFUN=1时,恢复网络连接的速度可能比从0切换更快。

  • AT+CPOF (Power Off): 关机。这个命令会触发模组执行关机流程,最终彻底断电(需要硬件配合)。它不是睡眠,而是真正的“死亡”。

Q2:有了AT+CSQ,为什么还需要+CESQ

A2:+CSQ是一个非常古老的命令,主要提供一个综合的信号强度值(RSSI),在2G时代非常有用。而随着3G、4G、5G的演进,衡量网络质量的指标变得更加复杂和多维。+CESQ(Extended Signal Quality)提供了更丰富的指标集,如UMTS的RSCP/EcNo,LTE的RSRP/RSRQ/SINR等,这些指标能更精确地反映当前网络的覆盖质量和容量状况,为网络选择和故障诊断提供更精细的数据。

Q3:我必须使用电话本命令(如+CPBW)来存储配置吗?直接存在MCU的Flash里不行吗?

A3:存在MCU的Flash里当然可以。使用模组的电话本功能有几个额外的好处:

  1. 配置与SIM卡绑定: 如果你将配置存在SIM卡电话本("SM")中,那么更换SIM卡就等于更换了配置,方便运营商进行业务下发和管理。

  2. 简化TE逻辑: 对于一些简单的TE,自身可能没有足够的文件系统或Flash空间,利用模组的存储是一种便捷的方式。

  3. 标准化: +CPBW是标准命令,不同模组都支持,而读写MCU Flash是非标的。

在实践中,简单的配置(如单个APN,服务器地址)可以用电话本存储,复杂的配置文件通常还是存储在TE的文件系统中。

Q4:我想实现一个功能,当用户按下模组上的一个按键时,我的MCU能收到通知。应该用轮询还是事件上报?

A4:绝对应该使用事件上报(+CMER

  • 轮询方式:MCU需要不断地通过AT命令(如AT+CIND?查询某个GPIO的状态)去查询按键状态,这会持续占用串口总线,并且在轮询间隔内容易错过短暂的按键事件,同时MCU也无法进入低功耗模式。

  • 事件上报方式:MCU只需在初始化时发送一次AT+CMER开启按键事件上报。之后MCU可以进入休眠。当按键被按下时,模组会通过串口主动发送一个URC(如+CKEV)来“唤醒”并通知MCU。这种方式响应及时、功耗极低、不占用总线,是现代嵌入式系统设计的标准范式。

Q5:+CSIM+CRSM与普通的电话本、短信命令有什么区别?

A5:+CSIM+CRSM非常底层的SIM卡访问命令。它们允许TE直接向SIM卡发送原始的APDU(应用协议数据单元)指令,并读取返回的原始响应。这相当于给了TE一把“手术刀”,可以直接读写SIM卡文件系统中的任何一个二进制文件(只要权限足够)。

而电话本(+CPBR)、短信(+CMGR)等命令,是模组已经封装好的高级API。当你发送AT+CPBR=1时,模组内部会将其转换为一系列底层的APDU指令(选择文件、读取记录等)来完成操作。

结论:99%的开发者应该只使用高级API。只有在进行SIM卡开发、安全认证或处理非标SIM卡应用等极少数专家级场景下,才会需要使用+CSIM+CRSM