Как настроить модемный модуль с информацией, полученной с SIM-карты - PullRequest
1 голос
/ 07 февраля 2020

Я использую модуль Telit LE910-C1 для подключения моего ESP32 к inte rnet через SIM-карту. Я не знаю много о том, как работают модемы, но я унаследовал код, который работает правильно (установление соединения).

Проблема в том, что он работает только с той SIM-картой, для которой он был разработан (Vodafone Италия). Если я переключаю SIM-карту с другой, которая связана с другим оператором телефона, он больше не работает. Я предполагаю, что это потому, что APN жестко закодирован в код (который я не могу поделиться), и я хотел бы знать, есть ли способ автоматической настройки модема на информацию, которую он может получить с SIM-карты.

  • Есть ли процедура, которой нужно следовать?
  • Должен ли я установить несколько флагов в модем для автоматической настройки через какую-либо команду AT?
  • Существует ли последовательность AT-команд для ее установки?

Мое решение до сих пор состоит в том, чтобы попросить оператора к SIM-карте и настроить APN через внешнее устройство BT с этим информация, но вы можете себе представить, что это скорее обходной путь.

Как вы можете заметить, у меня мало знаний об этом виде технологий, поэтому, если мне не хватает информации, я постараюсь предоставить их как можно точнее.

Вот руководство по команде AT PDF моего устройства.

1 Ответ

1 голос
/ 07 февраля 2020

К сожалению, не существует универсального рецепта для получения обновления APN, которое можно использовать для трафика данных c. На самом деле поведение операторов отличается друг от друга, и то, что работает для одного из них, может не работать для другого.

Я попытаюсь объяснить все решения и причину, по которой они не могли работать. Я буду основывать свой ответ на том факте, что вы используете модуль LE910-C1 , который является устройством LTE.

Общее введение

До эры 4G сотовые устройства не работали. требовать APN для завершения регистрации сети. Это требовалось только в случае активации контекста PDP, которая, в свою очередь, выполнялась всякий раз, когда требовался обмен упакованными данными.

APN записывалось в NVM модема с помощью команды +CGDCONT AT:

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

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

С LTE все изменилось: контекст PDP был необходим также для базовой регистрации c в сети из-за поддержки VoLTE (Voice Over LTE) и IMS (услуга, используемая для отправки SMS через LTE).

Решение 1: +CGDCONTRDP команда

Для обратной совместимости со старым миром 2G и 3G, для регистрации в сети без При настройке +CGDCONT устройства LTE могут извлекать APN из сети.

Эта информация о регистрации может быть запрошена с помощью команды AT+CGDONTRDP (PDP Context Read Dynami c Parameters), которая в соответствии с Руководство 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 (идентификатор контекста, равный 1 для контекста, активированного при регистрации), IP-адрес и, прежде всего, имя APN .

Хорошие новости: у нас есть имя APN, связанное с текущим оператором. Вы можете попробовать вообще удалить +CGDCONT из вашего скрипта и обнаружить, что ваше устройство может подключаться самостоятельно (или с небольшой настройкой).

Плохие новости: it не гарантируется, что одно и то же имя APN может использоваться пользователем для обмена данными. Некоторые операторы (например, Verizon) имеют определенный c APN для регистрации (который получает IP-адрес частной сети, бесполезный для пользовательского обмена данными), так что пользователь должен активировать другой контекст PDP для обмена данными.

Решение 2: OMADM

Некоторые операторы (например, Verizon, в США) реализуют специальный протокол, определенный OMA Alliance для Управление устройствами : OMADM . Как также объяснил мой ответ на этот вопрос , он позволяет оператору сети получить (и установить!) Несколько настроек.

APN является одним из них: сеть знает о любых изменениях в Пара устройство-SIM, и если они меняются, запускает сеанс DM для обновления имени APN. Конечно, устройство должно поддерживать этот очень конкретный протокол c.

Плохие новости: нет абсолютно никаких гарантий того, что каждый оператор в мире поддерживает этот механизм обновления APN. Более того, любой из этих механизмов очень , определяемый оператором c, и потребует настройки поставщика модема для каждого оператора.

Простой обходной путь

Вы можете создать внешний вид таблицы в вашем коде, сопоставляя каждый оператор с соответствующим APN:

  1. Запросите текущего оператора с помощью AT+COPS?
  2. Найдите его в вашей справочной таблице
  3. Если оно изменилось с момента последнего включения питания вашего устройства (вы можете хранить где-нибудь в своей памяти sh имя lastOperator ), измените APN на тот, который найден в таблице поиска, введя AT+CGDCONT команда

Pro: Было бы довольно просто, и не , поэтому потребляло бы память, создать справочную таблицу, охватывающую всю Европу и, по крайней мере, страны Северной Америки (кстати: убедитесь, что ваше устройство действительно подходит для области, в которой вы хотите его использовать: не все устройства поддерживают радиочастотные диапазоны, которые будут использоваться во всем мире).

Минусы: это не что-то "универсальное" ", как того требует вопрос, и это то, что обязательно нужно поддерживать. Я предлагаю вам реализовать решение для восстановления, в котором вы управляете специальным SMS, обновляющим APN до пользовательского значения.

...