如何使用从 SIM 卡检索到的信息配置调制解调器模块

How to configure a modem module with the information retrieved from the SIM card

我正在使用 Telit LE910-C1 模块通过 SIM 卡将我的 ESP32 连接到互联网。我不太了解调制解调器的工作原理,但我继承了一个可以正常工作(建立连接)的代码。

问题是它只适用于为(意大利沃达丰)开发的 SIM 卡。如果我将 SIM 卡换成另一个链接到另一个 phone 运营商的 SIM 卡,它似乎不再工作了。我想这是因为 APN 被硬编码到代码中(我无法共享),我想知道是否有一种方法可以使用它可以从 SIM 中检索到的信息自动配置调制解调器。

到目前为止,我的解决方案是要求运营商访问 SIM 卡并使用该信息通过外部 BT 设备设置 APN,但您可以想象这更像是一种解决方法。

如您所见,我对这种技术了解不多,所以如果我缺乏信息,我会尽量提供准确的信息。

这里是我设备的 AT command guide PDF。

遗憾的是,没有通用的方法来获取可用于数据流量的 APN 更新。事实上,操作员的行为各不相同,对其中一个有效的方法可能对另一个无效。

我将尝试解释所有的解决方案以及它们无法工作的原因。我的回答基于您使用的是 LE910-C1 模块,这是一个 LTE 设备。

总体介绍

在4G时代之前,蜂窝设备不需要APN来完成网络注册。它只是在 PDP 上下文激活的情况下才需要,而当必须交换打包数据时又会执行它。

APN 是通过 +CGDCONT AT 命令写入调制解调器的 NVM 中的:

AT+CGDCONT=<contextID>,<PDP Type>,<APN>[,...]

// Example
AT+CGDCONT=1,"IP","mobile.vodafone.it"

使用 LTE,情况发生了变化:由于支持 VoLTE(LTE 语音)和 IMS(a用于通过 LTE 发送短信的服务)。

解决方案 1:+CGDCONTRDP 命令

为了与旧的 2G 和 3G 世界向后兼容,为了在不设置的情况下注册到网络 +CGDCONT,LTE 设备能够从网络中检索 APN。

可以通过发出 AT+CGDONTRDP 命令(PDP 上下文读取动态参数)查询此注册信息,根据您链接的 AT 指南,该命令具有以下语法:

AT+CGCONTRDP=[<p_cid>]

并生成具有 N 行的响应,格式如下

+CGCONTRDP:<p_cid>,<bearerId>,<apn>[,<ip&subnet>[,<gw_addr>[,<DNS_prim>[,<DNS_sec>[, <P_CSCF_prim>[,<P_CSCF_sec>]]]]]]

如您所见,它提供了很多关于激活的 APN 的信息,例如 p_cid(上下文 ID,对于由注册),IP 地址,最重要的是 APN 名称

好消息:我们有一个与当前运营商相关的APN名称。您可以尝试从脚本中完全删除 +CGDCONT,您会发现您的设备能够自行连接(或稍作调整)。

坏消息:不保证用户可以使用相同的 APN 名称进行数据交换。一些运营商(例如Verizon)有一个特定的APN用于注册(它获得一个专用网络IP地址,对自定义数据交换没有用),因此用户必须激活另一个PDP上下文才能交换数据。

解决方案 2:OMADM

一些运营商(例如美国的 Verizon)实施 OMA 联盟为 设备管理 定义的特殊协议:OMADM。正如 所解释的那样,它允许网络运营商检索(并设置!)多个设置。

APN 是其中之一:网络知道设备-SIM 对的任何变化,如果它们发生变化,则启动 DM 会话以更新 APN 名称。当然,设备必须支持这个非常具体的协议。

坏消息:不能绝对保证世界上每个运营商都支持这种 APN 更新机制。此外,这些机制中的任何一个都是非常运营商特定的,并且需要调制解调器的供应商为每个运营商定制。

一个简单的解决方法

您可以在代码中构建查找 table,将每个运营商与相应的 APN 相匹配:

  1. 查询当前运算符AT+COPS?
  2. 在您的查找中搜索它 table
  3. 如果自从您的设备上次开机后它发生了变化(您可以将 lastOperator 名称存储在闪存中的某个位置),请将 APN 更改为在查找中找到的那个-table 通过发出 AT+CGDCONT 命令

Pro: 会很简单,而且不会所以内存消耗,建立查找table覆盖整个欧洲和至少北美国家(顺便说一句:确保您的设备实际上适合您要使用的区域table:并非所有设备都支持在全球范围内使用的射频频段)。

缺点: 这不是问题所要求的 "universal",它肯定是必须维护的。我建议您实施一个恢复解决方案,您可以在其中管理一个特殊的 SMS 将 APN 更新为自定义值。