Работа с модемом

Добрый день!

Пишу программу для переключения sim в модеме. Контроллер HW: 6.7.2I/1 (S/N: AN4PGJ6W).
Ситуация такая - модем работает, пинг через ppp0 проходит.
Прочитал раздел GSM/GPRS — Wiren Board

Команда “echo $WB_GPIO_GSM_SIMSELECT” выводит пустую строку, а “ls -la /sys/class/gpio” выдаёт:
drwxr-xr-x 2 root root 0 Jun 22 13:56 .
drwxr-xr-x 49 root root 0 Jun 22 13:56 …
–w------- 1 root root 4096 Jun 22 14:02 export
lrwxrwxrwx 1 root root 0 Jun 22 14:02 gpio121 → …/…/devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio121
lrwxrwxrwx 1 root root 0 Jun 22 14:02 gpio122 → …/…/devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio122
lrwxrwxrwx 1 root root 0 Jun 22 14:02 gpio123 → …/…/devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio123
lrwxrwxrwx 1 root root 0 Jun 22 13:56 gpio133 → …/…/devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio133
lrwxrwxrwx 1 root root 0 Jun 22 13:56 gpio134 → …/…/devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio134
lrwxrwxrwx 1 root root 0 Jun 22 13:56 gpio135 → …/…/devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio135
lrwxrwxrwx 1 root root 0 Jun 22 13:56 gpio136 → …/…/devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio136
lrwxrwxrwx 1 root root 0 Jun 22 13:56 gpio139 → …/…/devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio139
lrwxrwxrwx 1 root root 0 Jun 22 14:02 gpio34 → …/…/devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio34
lrwxrwxrwx 1 root root 0 Jun 22 13:56 gpiochip0 → …/…/devices/platform/soc/1c20800.pinctrl/gpio/gpiochip0
–w------- 1 root root 4096 Jun 22 13:56 unexport

Соответственно, вопрос - какой алгоритм универсального переключения sim карт в контроллерах?

Добрый день.
Контроллер такой же, модем сконфигурирован:

echo $WB_GPIO_GSM_SIMSELECT
88

И, ессно, 88 есть:

 ls -la /sys/class/gpio
итого 0
drwxr-xr-x  2 root root    0 июн 23 06:59 .
drwxr-xr-x 51 root root    0 июн 23 06:59 ..
--w-------  1 root root 4096 июн 22 13:42 export
lrwxrwxrwx  1 root root    0 июн 23 07:00 gpio116 -> ../../devices/platform/soc/2000000.bus/20a8000.gpio/gpiochip3/gpio/gpio116
lrwxrwxrwx  1 root root    0 июн 23 07:00 gpio119 -> ../../devices/platform/soc/2000000.bus/20a8000.gpio/gpiochip3/gpio/gpio119
lrwxrwxrwx  1 root root    0 июн 23 07:00 gpio128 -> ../../devices/platform/soc/2000000.bus/20ac000.gpio/gpiochip4/gpio/gpio128
lrwxrwxrwx  1 root root    0 июн 23 07:00 gpio130 -> ../../devices/platform/soc/2000000.bus/20ac000.gpio/gpiochip4/gpio/gpio130
lrwxrwxrwx  1 root root    0 июн 23 07:00 gpio132 -> ../../devices/platform/soc/2000000.bus/20ac000.gpio/gpiochip4/gpio/gpio132
lrwxrwxrwx  1 root root    0 июн 23 07:00 gpio23 -> ../../devices/platform/soc/2000000.bus/209c000.gpio/gpiochip0/gpio/gpio23
lrwxrwxrwx  1 root root    0 июн 23 07:00 gpio83 -> ../../devices/platform/soc/2000000.bus/20a4000.gpio/gpiochip2/gpio/gpio83
lrwxrwxrwx  1 root root    0 июн 23 07:00 gpio84 -> ../../devices/platform/soc/2000000.bus/20a4000.gpio/gpiochip2/gpio/gpio84
lrwxrwxrwx  1 root root    0 июн 23 07:00 gpio88 -> ../../devices/platform/soc/2000000.bus/20a4000.gpio/gpiochip2/gpio/gpio88
lrwxrwxrwx  1 root root    0 июн 23 06:59 gpiochip0 -> ../../devices/platform/soc/2000000.bus/209c000.gpio/gpio/gpiochip0
lrwxrwxrwx  1 root root    0 июн 23 06:59 gpiochip128 -> ../../devices/platform/soc/2000000.bus/20ac000.gpio/gpio/gpiochip128
lrwxrwxrwx  1 root root    0 июн 23 06:59 gpiochip32 -> ../../devices/platform/soc/2000000.bus/20a0000.gpio/gpio/gpiochip32
lrwxrwxrwx  1 root root    0 июн 23 06:59 gpiochip64 -> ../../devices/platform/soc/2000000.bus/20a4000.gpio/gpio/gpiochip64
lrwxrwxrwx  1 root root    0 июн 23 06:59 gpiochip96 -> ../../devices/platform/soc/2000000.bus/20a8000.gpio/gpio/gpiochip96
--w-------  1 root root 4096 июн 20 09:53 unexport

Проверьте в файле /run/wb_env.cache - там лежат экспортированные переменные.
А какой релиз стоит на контроллере?

После конфигурации модема контроллер не перезагружали, возможно поэтому “echo $WB_GPIO_GSM_SIMSELECT” выдавало пустую строку. Сейчас выводится 34. И описанная схема не работает:

echo 1 > /sys/class/gpio/gpio34/value
AT+CFUN=0
AT+CFUN=1

Значение в /sys/class/gpio/gpio34/value возвращается в 0.

Для 6.7 все же GPIO 88.
Какой релиз ПО на контроллере установлен? У вас точно 6.7 контроллер? Точно ли не от WB7? Только на нем для sim_sel используется 34.

Да, видимо WB7, хотя на нём наклейка с надписью HW: 6.7.2I/1

А какой релиз?

А как его узнать?

https://wirenboard.com/wiki/Wiren_Board_Firmware_Update#Какой_релиз_на_вашем_контроллере

Выложите пожалуйста фото платы контроллера и наклейки с номером.

На скриншоте в предыдущем моём сообщении тоже было написано:

Release name

wb-2201

Release suite

stable

Да, 7.2
Обновите ПО до актуального, текущий релиз 2204

Обновили контроллер до 2204.
“echo $WB_GPIO_GSM_SIMSELECT” выдаёт 34. Если делать по алгоритму:

echo 1 > /sys/class/gpio/gpio34/value
AT+CFUN=0
AT+CFUN=1

Значение в /sys/class/gpio/gpio34/value возвращается в 0.

Повторил ещё раз. Для модема в файле провайдера прописан /dev/ttyUSB2. AT-команды отправляю через /dev/ttyGSM, т.е. делаю по инструкции GSM/GPRS — Wiren Board

После выполнения:
AT+CFUN=0
AT+CFUN=1

Значение в /sys/class/gpio/gpio34/value опять возвращается в 0, и через несколько секунд модем выключается (гаснет зелёная лампочка).

gpio соответствующий просто переэкспортируется. Воспроизвел. Вообще - баг, сделал задачу на исправление.

Хорошо, а как тогда sim-карты переключать, в случае отсутствия связи на одной из них?

Думаю на днях будет фикс, пока в качестве костыля можно явсно устанавливать значение gpio, например раз в секунду.

Здравствуйте!
Проблема исправлена в пакете wb-utils v3.6.1. Пакет доступен в репозитории тестинг: Обновление прошивки контроллера Wiren Board — Wiren Board.

Проверьте, пожалуйста, работу после обновления ПО. Напишите, решилась ли проблема после обновления.

1 лайк

Добрый день! Что-то всё равно не работает описанная (GSM/GPRS — Wiren Board) схема переключения sim карт.

Сбросили контроллер к настройкам, переключили на тестинг. Настроили модем по инструкции (GSM/GPRS — Wiren Board), SIM карта всё время была установлена в SIM2.
После выполнения всех действий по переключению SIM карты, интерфейс ppp0 так и не появился при выполнении ifconfig. Хотя в /sys/class/gpio/gpio34/value остаётся 1.
Если после этого выполнить ifdown --force ppp0 вместе с ifup ppp0, или отдельно wb-gsm restart_if_broken, то модем просто выключается, см. скриншот:

Убедитесь, что нужная версия пакета у вас установлена. Выполните команду и покажите вывод:

apt policy wb-utils

Также модем должен быть сконфигурирован в веб-интерфейсе:

Затем убедиться, что нужный gpio установлен в 1, сим-карта в слоте 2. Затем выполнить

wb-gsm off
wb-gsm on

Должен загореться зеленый светодиод на модеме.
Затем выполните AT-команды:

AT+CFUN=0
AT+CFUN=1

И включить интернет c выводом логов.

pon megafon; journalctl -f | grep "chat\|pppd"

Вывод полностью покажите, он занимает некоторое время.

Как сконфигурирован интерфейс ppp0? Пришлите, пожалуйста, файл /etc/network/interfaces

Так сконфигурирован 7ой контроллер, после этого просто выполняю команду:
minicom -D /dev/ttyGSM -b 115200 -8 -a off

Модем работает какое-то время (около 30 секунд) и выключается, и больше сам не включается. Привожу вывод консоли, в которой выполнялясь команда minicom:

При этом никаких действий по переключению слотов sim карт не выполнял.

Проверил на контроллере 6.9, всё работает, если модем подключён к порту /dev/ttyUSB2. При этом AT-команды не отправлял, достаточно было сделать wb-gsm off и wb-gsm on после выполнения echo 1 > /sys/class/gpio/gpio88/value. Если использовать порт /dev/ttyUSB0, то ppp0 интерфейс не поднимается.