Pull to refresh

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

Reading time6 min
Views3.6K

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 Мбит/с.

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

Tags:
Hubs:
Total votes 5: ↑3 and ↓2+1
Comments4

Articles