В статье автор рассматривает особенности программирования модуля Ai-Thinker A9G для работы в качестве GPS датчика для автономных навигационных систем.
Ключевые слова: программирование, GPS-модуль, Ai-Thinker A9G.
Микроконтроллер в чипе модуля A9G программируется на языке C с использованием собственных специализированных библиотек. Микроконтроллер может выполнять множество параллельных процессов, что позволяет выполнять множество задач параллельно. Специальной среды для разработки программ для микроконтроллера нет. Код программы пишется в любом редакторе кода С, а затем компилируется в HEX файл при помощи SDK (Software Development Kit). HEX файл образовывается согласно параметрам, прописанным в конфиге Makefile, относящемся к данной программе. HEX файл прошивается на микроконтроллер с помощью специального инструмента через интерфейс UART, через порты HST_RX и HST_TX [1].
Перед использованием GPS датчика необходимо инициализировать компоненты, ответственные за работу с GPS. Из-за особенностей конструкции модуля до инициализации GPS необходимо дождаться завершения инициализации GPRS, иначе возможны сбои в питании GPS модуля. При включении модуль автоматически начинает инициализацию GPRS и при ее завершении подает на обработчик событий событие, свидетельствующее о завершении инициализации.
Данные о местоположении записываются в структуру GPS_Info_t описываемую одной из библиотек. Структура включает в себя переменные с плавающей запятой rmc.latitude.value и rmc.longitude.value. Переменные хранят в себе значения широты.
После инициализации и открытия канала GPS и проверки его работы начинается считывание местоположения используя команду Gps_GetInfo(). Короткий пример кода представлен на рисунке (Рисунок 1)
Рис. 1. Использование GPS датчика
Выходной формат данных с датчика неприменим, так как не соответствует ни одному распространенному стандарту передачи данных GPS,и не удобен для считывания пользователем. Есть необходимость перевода данных в стандартный формат долготы и широты (Рисунок 2).
Рис. 2. Перевод данных GPS в стандартный формат
В то же время для передачи данных между устройствами получил широкое распространение формат данных NMEA 0183 (National Marine Electronics Association). Сообщение формата NMEA включает в себя множество данных и контрольную сумму, исключающую возможность ошибки при передаче данных. Сообщение NMEA имеет следующую структуру (Таблица 1) [2]:
Таблица 1
Структура сообщения NMEA
Начало сообщения |
Адресная строка |
Поля данных |
Контрольная сумма |
Символ конца строки |
$ |
CNRMC или GNGGA и др. |
[данные], [данные], …, [данные] |
Контрольная сумма, сформированная по данным из 3х средних ячеек |
Стандарт NMEA включает множество видов сообщений, из которых был выбран вид GNRMC. Сообщение --RMC (Recommended Minimum Specific GNSS Data) имеет вид:
$--RMC,hhmmss.sss,x,llll.lll,a,yyyyy.yyy,a,x.x,u.u,xxxxxx,,,v*hh
hhmmss.ss — время снятия показаний (от 000000.00 до 235959.999);
x — статус (V — Ошибка датчика, A — Данные валидны);
llll.lll — широта в формате ddmm.mmm (с ведущими нулями);
A — индикатор направления отчета (N — North (Север), S — South (Юг));
yyyyy.yy — долгота в формате dddmm.mmm (с ведущими нулями);
A — индикатор направления отчета (E — East (Восток), W– West (Запад));
x.x — скорость над поверхностью земли в узлах;
u.u — курс над поверхностью земли в градусах;
xxxxxx — дата снятия показаний;
A — индикатор режима (N — не валидные данные, A — автономный режим, D — дифференциальный режим, E — оценочный режим);
hh — контрольная сумма в виде шестнадцатеричного числа.
Для получения информации о времени с помощью средств GPRS используется следующий набор команд (Рисунок 3):
Рис. 3. Набор команд для работы со временем
Для формирования строки NMEA используется функция snprintf() для составления выражений. Часть кода представлена ниже (Рисунок 4).
Рис. 4. Составление выражения NMEA
При составлении выражения формата NMEA необходимо находить контрольную сумму. Контрольная сумма генерируется применением операции XOR побитно, записи всех символов в формате ASCII. Контрольная сумма представляется в виде двух шестнадцатеричных символов. Принимающее устройство также рассчитывает контрольную сумму и, в случае несовпадения с принятой от передатчика, сообщает об ошибке [22]. Часть программного кода, реализующая составление контрольной суммы представлена ниже (Рисунок 5).
Рис. 5. Генерация контрольной суммы
Сгенерированное сообщение стандарта NMEA может быть направлено с модуля A9G на основной микроконтроллер. Таким образом, задачи обработки входных данных и формирования сообщения для отправки выполняются на микроконтроллере модуля A9G, не используя вычислительные мощности основного микроконтроллера.
Литература:
- A9G GPRS/GSM+GPS/BDS Module [Электронный ресурс]: Datasheet / Ai-Thinker — Электронные данные. — Режим доступа: https://www.makerfabs.com/desfile/files/a9g_product_specification.pdf (дата обращения 11.12.2022)
- SiRF Tecnology Inc. NMEA Reference Manual. — San Jose, 2005.