СЕКЦИЯ
Цифровые образовательные практики

Алексеевский П. И.

Кудрявцев А. В.

Уральский государственный педагогический университет

г. Екатеринбург

Изучение протоколов передачи данных на примере организации взаимодействия с микроконтроллером

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

Alexeevskiy P. I.

Kudryavtsev A. V.

Ural state pedagogical university

Yekaterinburg

The study of data transfer protocols through the implementation of a microcontroller interaction

This article describes an experience of teaching topics on data transmission protocols to students of a pedagogical university. As a study sample, an implementation of an interaction between a microcontroller-based platform and a personal computer is provided, for an effective transmission of data and control commands.
При обучении студентов вуза дисциплинам, связанных с архитектурой компьютера и компьютерных сетей, может возникнуть проблема наглядной демонстрации процесса передачи информации, а также обоснования необходимости разработки специализированных протоколов обмена данными для решения различных прикладных задач. Теоретическая часть процесса обмена информацией может быть проиллюстрирована с помощью схем и временных диаграмм, но наглядное представление процесса на конкретных примерах и с применением специального оборудования позволяет продемонстрировать его в динамике, что положительно сказывается на качестве усвоения студентами учебного материала.
Натурная демонстрация процессов обмена информацией может осуществляться с использованием платформ на базе микроконтроллеров. Для взаимодействия между персональным компьютером и микроконтроллером, а также между двумя и более микроконтроллерами, могут быть использованы такие интерфейсы, как UART (универсальный асинхронный приёмопередатчик), CAN (сеть с пакетным режимом передачи данных между контроллерами) и другие. Описываемые в данной статье примеры предполагают использование интерфейса UART для взаимодействия с ПК через USB-UART-преобразователь, либо с использованием иных средств, встроенных в платформу на базе микроконтроллера.
Для повышения читаемости кода, а также для упрощения реализации взаимодействия отдельных элементов программы (в частности, для реализации очереди) может быть использована какая-либо операционная система реального времени для микроконтроллеров, например, FreeRTOS [1].
Приведённые ниже примеры были разработаны и протестированы с использованием платформы Arduino UNO R4 Minima на базе микроконтроллера Renesas RA4M1, однако могут быть адаптированы и для других платформ. Портируемость примеров обеспечивается использованием Arduino-совместимых библиотек, реализация которых существует для множества различных микроконтроллеров, а также применением операционной системы реального времени FreeRTOS для решения задач синхронизации и обмена данными между компонентами программы.
Необходимость создания специализированного протокола передачи данных может быть продемонстрирована на простом примере. Пусть есть некоторый датчик, показания которого требуется передавать на обработку в персональный компьютер с максимально возможной скоростью. Классические примеры подобного рода задач обычно предполагают вывод некоторого текстового сообщения, частью которого будет текстовое же представление значения, полученного от датчика. Таким образом, для вывода одного значения через программу эмуляции терминала (или просто монитор последовательного порта, как в среде Arduino и аналогичных) потребуется передать до нескольких десятков байтов данных, в то время как исходное числовое значение могло занимать один или два байта.
Заметим, что скорость передачи данных через последовательный порт (даже если он эмулируется через интерфейс USB) невысока, и за время передачи длинного сообщения показания датчика могут многократно измениться. Накапливать данные перед отправкой в данном случае нецелесообразно, поскольку заполнение какого-либо буфера поступающими данными в таком случае будет всегда происходить быстрее, чем отправка этих данных. Следовательно, для решения задачи следует минимизировать объём передаваемых через последовательный интерфейс данных.
Однако, если передавать данные в «сыром» виде, без какой-либо дополнительной обработки, просмотр этих данных в текстовом мониторе последовательного порта будет невозможен. Для приёма и обработки данных в таком случае потребуется написать специальную программу, которая и будет приводить эти данные к читаемому виду. Дополнительно такая программа могла бы формировать и графическое представление принимаемых данных.
Фрагменты листингов отправляющей (со стороны микроконтроллера) и принимающей (со стороны ПК) программ приведены на рисунке 1 слева и справа соответственно.

Рис. 1 — Фрагменты листингов программ опроса датчика


В данном примере предполагается, что некоторая задача осуществляет опрос датчика и помещает полученное с него значение в глобальную переменную sensor_value, значение которой предполагается отправить для обработки в персональный компьютер. Для минимизации объёма передаваемых данных, отправка осуществляется только при изменении значения переменной. Значение отправляется в виде двухбайтного массива (предполагается, что значение имеет длину 2 байта) через последовательный интерфейс, и может быть принято и обработано программой на ПК.
Фрагмент принимающей программы демонстрирует один из вариантов организации получения значений из последовательного порта. В данном случае приём осуществляется в массив из двух байтов, который на самом деле является одной переменной, хранящей шестнадцатиразрядное целое число. После получения обоих байтов значения, оно отправляется на дальнейшую обработку, а буфер начинает заполняться с начала.
Другой пример связан с отправкой команд с ПК на микроконтроллер для управления подключенными устройствами. Поскольку устройство, которым предполагается управлять, может не успевать обрабатывать команды с той скоростью, с которой они приходят с ПК (предполагается, что скорость отправки команд в среднем не превышает максимально возможную скорость их обработки), получаемые команды следует размещать в буфере достаточного размера. Пока буфер команд, принимаемых через последовательный интерфейс, пуст, программа микроконтроллера (а именно, тот её компонент, который осуществляет управление подключенным внешним устройством) пребывает в состоянии ожидания. При появлении данных в буфере осуществляется их извлечение и обработка (отправка соответствующих команд подключенному оборудованию).
Фрагмент листинга программы для микроконтроллера, участвующей в таком обмене данными, приведён на рисунке 2.

Рис. 2 — фрагмент листинга программы приёма команд


В приведённом примере в роли буфера команд выступает очередь операционной системы FreeRTOS. Размер буфера (очереди) задаётся при её создании и выбирается исходя из предполагаемой скорости отправки команд и из возможностей используемого микроконтроллера.
При демонстрации студентам учебного материала с использованием данных примеров был отмечен повышенный интерес к каждому из этапов взаимодействия компонентов системы (микроконтроллера и ПК) по сравнению с исключительно теоретическим описанием коммуникационных интерфейсов и протоколов.
Полный текст программ для всех представленных в данной статье примеров опубликован в git-репозитории по адресу https://gitflic.ru/project/evilunyuu/transmission-proto-examples-2025. Приведённые примеры могут быть расширены и дополнены в процессе демонстрации студентам. В частности, может быть добавлено больше датчиков в первой программе, что потребует расширения протокола — либо увеличения размера пакета, чтобы вместить дополнительные значения, либо указания идентификатора датчика, значение с которого изменилось. Для второй программы аналогично может быть добавлен идентификатор управляемого устройства.

Литература:
1. Курниц, А. FreeRTOS - операционная система для микроконтроллеров / А. Курниц // Компоненты и технологии. – 2011. – № 2(115). – С. 96-100. – EDN NCDJHZ.
ВОПРОСЫ И КОММЕНТАРИИ
Made on
Tilda