Как на Azure RTOS сделать Wi-Fi маршрутизатор для IoT

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

IoT маршрутизатор нужен для сбора и передачи данных в облака от различных проводных локальных шин (CAN, RS485, USB …) и беспроводных локальных сетей (Bluetooth, LoRa …).
Используя Azure RTOS сделать свой маршрутизатор достаточно просто. Нужно только правильно выбрать пару ингредиентов: Wi-Fi модуль и универсальный, быстрый, защищённый, экономичный микроконтроллер с открытой архитектурой.

  • Универсальный - потому что есть желание охватить как можно больше интерфейсов.

  • Быстрый - потому что много интерфейсов одновременно требуют большую производительность

  • Защищённый - потому что каналы связи надо на ходу шифровать, прошивку защищать от считывания, файлы тоже шифровать и подписывать. Иначе нельзя выходить в открытый интернет.

  • Экономичный - потому что иногда требуется работать от аккумулятора.

  • Открытый - потому что иначе я не мог бы писать статьи об этом.

Выбор микроконтроллера

И я выбрал платформу Renesas Synergy™, а в ней семейство S7G2, а конкретно чип R7FS7G27G2A01CBD. Платформа интересна тем, что под неё существует наиболее развитый пакет поддержки Azure RTOS. Там есть все - BSP с API под любую периферию имеющуюся в чипе, драйвера RTOS под USB, SDIO, Ethernet, RTC, SDRAM, NAND, Crypto и т.д. Экосистема настолько самобытная и уникальная, что ее нет в составе демо-проектов в репозитарии Azure RTOS. Интересующимся все исходники и документацию надо искать на сайте Renesas.
Сам микроконтроллер R7FS7G27G2A01CBD содержит ядро ARM Cortex-M4 c частотой до 240 МГц. Корпус 224-LFBGA. Выводов хватает и чтобы 16-бит SDRAM подключить, и еще с десяток интерфейсов вывести наружу, в том числе два SDIO для SD карты и для Wi-Fi модуля. Решено подключать Wi-Fi модуль по SDIO интерфейсу как наиболее быстрому. Интерфейс USB HS оставляем для подключения наружных устройств, в том числе USB-Ethernet адаптера.

Не буду пересказывать здесь спецификацию на микроконтроллер, отмечу только интересные моменты в контексте проекта маршрутизатора, которые могут оценить специалисты.

Главное - документация практически полностью открыты за исключением одного периферийного модуля. Это Secure Cryptographic Engine (SCE7). Но к нему идет библиотека с хорошим описанием API. Библиотека быстрая и надежная, проверено на практике.

Наличие на борту модуля Interrupt Controller Unit (ICU). Его необычность в том что он мультиплексирует все сигналы DMA и прерываний на одну шину событий. А затем эти события направляются как в NVIC ядра так и на модули DMA. Это сильно отличается от архитектуры большинства других микроконтроллеров, где сигналы DMA и прерываний строго разделены и одно не может использоваться вместо другого.

Следующая вытекающая особенность в том что векторам прерываний нет жестко назначенных линий прерываний от периферии. На любой вектор (а их есть 96 в чипе) можно послать любой ивент, будь то прерывание (внешнее или внутреннее) или запрос DMA.

И еще интересен модуль Data Transfer Controller (DTC). По принципу действия практически аналогичен DMA, но работать начинает по запросам прерываний, а не по запросам DMA. Т.е. периферии работающей с DTC не нужно иметь отдельно сигнала вызова DMA, достаточно сигналов прерываний. Модулю DTC доступно все адресное пространство чипа. Однако запросы модуль DTC отрабатывает последовательно и неразрывно, а не конкурентно и параллельно, как каналы DMA. Вследствие этого у DTC нет ограничения на количество обслуживаемых запросов, но скорость обслуживания падает из-за ожидания в очереди и зависимости от других запросов. DTC особенно удобно применять для обслуживания UART, I2C, SPI, SSI и других медленных интерфейсов. Этим экономятся каналы DMA для быстрых интерфейсов.

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

Надо сказать, что Renesas появился как результат слияния известных фирм Hitachi и Mitsubishi. Они и раньше делали весьма интересные микроконтроллеры. А микроконтроллеры Mitsubishi были базой для обкатки культовой RTOS uCOS-II.

Выбор Wi-Fi модуля

Наш маршрутизатор связывается с интернетом через Wi-Fi. Поскольку полевые шины могут иметь скорость до десятков Мбит/с, то модуль должен как минимум с той же скоростью передавать по Wi-Fi . В репозитариях Azure RTOS и Renesas можно найти драйвера для следующих Wi-Fi модулей:

  • SX-ULPGN на чипсете Qualcomm QCA4010, 1x1 802.11 b/g/n. Есть подробнейший мануал как все запустить c Azure RTOS. Сам по себе чип быстрый, но связь в драйвере работает через UART. Это все портит. Через UART невозможно передавать данные с нужной маршрутизатору скоростью.

  • EMW3080, 1x1 802.11 b/g/n. Связь также через UART. Т.е. слишком медленная.

  • GT-202 на чипсете Qualcomm QCA4002, 1x1 802.11 b/g/n . Связь с хостом выполняется через SPI 10 МГц. Но этого все равно мало.

Как видно, здесь все не очень подходящее. Ещё есть сторонние решения потенциально годные для портирования:

  • Модули на чипе ESP32-C5, 1x1 802.11 a/b/g/n до 40 МГц полоса. Есть диапазон 5 ГГц, но c полосой только 20 МГц. Здесь также стандартный способ обмена через UART, но есть и SDIO. В целом неплохо, но обычно у ESP нет вариантов стека для хост контроллера, т.е. добавляется необходимость программирования самих модулей и это усложняет разработку. Чип только недавно анонсирован, и могут быть сложности с приобретением.

  • CC3135MOD на чипе CC3135, 1x1 802.11a/b/g/n. Связь через SPI 20 МГц. Пиковая скорость по TCP 13 Мбит/с. Есть диапазон 5 ГГц. Но скорость интерфейса с хостом все же низкая. Большие усилия потребуются для адаптации драйверов SimpleLink на Azure RTOS

  • ATWILC3000- MR110xA 1x1 IEEE 802.11 b/g/n. Обмен с хостом череp SDIO. Это то что надо. Пиковая скорость по TCP 28 Мбит/с. Есть драйвер для FreeRTOS под стек lwIP. В прошлых статьях я описывал как легко перенести API lwIP на Azure RTOS. Этот модуль можно было бы принять как кандидата в маршрутизатор если бы не было других вариантов.

Экосистема WICED

Решено выбрать Wi-Fi модуль из экосистемы WICED. Все быстро меняется, и теперь экосистема называется AIROC™. Ныне эта экосистема принадлежит Infineon, ранее принадлежала Cypress Semiconductor, а ещё раньше чипы этой экосистемы разрабатывались Broadcom Inc. Поэтому одни и те же чипы данной категории можно встреть под разными названиями и с длинной историей.
Я остался на платформе WICED, вернее сделал своё ответвление, ибо не хотелось получить vendor lock-in. А ещё было интересно то, что WICED базировался на ThreadX RTOS, а это ядро Azure RTOS. Infineon же после приобретения Cypress перешёл на поддержку Amazon FreeRTOS. Это, конечно, не сильное препятствие для интеграции в Azure, поскольку Azure полностью эмулирует сервисы FreeRTOS, но лишний раз доказывает как опасно доверяться вендорам.

Из всего многообразия Wi-Fi модулей на базе чипов Infineon можно выбрать для нашего маршрутизатора далеко не все. Не все имеют открытые драйвера для RTOS. Наиболее интересным показался чип CYW43340. А подходящий модуль на его основе был найден у малоизвестной фирмы Inventek Systems. Это модуль ISM43340-L77.

Wi-Fi модуль ISM43340-L77

Модуль для связи с хостом использует интерфейс SDIO, частота 25 МГц. Т.е. в пределе скорость передачи может достигать 100 Мбит/с. Модуль Работает в двух диапазонах: 2,4 ГГц и 5 ГГц. Поддержка двух антенн, с выбором лучшей. Полоса частот в обоих диапазонах может достигать 40 МГц.

Вид модуля со стороны пайки
Вид модуля со стороны пайки

Это обещает скорость передачи по эфиру в 150 Мбит/с. Модуль также содержит Bluetooth v4.0 работающий через отдельный интерфейс UART со скоростью до 4 Мегабит в сек. Некоторые версии модуля поддерживают ещё интерфейс NFC. Но в нашем случае он не используется. Модуль при включении требует загрузки фирмваре. Это делается через тот же SDIO интерфейс, длиться менее 0.5 сек. Фирмваре храниться во Flash памяти микроконтроллера и занимает около 370 КБайт. API предоставляемое в WICED для данных модулей довольно обширно. Можно организовывать и точку доступа и клиентскую станцию и оба варианта одновременно. Есть широкий выбор видов защиты канала связи: WEP, WPA, WPA2, WMM, TKIP, CKIP. Доступны MESH Networking и P2P connection. Можно менять MAC адрес, сканировать эфир, фильтровать пакеты, измерять и управлять мощностью канала, выбирать каналы и многое другое.

Коммуникационные каналы модуля
Коммуникационные каналы модуля

Подключение Wi-Fi модуля

Не все пины модуля требуют подключения, многие можно оставит неиспользуемыми. Например оставлены свободными пины NFC интерфейса и I2S цифрового аудио интерфейса. Снаружи только понадобился переключатель антенн на микросхеме SKY13351-378LF. И некоторые элементы согласования антенного тракта. Антенны предусматриваются выносные.

Подключение Wi-Fi модуля на плате
Подключение Wi-Fi модуля на плате

Модуль интересен ещё тем, что у него есть пины отключения питания. Причём отдельно для Wi-Fi и отдельно для Bluetooth. Остаточное потребление составит 220 мкА.

На схеме видны также линии соединения JTAG модуля. Чип CYW43340 содержит внутри себя ядро ARM Cortex-M4, т.е. такое же как и главный микроконтроллер, а значит их можно отлаживать в той же среде в которой разрабатывается главная программа.

Архитектура маршрутизатора

Маршрутизатор лучше делать модульным. Процессорная плата 6-слойная с более тонкой медью и плата питания и драйверов 4-слойная и с более толстой медью.

Структурная схема маршрутизатора
Структурная схема маршрутизатора

Интерфейсы RS-485 и CAN гальванически изолированы от системы и друг от друга.

Так приблизительно выглядит модульная структура маршрутизатора
Так приблизительно выглядит модульная структура маршрутизатора

Забегая вперёд скажу, что на модуле ISM43340-L77 в режиме станции была достигнута скорость пересылки файлов на удалённый FTP сервер в 45 Мбит/с на диапазоне 5 ГГц. А при использовании TLS c шифрованием AES-256 скорость была 27 Мбит/с.

На этом пока все.

Источник: https://habr.com/ru/post/695968/


Интересные статьи

Интересные статьи

Всем привет! В данной статье я расскажу о том, как наша компания смогла сэкономить за счет внедрения Azure SQL Elastic Pool. Дополнительно будут примеры Azure REST API для энумерации SQL Servers, для ...
Самый распространённый стандарт для обмена информацией внутри приложений — это REST API. Его все любят, но знают, что он не идеален. В этой статье обсудим его альтернативу — GraphQL. Мы расскажем, в ч...
Как все начиналось Эта история началась 15 лет назад. Работая программистом в столице, я накапливал деньги и увольнялся, чтобы потом создавать собственные проекты. Для экономии средств уезжал до...
1С Битрикс: Управление сайтом (БУС) - CMS №1 в России по версии портала “Рейтинг Рунета” за 2018 год. На рынке c 2003 года. За это время БУС не стоял на месте, обрастал новой функциональностью...
В начале года, в отчете о проблемах и доступности интернета за 2018-2019 мы уже писали, что распространение TLS 1.3 неизбежно. Некоторое время назад мы сами развернули версию 1.3 протокола Tr...