2015-03-09 5 views
4

У меня есть малиновый Pi с подключенной доской SIM900 GSM. Мне удалось установить соединение GPRS с pppd следующим this guide. (Это для другого GSM-модуля, но этапы одинаковы)Отправка команд AT на SIM900, в то время как pppd активен

Я хотел бы периодически отправить AT-команду (AT+CCLK?) на SIM900, чтобы проверить часы. Мне удалось отправить ad hoc AT-команды, используя screen, но когда pppd не работает, я не могу использовать screen для подключения к последовательной линии. Он просто уходит сразу, говоря [screen is terminating]. Я предполагаю, что это связано с тем, что pppd использует его для подключения к Интернету.

Вопрос: Как получить часовое время, не закрывая pppd?

В части user manual говорится, что SIM900 имеет мультиплексор, разработанный для стандарта GSM0710. Было бы полезно? Если да, то как мне это достичь?

ответ

5

Хорошо, я почти решил это, но застрял в самом последнем препятствии. Думал, что я покажу, что мне удалось сделать, поскольку это может помочь кому-то другому.

Я нашел this other post на переполнение стека, в котором перечислены 3 возможных способа достижения этого. Я не хотел контролировать gprs с помощью AT-команд, когда PPP (в моем ограниченном опыте) справляется с этим хорошо и легко. RPi имеет только один последовательный порт, поэтому я не мог мультиплексировать несколько последовательных интерфейсов.

Так что, оставив меня с мультиплексированием через один последовательный интерфейс, будем надеяться, что SIM900 поддерживает это. Я нашел here руководство пользователя мультиплексора SIM900, который использует стандарт GSM07.10.

Я не мог найти много информации о том, как настроить мультиплексирование, но в конце концов после копания я нашел документ this на модуле n_gsm в ядре linux. Я могу просто следить за тем, о чем идет речь, но недостаточно, чтобы написать свою собственную программу для настройки ряда виртуальных последовательных портов.

К счастью, после очередной очистки google я обнаружил, что этот экстраординарный джентльмен имеет created a C program, чтобы использовать модуль n_gsm для настройки виртуальных последовательных портов для нас.

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

Для SIM900 мне пришлось сменить строку 322, чтобы удалить &w конца команды AT+IPR. Он должен знать выглядеть:

if (send_at_command(serial_fd, "AT+IPR=115200\r") == -1) errx(EXIT_FAILURE, "AT+IPR=115200: bad response");

я также редактировал линию 128 в sleep(1.5), прежде чем пытаться прочитать ответ, как это иногда возвращается ошибка, потому что он не получил ответа в срок.

Итак, я запускаю программу cmux (с помощью sudo, так как она должна создавать новые устройства/dev/ttyGSM *), и она запускается через команды AT, устанавливает линейную дисциплину и создает новые виртуальные последовательные устройства, но когда я пытаюсь и открыть последовательный терминал с экраном screen /dev/ttyGSM1 115200, просто возвращает [screen is terminating].

Я сделал sudo fuser /dev/ttyGSM1, который ничего не возвращал, поэтому никакой другой процесс не использует его.

Я тогда попытался echo AT > /dev/ttyGSM1, который вернул -bash: /dev/ttyGSM1: Level 2 halted.

Я не уверен, что это значит и не мог найти информацию об этом сообщении. Может ли это говорить о слое 2 модели OSI a.k.a на уровне канала передачи данных?

Как бы то ни было, так далеко от меня. Я решил поставить его в одну сторону на данный момент и просто использовать NTP, но я надеюсь, что это поможет кому-то другому. Если вы найдете решение этого или можете предложить что-то, что я, возможно, пропустил, пожалуйста, скажите. Благодаря

1

я пытался то же самое и ваш пост очень помог мне, наконец, мне удалось сделать это после руководство по адресу: https://github.com/guowenxue/embedded_project/tree/master/program/ldattach_gsm0701

но без патч драйвера n_gsm, на самом деле делает это устройства с 1 по 3 исчезли. со стандартным n_gsm.c, ldattach создал 63 устройства с 1 по 4, другие не работают.

Я много играл с настройками, если у вас есть какие-либо проблемы, я могу отправить вам весь файл ldattach.c, так или иначе, я думаю, что он будет работать как стандарт.

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

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

ль мне знать, если он работает для вас.

1

У меня была такая же проблема ([экран заканчивается], уровень 2 остановлен). Позаботьтесь о задержке sleep() между командой write() cmux AT и последовательным портам и задайте линейную дисциплину через ioctl(). Задержка должна быть не be long. Модемы имеют тайм-аут для сброса из режима cmux, если вы не задали линейную дисциплину во времени. Here - некоторые детали и доказательства.

Что касается меня, я вообще отменил эту задержку.

 Смежные вопросы

  • Нет связанных вопросов^_^