Донские Радиолюбители
16+
главная
новости
статьи
частоты
репитеры
радиоклубы
форум
ссылки
литература
RK6LZQ
Статьи

Статьи : Телефония / Сотовая телефония / NMT /

Интерфейс и протокол F-BUS

Добавлено пользователем RN6LMR 26.02.2025 в 07:00.

F-BUS

F-BUS — это более поздняя, по сравнению с M-BUS, высокоскоростная полнодуплексная шина. В ней используется один вывод для передачи данных и один вывод для приема данных, а также вывод заземления. Очень похоже на стандартный последовательный порт. Скорость передачи данных составляет 115 200 бит/с, 8 бит данных, четность отсутствует, один стоп-бит (8-N-1). Для F-BUS должен быть установлен pin-код готовности терминала передачи данных (DTR) и сброшен pin-код запроса на отправку (RTS).

Большинство телефонов Nokia имеют разъемы F-BUS и M-BUS, которые можно использовать для подключения телефона к компьютеру или к микроконтроллеру. Это соединение можно использовать для управления практически всеми функциями телефона, а также для загрузки новой прошивки и т.д., в том числе отправлять и получать SMS-сообщения.

Аппаратный уровень F-BUS

Разъём F-BUS на телефонах

Очень популярный телефон Nokia 3310/3315 оснащён разъёмом для подключения по шинам F-BUS и M-BUS, расположенным под аккумулятором. Добраться до разъёма довольно сложно, и для подключения требуется специальный кабель. На рисунке ниже показаны 4 золотистых контактные площадки, используемые для подключения шин F-BUS и M-BUS.


Nokia 3310

Nokia 3310
Специализированное программное обеспечение для ПК, такое как Logomanager и Oxygen Phone Manager, для загрузки рингтонов, графики, телефонных номеров и т.д.

Адаптер F-BUS

Ниже приведена схема адаптера F-BUS / COM после изменения схемы адаптера M-BUS:

Микросхему КРЕН5А лучше использовать в маленьком корпусе ТО-92, но и в нормальном тоже в разъём влезает. Транзисторы можно использовать КТ315, диоды КД522. После сборки необходимо проверить напряжение на выходе КРЕН5А — должно быть +5В, а после диодов — примерно +3В.
Конструктивно устройство собрано в корпусе разъёма DB-25. На другой стороне кабеля можно установить разъём для подключения переходников к различным моделям телефонов.
Схема проверена на GSM Nokia 5110 и Nokia 3310.
Нормально работают Logo Manager, Nokia Data Suite, GSM Tools и др., которые отказывались связываться через M-BUS (NDS, GSMTools) или теряли постоянно связь с телефоном (LM).
Автор: Сергей Ануфриев, 2002г.

Ниже приведена ещё одна схема адаптера F-BUS / COM.

Схема данного сервисного кабеля F-BUS предназначена для телефонов Nokia моделей 3310, 6110. Особенность данной схемы в том, что в ней применена микросхема MAX3232. Уровни сигналов в линиях Rx, Tx ограничены стабилитронами 2,7 Вольт.

Протокол и команды F-BUS

После подключения кабеля к компьютеру и телефону, необходимо произвести синхронизацию UART в телефоне с компьютером. Для этого нужно ввести строку 0x55 или "U" 128 раз. Теперь шина готова к использованию для отправки кадров.
Протокол Nokia содержит ряд команд, которые позволяют пользователю совершать звонки, отправлять и получать SMS-сообщения и многое другое. Если вы еще этого не сделали, перейдите в проект Linux Gnokii и загрузите исходный код. В этой группе есть отличная документация по командам, используемым в различных телефонах Nokia.
Пример кадра отправлен на Nokia 3310 (показан в виде шестнадцатеричного дампа):
Byte: 00 01 02 03 04 05 06 07 0809101112131415
Data: 1E 00 0C D1 00 07 00 01 00 03 00 01 60 00 72 D5


Этот примерный кадр используется для получения информации о версии аппаратного и программного обеспечения телефона Nokia. Это хорошая отправная точка для проверки работоспособности нашей реализации протокола.

Байт 0: Все кадры, отправленные по кабелю, будут начинаться с символа 0x1E. Это идентификатор кадра F-BUS. Кабель имеет значение 0x1E, а инфракрасный — 0x1C.
Байт 1: Это адрес назначения. При отправке данных это байт идентификатора устройства телефона. В нашем случае для телефона это всегда 00.
Байт 2: Это адрес источника. При отправке данных используется байт идентификатора устройства ПК. В нашем случае это всегда 0x0C (терминал).
Байт 3: Это тип сообщения или "команда". 0xD1 — это получение версии HW & SW.
Байты 4 и 5: Байты 4 и 5 — это длина сообщения. В нашем случае это 7 байт. Байт 4 — это MSB, а байт 5 — это LSB.
Байт 6: В нашем случае сегмент данных начинается здесь и длится 7 байт. Поскольку Nokia — 16-разрядный телефон, для него требуется чётное количество байт. Поскольку у нас нечётное, то последний байт будет дополнением, и сообщение закончится на 13-м месте.
Последний байт в сегменте данных (байт 12 выше) — это порядковый номер. Последние 3 бита этого байта увеличиваются от 0 до 7 для каждого кадра. Эту часть необходимо отправить обратно на телефон во фрейме подтверждения. Что касается остальных битов, не понятно, что они означают.
Байты 14 и 15: Предпоследний байт всегда является байтом с нечётной контрольной суммой, а последний байт — байтом с чётной контрольной суммой. Контрольная сумма вычисляется путем XOR всех нечётных байтов и помещения результата в ячейку с нечётной контрольной суммой, а затем XOR чётных байтов и последующего помещения результата в чётный байт.

Что ж, это наш первый кадр для нашего телефона Nokia. Если телефон получил сообщение, он покажет ответ со следующими данными:
1E 0C 00 7F 00 02 D1 00 CF 71 
1E 0C 00 D2 00 26 01 00 00 03 56 20 30 34 2E 34 35 0A 32 31 2D 30 36 2D 30 31 0A 4E 48 4D 2D 35 0A 286329204E 4D
50 2E 00 01 41 3F A4


Первая строка — это строка команды подтверждения. Обратите внимание, что адреса получателя и источника теперь поменялись местами. Это связано с тем, что телефон Nokia теперь разговаривает. Длина этого сообщения составляет два байта, причем два байта представляют тип полученного сообщения (0xD1) и порядковый номер (0x00). Последние два байта являются контрольной суммой и должны быть проверены, чтобы убедиться в правильности данных. 3310 будет ожидать подтверждения после отправки этих двух кадров. Если подтверждение не будет отправлено, Nokia 3310 повторит попытку отправки данных. Nokia 3310 отправит данные только 3 раза, а затем прекратит работу.

Второй кадр с Nokia 3310 — это данные, которые мы запросили. Тип сообщения — 0xD2. Это "получено сообщение о получении новой версии". Это 38-байтовое (0x26) сообщение должно содержать 0x0003 "V ", "firmwaren", "firmware daten", "modeln", "(c)NMP". Последний байт в данных — это порядковый номер. Как и в случае со стандартными кадрами F-BUS, последние два байта в кадре являются байтами контрольной суммы.

Полученные данные без кадра F-BUS
01 00 00 03 56 20 30 34 2E 34 35 0A 32 31 2D 30 36 2D 30 31 0A 4E 48 4D 2D 35 0A 286329204E 4D 50 2E 00 01 41 
0003 V 0 4 . 4 5 n 2 1 / 0 6 / 0 1 n N H M — 5 n ( c ) N M P . Sequence no.


Всё, что теперь требуется — это отправить сообщение подтверждения обратно на телефон, чтобы сказать: "Я понял!"

1E 00 0C 7F 00 02 D2 01 C0 7C


0x7F — это команда фрейма подтверждения. От нас требуется отправить только двухбайтовое сообщение, поэтому длина задана равной 0x02. Сообщение содержит тип подтвержденного сообщения (0xD2) и порядковый номер (0x01). Порядковый номер создается из последних 3 бит порядкового номера в предыдущем кадре. Необходимо вычислить и отправить контрольную сумму.

Отправка SMS-сообщений с помощью F-BUS

Теперь, когда мы знаем, как отправлять кадры по шине, нам следует рассмотреть отправку SMS-сообщения. Это несложный процесс. Главное упаковать сообщение в 7-разрядные символы.

Двухточечная упаковка символов в SMS-сообщении

Первое, что вам следует сделать, это загрузить GSM 03.38 — алфавиты и языковая информация. Это техническая спецификация, которая описывает набор 7-разрядных символов и показывает стандартную схему символов. Преобразовать ASCII в 7-битные символы непросто, но это довольно просто сделать. Вот краткий пример.
Допустим, мы хотим расшифровать строку 'hello'. Сначала я вывел "hello" в шестнадцатеричном формате, используя символьную карту, представленную в GSM 03.38. Для преобразования от A до Z и цифр это просто стандартное преобразование ASCII.

h  	e  	l  	l  	o	(Символы ASCII)
68 65 6C 6C 6F (в шестнадцатеричном виде)
1101000 1100101 1101100 1101100 1101111 (в двоичном виде)


При работе с двоичным кодом проще записывать все в обратном порядке. Первый байт в строке находится справа. Затем слева отображается младший по значению бит, а слева — старший по значению бит. Ниже показана та же строка "hello", только в обратном порядке. Тогда остается только разделить двоичные значения на байты, начиная с первого символа в строке. (Начните справа налево). Первый декодированный байт — это просто первые 7 битов первого символа с первым битом второго символа, добавленным в конец, как показано ниже. Следующий декодированный байт, затем оставшиеся 6 битов из второго символа и два бита из третьего байта, добавленные в конец. Этот процесс продолжается до тех пор, пока не будут декодированы все символы. Последний декодированный байт — это оставшиеся биты от последнего символа, причем старшие биты заполнены нулями.

6F	6C	6C	65	68
1101111 1101100 1101100 1100101 1101000 (Символы ASCII представлены в двоичном виде)

110 11111101 10011011 00110010 11101000 (Приведенный выше двоичный файл просто разбит на 8-битные сегменты)
06 FD 9B 32 E8 (8-битные сегменты, декодированные в шестнадцатеричный формат)


Таким образом, в упакованном виде сообщение hello выглядит как E8 32 9B FD 06.

При работе с отправкой SMS-сообщений требуется много расшифровок. Поэтому я написал несколько небольших программ для автоматической упаковки и распаковки данных. Первая программа позволяет мне ввести строку для упаковки в верхнем поле для заметок, и когда нажимается кнопка "Упаковать", верхняя строка упаковывается и готова к отправке.

Полная версия программы с исходным кодом для загрузки SMSPacker.zip.

Эта программа, представленная ниже, распакует и затем упакует сообщение. Она использовалась для чтения упакованных сообщений из моего анализатора последовательного протокола. Она также тестирует мои подпрограммы на C как для упаковки, так и для распаковки. Уже для моего микроконтроллера AT90S8535!

Теперь, когда мы знаем, как упаковать и распаковать сообщение, давайте посмотрим на весь кадр целиком.

Полный кадр SMS-сообщения

Я бы настоятельно рекомендовал загрузить GSM 03.40 — техническую реализацию службы коротких сообщений (SMS) "Точка-точка" (PP). В этой спецификации подробно описаны следующие поля SMS. Обратитесь к этой спецификации для получения дополнительной информации.
Пример кадра, отправленного на Nokia 3310 (показан в виде шестнадцатеричного дампа), 98 байт:
Byte: 00 01 02 03 04 05 06 07 08091011121314151617181920212223242526272829303132333435
Data: 1E 00 0C 02 00 59 00 01 00 01 02 00 07 91 16 14 91 09 10 F0 00 00 00 00 15 00 00 00 33 0A 814030870047
SMS message centre -- Phone number -

Byte: 36 37 38394041424344454647484950515253545556575859606162636465666768697071
Data: 00 00 00 00 00 A7 00 00 00 00 00 00 C8 34 28 C8 66 BB 40 54 74 7A 0E 6A 97 E7 F3 F0 B9 0C BA 87 E7 A0 79 D9
Start of Message — Hi All. This message was sent through F-Bus. Cool!!

Byte: 72 73 74 75 76 77 7879808182838485868788899091929394959697
Data: 4D 07 D1 D1 F2 77 FD 8C 06 19 5B C2 FA DC 05 1A BE DF EC 50 080143007A 52


Заголовок кадра F-BUS
Байт 0: Идентификатор кадра F-BUS. Мы подключены к кабелю (0x1E), смотрите часть 1.
Байт 1: Адрес назначения.
Байт 2: Адрес источника.
Байт 3: Тип сообщения или "команда". 0x02 (обработка SMS).
Байты 4 и 5: Длина сообщения. В нашем случае это 0x0059 байт или 89 байт в десятичной системе счисления.

Заголовок служебного фрейма коротких сообщений (SMS)
Байты с 6 по 8: Начало заголовка SMS-сообщения. 0x00, 0x01, 0x00
Байты с 9 по 11: 0x01, 0x02, 0x00 = Отправить SMS-сообщение.

Центр обслуживания коротких сообщений (SMSC), (12 байт)
Байт 12: длина номера SMS-центра. 0x07 составляет 7 байт. Сюда входит тип номера SMS-центра и номер телефона SMS-центра
Байт 13: тип номера SMS-сообщения, например, 0x81-неизвестно, 0x91-международный, 0xa1-национальный

1XXX IIII : Where I is the Numbering-plan-identification (Refer to GSM 03.40 — 9.1.2.5 Address fields)
1TTT XXXX : Where T is the Type-of-number (Refer to GSM 03.40 — 9.1.2.5 Address fields)


Байты с 14 по 23: (формат октета) Номер телефона SMS-центра, в данном случае +61 411 990 010

Блок данных протокола передачи данных (TPDU)
Байт 24: Тип сообщения

XXXXXXXX 1 = Отправка SMS-сообщения — Короткое сообщение передается с мобильной станции (MS) в Сервисный центр (SC).
XXXXXXX 0 = Отправка SMS-сообщения — Короткое сообщение передается из SC в MS.


(Обратитесь к определению параметров TPDU в GSM 03.40 — 9.2.3) В нашем случае это 0x15 = 0001 0101 в двоичном формате. Сообщение отправлено по SMS, дубликаты отклонены, и присутствует индикатор достоверности.

Байт 25: Ссылка на сообщение, если используется индикатор доставки SMS и достоверности (в данном случае не используется). Обратитесь к GSM 03.40 — 9.2.3.6 TP-Ссылка на сообщение (TP-MR)
Байт 26: Идентификатор протокола. Обратитесь к стандарту GSM 3.40 — 9.2.3.9 TP-Protocol-Identifier (TP-PID)
Байт 27: Схема кодирования данных. Обратитесь к GSM 03.38 и GSM 3.40 — 9.2.3.10 TP-Схеме кодирования данных (TP-DCS).
Байт 28: Размер сообщения равен 0x33 в шестнадцатеричном формате или 51 байту в десятичном формате. Это размер распакованного сообщения.
Обратитесь к стандарту GSM 03.40 — 9.2.3.16 TP-Длина пользовательских данных (TP-UDL).

Телефонный номер получателя (12 байт)
Байт 29: Длина номера получателя. Это правильно?. Байт 30: Тип номера, например, 0x81-неизвестно, 0x91-международный, 0xa1 -национальный.
Байты с 31 по 40: Номер телефона получателя (в формате октета)

Срок действия (VP)
Байт 41: Код срока действия. Период времени, в течение которого отправитель считает короткое сообщение действительным.
Байты с 42 по 47: Отметка времени в сервисном центре?? Для отправки SMS-сообщений

SMS-сообщение (SMS-SUBMIT)
Байты с 48 по 92: Это SMS-сообщение, упакованное в 7-битные символы. Кодировка символов SMS от точки к точке
Байт 93: Всегда 0x00

Обычное окончание для F-BUS
Байт 94: Порядковый номер пакета
Байт 95: Строка байтов заполнения устарела и должна быть четной!
Байты 96 и 97: Байты с нечетной и четной контрольными суммами.

Если телефон получает корректный кадр, он должен ответить примерно так, как показано ниже, чтобы сообщить, что он получил сообщение.
Кадр ответа, отправленный с моего Nokia 3310 (отображается в виде шестнадцатеричного дампа)

Byte: 00 01 02 03 04 05 06 07 08 09
Data: 1E 0C 00 7F 00 02 02 03 1C 72


Это точно так же, как в приведенном выше фрейме команды подтверждения. Адреса получателя и источника поменялись местами, так как этот фрейм передается с телефона на ПК. Длина этого сообщения составляет два байта, первый байт соответствует типу полученного сообщения (0x02), а следующий байт — порядковому номеру (0x03). Последние два байта являются контрольной суммой и должны быть проверены, чтобы убедиться в правильности данных.
Через некоторое время телефон ответит рамкой "Сообщение отправлено", показанной ниже.

Byte: 00 01 02 03 04 05 06 07 08091011121314151617
Data: 1E 0C 00 02 00 09 01 0800026412000144003F 1E


Байт 03: Тип сообщения = 0x02 — Обработка SMS-сообщений
Байты 04 и 05: Длина сообщения = 0x0009 — 9 байт
Байт 09: 0x02 = Сообщение отправлено
Байты с 10 по 14: Вы не уверены, что это такое?
После этого компьютер должен подтвердить передачу кадра. Пояснений здесь не требуется!

Byte: 00 01 02 03 04 05 06 07 08 09
Data: 1E 00 0C 7F 00 02 02 04 10 79

Приём SMS-сообщений с помощью F-BUS

Эта часть на самом деле довольно проста. Когда на телефон приходит SMS-сообщение, он отправляет "Кадр полученного SMS-сообщения" с прикрепленным сообщением. Всё, что вам нужно сделать, это расшифровать его.
Приведенный выше пример отправки SMS-сообщения отправляет SMS-сообщение обратно на телефон (на тот же телефон, с которого было отправлено сообщение). Таким образом, ниже приведено SMS-сообщение, которое было отправлено выше, но теперь принимается телефоном.

Byte: 00 01 02 03 04 05 06 07 08091011121314151617181920212223242526272829303132333435
Data: 1E 0C 00 02 00 59 01 08001002100007911614910910F0 00 10 19 38040000330B 91 16 04 73 08 70
Message Centre -- Phone Number
Byte: 36 37 38394041424344454647484950515253545556575859606162636465666768697071
Data: F4 70 40 32 25 30 30 822274454C 25 30 30 822274454C 74 7A 0E 6A 97 E7 F3 F0 B9 0C BA 87 E7 A0 79 D9

Byte: 72 73 74 75 76 77 7879808182838485868788899091929394959697
Data: 4D 07 D1 D1 F2 77 FD 8C 06 19 5B C2 FA DC 05 1A BE DF EC 50 080145004A 5C


Байт 03: Тип сообщения = 0x02 — Обработка SMS-сообщения
Байты 04 и 05: Длина сообщения = 0x0059 — 89 байт
Байт 09: 0x10 = Получено SMS-сообщение.
Байт 10: 0x02 = Тип памяти = SIM-карта
Байт 11: 0x10 = Местоположение, в котором сохранено SMS-сообщение — требуется для удаления SMS-сообщения.

Блок данных протокола передачи (TPDU)
Байт 24: 0x38
Байт 25: 0x04
Байт 26: Идентификатор протокола
Байт 27: Схема кодирования данных
Байт 28: Длина сообщения. 0x33 = 51 байт!
Затем компьютер должен подтвердить этот кадр как обычно

Byte: 00 01 02 03 04 05 06 07 08 09
Data: 1E 00 0C 7F 00 02 02 05 10 78


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

Удаление SMS-сообщений с помощью F-BUS

Эта часть также довольно проста. Когда на телефон отправляется SMS-сообщение, он отправляет "Полученное SMS-сообщение" с прикрепленным сообщением. В этом кадре указано местоположение, в котором сохранено сообщение. Всё, что нужно сделать, это попросить телефон удалить его.

Byte: 00 01 02 03 04 05 06 07 0809101112131415
Data: 1E 00 0C 14 00 080001000A 02 02 01 41 11 54


Байт 03: Тип сообщения = 0x14 — Функции SMS
Байты 04 и 05: Длина сообщения = 0x0008 — 08 байт
Байты с 6 по 8: Начало заголовка SMS-фрейма. 0x00, 0x01, 0x00
Байт 9: 0x0A Удалить SMS-сообщение
Байт 10: 0x02 = Тип памяти = SIM-карта — убедитесь, что сообщение сохранено в этом типе (0x03 = телефон)
Байт 11: 0x02 = Местоположение, в котором сохранено SMS-сообщение. Это местоположение можно найти в "полученном SMS-фрейме" (байт 11)
Байт 12: 0x01
Байт 13: Порядковый номер пакета.
Байты 14 и 15: Нечётные и чётные байты контрольной суммы.
→ 06:28 MSK. Пятница, 18 апреля 2025 г.
    Нашли ошибку? Сообщите вэбмастеру: wеbmаstеr@qrv.su.
◊  О проекте QRV.SU.
 Условия использования материалов сайта.
© При перепечатке материалов ссылка обязательна.
® qrv.ru : 2005 — 2006
® qrv.su : 2008 — 2025
    Построено на mini.aCMS™.
radionet
web-ring: электроника, электронные компоненты и приборы Электроника, электронные компоненты и приборы Случайный Предыдущий Следующий Яндекс цитирования Коллективная радиостанция RK6LZQ радиоклуб Элита Каменск-Шахтинский Коллективная радиостанция RK6LWL радиоклуб Возрождение г. Донецк
free counters