Подключаем GNSS-модуль TESEO-LIV3F с помощью интерфейса I2C

26 ноября

системы безопасностиавтомобильная электроникаучёт ресурсовинтернет вещейST Microelectronicsстатьябеспроводные технологиисредства разработки и материалы

Александр Калачев (г. Барнаул)

Навигационные модули Teseo-LIV3F производства STMicroelectronics, в отличие от конкурентов, поддерживают сразу два коммуникационных интерфейса: UART и I²C. При ряде задач удобнее осуществлять обмен навигационными данными именно по I²C. В статье описана работа модуля в режиме I2C-датчика местоположения.

GNSS-модуль TESEO-LIV3F как основа автомобильных трекеров. Технические параметры и области применения

Навигационные модули позволяют ощутимо уменьшить время разработки оборудования, поскольку в их состав, помимо самой микросхемы приемника, включены и другие элементы, такие как системы питания и тактирования, память, ВЧ-тракт, внешние пассивные компоненты. Пример такого модуля — Teseo-LIV3F (рисунок 1) – первый навигационный модуль производства компании STMicroelectronics, построенный на базе микросхемы приемника Teseo III [1, 2].

Рис. 1. Навигационный модуль Teseo-LIV3F

Рис. 1. Навигационный модуль Teseo-LIV3F

Teseo-LIV3F имеет высокопроизводительное процессорное ядро ARM9, 32 кбайт ОЗУ, 16 Мбит Flash, систему питания (SMPS и Backup LDO), систему тактирования (термокомпенсированный кварцевый генератор TCXO, часы реального времени RTC), коммуникационные интерфейсы UART и I2C, ВЧ-тракт. 

Модуль Teseo-LIV3F способен работать практически со всеми популярными спутниковыми системами позиционирования – ГЛОНАСС, GPS, Galileo, BeiDou, QZSS. Для систем ГЛОНАСС и GPS поддерживается режим дифференциального позиционирования – DGPS (Differential Global Positioning System).

Среди дополнительных опций:

  • встроенная Flash-память объемом 16 Мбит, которую можно применять для ведения лога или хранения данных: координат, скорости, настроек приложения и прочего;
  • встроенные функции: одометр, измерение скорости, уведомление при пересечении заданных геозон (Geofencing).

В ряде случаев полезна такая возможность как расчет координат при комбинированном использовании нескольких глобальных навигационных спутниковых систем (ГНСС), например, ГЛОНАСС и GPS или GPS и Beidou.

Все это позволяет использовать модули Teseo для решения широкого спектра задач, требующих навигационных данных, среди которых:

  • навигация для авто-, мото- и велотранспорта;
  • навигация для дронов и беспилотных летательных аппаратов;
  • отслеживание грузов и отправлений;
  • тахография и мониторинг перемещения транспорта;
  • отслеживание положения детей и животных.

Почему использование I2C может быть удобнее, чем традиционный UART 

В отличие от конкурентов, модули Teseo-LIV3F поддерживают сразу два коммуникационных интерфейса: UART и I²C. Оба интерфейса работают с привычным для навигационных приемников протоколом NMEA.

Универсальный асинхронный приемопередатчик UART уже считается стандартным для применения в навигационных приемниках. В Teseo-LIV3F для UART выделены две линии: RX0 и TX0. Для хранения передаваемых и принимаемых данных используются два 64-байтных FIFO-буфера.

Дополнительно Teseo-LIV3F способен осуществлять обмен данными по I²C со скоростями 100 и 400 кГц. Для I²C выделены выводы SDA и SCL. Teseo-LIV3F всегда выступает в качестве ведомого, а его адрес задается в конфигурационной прошивке.

Поддержка I²C весьма ценна для систем с многочисленными датчиками, поскольку они все могут быть подключены к одной шине.

Стандартный интерфейс NMEA через I2C является зеркалом интерфейса NMEA через UART – GNSS постоянно заполняет буфер I2C данными о спутниках и местоположении, а внешний микропроцессор должен непрерывно извлекать их для очистки буфера I2C. В Teseo-LIV3F его I2C-интерфейс в режиме по умолчанию также поддерживает типовой поток данных NMEA 0183-Rev.3.1, и хост-контроллер может отслеживать его аналогично работе с UART.

Однако возможны случаи, когда постоянное периодическое получение (и разбор) NMEA-строк не требуется, и с точки зрения логики выполнения прикладной задачи удобнее запрашивать навигационные данные в произвольные моменты времени или же получать их по заранее определенным событиям. Модуль Teseo-LIV3F такую возможность предоставляет – это так называемый режим I2C-датчика местоположения (I2C Positioning Sensor).

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

Аппаратная и программная реализация I2C в TESEO-LIV3F. Как работать с этим интерфейсом 

Для работы в режиме I2C-датчика местоположения встроенное программное обеспечение (прошивка) Teseo-LIV3F нуждается в конфигурировании.

I2C-интерфейс Teseo-LIV3F имеет собственное 64-битовое поле настройки сообщений – I2C-message-list (CDB-ID 231 и CDB-ID 232), в котором прописывается, какие из сообщений NMEA будут периодически (и постоянно) записываться во внутренний буфер интерфейса или будут посылаться при I2C-запросе со стороны хост-контроллера.

Установка I2C-message-list в нулевые значения останавливает заполнение буфера интерфейса навигационными сообщениями.

I2C-датчик местоположения в Teseo-LIV3F основывается на команде $PSTMNMEAREQUEST, заставляющей его выдать NMEA сообщения в соответствии с I2C-message-list (CDB-ID 231 и CDB-ID 232).

Синтаксис команды, запрашивающей у модуля задаваемые хост-контроллером сообщения, следующий:


$PSTMNMEAREQUEST,<msglist_l>,<msglist_h>*<checksum><cr><lf>

Наглядно и доступно процесс настройки Teseo-LIV3F в режим I2C-датчика местоположения показан в документе «AN5203 Application note Teseo-LIV3F – I2C Positioning Sensor» [3, 4].

В примере задействуется микроконтроллер серии STM32 в составе отладочной платы NUCLEO-F401RE, навигационный модуль Teseo-LIV3F в составе оценочной платы X-NUCLEO-GNSS1A1, показан процесс настройки и выдачи навигационного сообщения $GPGLL по внешнему событию – нажатию кнопки (голубая) на плате NUCLEO-F401RE.

Задействованные аппаратные ресурсы:

  • плата X-NUCLEO-GNSS1A1;
  • плата NUCLEO-F401RE;
  • USB-кабель для подключения NUCLEO-F401RE к ПК;
  • кабель FTDI-UART2USB.

С сайта www.st.com необходимо загрузить и установить:

  • программу для просмотра и анализа накопленных данных ST TESEO-SUITE;
  • визуальный графический редактор для конфигурирования микроконтроллеров семейства STM32 – STM32cubeMX;
  • среду разработки Atollic TRUEStudio.

Желательно также иметь на ПК любую из программ для работы с терминалом (СОМ-портом), например, TerminalConsole или HyperTerminal, он понадобится для вывода сообщений, генерируемых контроллером STM32.

Конфигурация прошивки Teseo-LIV3F платы X-NUCLEO-GNSS1A1 может быть изменена при помощи приложения TESEO-SUITE. Для этого необходимо при помощи кабеля FTDI-UART2USB подключить X-NUCLEO-GNSS1A1 к ПК (рисунок 2).

Рис. 2. Подключение X-NUCLEO-GNSS1A1 к ПК для конфигурирования прошивки

Рис. 2. Подключение X-NUCLEO-GNSS1A1 к ПК для конфигурирования прошивки

Затем на ПК:

  • открыть приложение TESEO-SUITE;
  • разрешить соединение UART/COM с X-NUCLEO-GNSS1A1;
  • используя панель NMEA DecodingPanel в приложении, послать модулю следующую последовательность команд:
    • $PSTMCFGMSGL,3,1,0,0;
    • $PSTMSETPAR,1227,1,2;
    • $PSTMSAVEPAR. 

Указанные команды:

  • сбрасывают список сообщений I2C;
  • отключают дублирование сообщений (eco-ingmessage);
  • сохраняют конфигурацию в энергонезависимой памяти.

Теперь модуль Teseo-LIV3F настроен как I2C-датчик местоположения.

Далее необходимо установить X-NUCLEO-GNSS1A1 в разъем платы NUCLEO-F401RE (рисунок 3) и при помощи USB-кабеля подключить плату контроллера к ПК.

Рис. 3. Отладочная плата NUCLEO-F401RE с подключенной X-NUCLEO-GNSS1A1

Рис. 3. Отладочная плата NUCLEO-F401RE с подключенной X-NUCLEO-GNSS1A1

При помощи STM32Cube-MX создается конфигурация выводов и настройка прерываний:

  • создается новый проект для STM32 на NUCLEO-F401RE;
  • в конфигурации выводов разрешается работа интерфейса I2C-1, его выводы отображаются как SDA, SCL на пины PB9, PB8 (рисунок 4);

Рис. 4. Конфигурирование I2C и привязка внешних выводов

Рис. 4. Конфигурирование I2C и привязка внешних выводов

  • в качестве входного вывода конфигурируется GPIO_EXTI13 – к нему подключена голубая кнопка отладочной платы (рисунок 5);

Рис. 5. Настройка внешнего вывода для голубой кнопки

Рис. 5. Настройка внешнего вывода для голубой кнопки

  • во вкладке «Configuration» настраивается прерывание по изменению уровня на выводе GPIO_EXTI13 (кнопка NVIC), как показано на рисунке 6;

Рис. 6. Настройка прерывания для реакции на нажатие голубой кнопки

Рис. 6. Настройка прерывания для реакции на нажатие голубой кнопки

  • во вкладке «Pinout» разрешается работа последовательного порта USART2 в качестве асинхронного последовательного порта (рисунок 7);

Рис. 7. Настройка USART2

Рис. 7. Настройка USART2

  • задается конфигурация USART на скорость 115200 бит/с с одним стоп-битом и без проверки четности и управления потоком (рисунок 8).

Рис. 8. Конфигурирование USART2

Рис. 8. Конфигурирование USART2

На этом конфигурация выводов и периферии для примера закончена.

Через пункт «GenerateCode» меню «Project» генерируется шаблон (так называемый «скелет») кода приложения. Полученный код далее открывается в проекте в Atollic TrueSTUDIO.

«Скелетный» код содержит процедуры инициализации и настройки:

  • шины I2C;
  • UART-а для вывода сообщений на терминальную консоль ПК;
  • обработку прерывания по нажатию синей кнопки.

Для получения приложения с минимальной функциональностью требуется добавить еще несколько строчек.

Добавляется функция для вывода строки через UART:


voidConsole_Write(uint8_t *string){

HAL_UART_Transmit(&huart2, string, strlen((char *)string), 1000);

}

Добавляется call-back-функция для обработки прерывания от кнопки (просто изменяется значение переменной):


static volatile _read = 0;

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){

_read = 1; }

Для получения $GPGLL-сообщений формируется строка команды: данное сообщение имеет номер-код 0x100000 ( или 20-й бит в младшем слове битового поля CDB-ID 231-232). Задание строки выглядит так:


static const char *gpgll_msg = "$PSTMNMEAREQUEST,100000,0\n\r";

Финальный код основной функции (main) выглядит следующим образом:



1 while (1) {

2 HAL_I2C_DeInit(&hi2c1);

3 HAL_I2C_Init(&hi2c1);

4 if (_read == 1) {

5  _read = 0;

6  Console_Write("Sending commands...");

7  HAL_I2C_Master_Transmit(&hi2c1, 0x3A << 1, (uint8_t *)gpgll_msg, strlen(gpgll_msg), 2000);

8  Console_Write(" got:... \r\n");

9  for (read_buf[180-1] = 0; read_buf[180-1] != 0xff;) {

10        HAL_I2C_Master_Receive(&hi2c1, 0x3A << 1, read_buf, 180, 2000);

11        for (i = 0; i< 180; ++i)

12        if (read_buf[i] != 0xff)

13        HAL_UART_Transmit(&huart2, &read_buf[i], 1, 1000);

14   }

15   Console_Write("\r\n");

16   }

17 }

В бесконечном цикле ожидается обнаружение нажатия кнопки. Когда данное событие обнаруживается (условие в строке 4), по I2C-модулю Teseo-LIV3F посылается команда $PSTMNMEAREQUEST с запросом сообщения $GPGLL (строка 7).

После отправки команды считываются запрошенные данные (строка 10), которые затем транслируются в UART (строки 11…13) и отображаются в терминальном приложении на ПК (рисунок 9).

Рис. 9. Отображение считанных с навигационного модуля сообщений на ПК в терминальной программе

Рис. 9. Отображение считанных с навигационного модуля сообщений на ПК в терминальной программе

Примечание. Помещение строк 2 и 3 в тело цикла While(1) сделано намеренно, чтобы гарантировать корректную работу I2C на любых микроконтроллерах семейства STM32.

Заключение

Настройка модуля Teseo-LIV3F в режим I2C-датчика местоположения (I2C Positioning Sensor) достаточно проста и может быть выполнена как до установки модуля в целевое устройство, так и в качестве прикладной задачи однократно при запуске приложения.

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

Литература 

  1. В. Гавриков. TESEO-LIV3F – первый навигационный модуль STMicroelectronics
  2. Серия навигационных приемников GPS ГЛОНАСС TESEO-LIV3F 
  3. AN5203 Application note Teseo-LIV3F – I2C Positioning Sensor
  4. Using the Teseo-LIV3F as an I2C Positioning Sensor
•••

Наши информационные каналы

О компании ST Microelectronics

Компания STMicroelectronics является №1 производителем электроники в Европе. Компоненты ST широко представлены в окружающих нас потребительских товарах – от iPhone до автомобилей разных марок. Лидеры индустриального рынка выбирают компоненты ST за их надежность и выдающиеся технические параметры. В компании ST работает 48 000 сотрудников в 35 странах. Производственные мощности расположены в 12 странах мира. Более 11 тысяч сотрудников заняты исследованиями и разработками – инновационное лидерство ...читать далее

Товары
Наименование
TESEO-LIV3F (ST)
TESEO-LIV3R (ST)
X-NUCLEO-GNSS1A1 (ST)