Привет! Сегодня на обзор доступный по цене ($1.92 на момент написания статьи) модуль RDA5981X1 на достаточно свежем SoC — RDA5981A, который является самым бюджетным в линейке. Обзор будет как о возможностях этого SoC, так и о компилировании прошивки с использованием makefile и GNU Arm Embedded Toolchain.
Основные фишки и возможности этого SoC:
- WiFi 2.4 ГГц, 802.11 b/g/n, 150 Мбит/сек;
- Cortex-M4F, до 160 МГц;
- 2 * UART, 2 * I2S, I2C, 8 * PWM, 4 * SPI, SDMMC, USB 2.0, ADC, 19 * GPIO;
- Поддержка внешней PSRAM (привет Espressif с ESP32);
- Встроенная flash 8 Мбит;
- 160 Кб SRAM, из них 96 Кб доступно пользователю (не шибко густо, особенно после RTL8195AM\RTL8711AM);
- Корпус QFN-40, 5×5 мм.
Картинка из даташита со всем доступным добром на борту:
Первый взгляд
Внешне модули выглядят вот так в сравнение с другими, оказавшимися под рукой (кликабельно):
Cлева направо, верхний ряд: RTL-00, MJIOT-02, EMW3080; нижний ряд: MJIOT-03, RDA5981X1.
Досадно, но никакой документации (ни даташит, ни тем более сертификаты…) именно на модуль RDA5981X1 я не нашел (может быть позже появится). Поэтому спешить закладывать этот модуль в свои устройства я бы не спешил!
По внешним габаритам модуль RDA5981X1 из всех представленных на фото выше самый маленький. Габариты модуля, снятые с имеющихся у меня в наличии, в виде футпринта (вроде бы без ошибок):
Сверху площадь с высотой 7 мм над падами до верхнего края модуля — это площадь под антенной, на ней нельзя проводить дорожки или заливки медью. Пад же имеет следующие размеры:
Высота модуля — не более 2,25 мм.
Также с модулем идёт плата-переходник для breadboard (кликабельно):
Правда, разводка там как попало, левой ногой, и позабавил момент с перемычкой от центрального пада к общему проводу — перемычка в виде падов для соединения каплей припоя, под модулем… круто, «удобно» и реально по-новаторски! Так точно никто не делал до этого. ;)
Еще момент по ней: забавно, что в аналогичной по назначению плате-переходнике под ESP-12 у этой же компании есть минимальный набор для работы с модулем, а здесь — голая плата. По-хорошему нужно прикладывать или опционально давать заказать хотя бы вот такого типа плату-переходник (фото из недр SDK и примеров к нему):
Я же напаял модуль на идущую в комплекте плату-переходник, гребёнку расположил снизу, а также напаял на nRESET резистор-подтяжку (в модуле подтяжка nRESET отсутствует!) к VCC3P3 и кнопку сброса, выглядит вот так:
Пока паял, заметил такой момент — вход АЦП рядом с USB линиями данных… ну ОК, хотя по логике так делать неправильно — будет USB явно подшумливать на вход АЦП во время работы.
Схемотехника
Несмотря на простоту внутренностей обозреваемого модуля (видно на фото выше, с модулем без экранирующей крышки) схемотехника включения SoC сложнее, чем кажется. Ещё в начале просмотра даташита можно наткнуться на такую таблицу:
Вход питания VBAT — до 4,2 В, прям для LiIon аккумулятора! Это интересно. По потреблению тока же одна из следующих таблиц:
Показывает вполне интересные значения потребляемого тока в сравнении с модулем EMW3080, построенном так же на Cortex-M4F и даже более низкой частотой работы (133/125 МГц в EMW3080 vs 160 МГц в RDA5981X1):
Полистав даташит (файл RDA5981A DataSheet v1.2.pdf) дальше, можно увидеть рекомендуемую схему включения, хоть и неполную (кликабельно):
Из файла RDA5981A_HDK_V1.3_20170703_sch.pdf можно взять продолжение:
Тут, судя по всему, несколько напутано, к примеру, при высоком VBAT убирается LDO U3, но зачем-то остаётся резистор R30, висящий в воздухе, и наоборот, при VBAT ~ 3,3 В ставится LDO и убирается резистор R30, необходимый для его работы.
Из описания на SoC и этой схемы становится ясно, что внутри SoC уже есть LDO, с помощью которого можно получать +3,3 В на выводе LDO33, а также для питания ядра внутри есть импульсный DC-DC для получения +1,8 В. Питание IO также можно выбрать подачей нужного уровня питания на вывод VIO. Такие встроенные мелочи дают возможность максимально оптимизировать потребление от аккумулятора и минимизировать применение внешних компонентов (но для получения от аккумулятора стабильных +3,3 В для чувствительной периферии один только встроенный в SoC LDO всё равно не спасёт, и придется, конечно, ставить тот же SEPIC DC-DC).
Порывшись в HDK папке, можно найти простые примеры подключения всяких мелочей для новичков, типа MicroSD карты:
АЦП для считывания кнопок:
Или USB в виде девайса или хоста:
С USB, правда, косяк — в одном документе (картинка с него выше) советуется всё подключать напрямую, без защит, ферритовых бусин и типа всё ОК. А в другом уже более грамотно всё, с супрессорами на линиях данных и бусинами по питанию:
Понятное дело, правильно будет именно как во втором варианте сделано. В качестве супрессоров в своих разработках можно использовать дешевые и доступные USBLC6-2.
SDK и пример Makefile проекта
Все примеры и, собственно, руководство по сборке их с помощью MBED можно посмотреть в документах рядом. Мне же не интересно ставить ради этого SoC MBED, питон и т. д., лень, поэтому пойду другим путём. Тем более это будет альтернативный вариант сборки проекта под этот SoC, а разнообразие выбора — это хорошо, имхо!
Проект можно скачать тут — ADElectronics/RDA5981_SDK_TEST_VS. И вкратце основные изменения от официального SDK, а также нововведения:
- Вырезаны все .py тулсы по сборке с помощью mbed;
- Все примеры собраны в папке demo;
- Вырезан весь мусор, не относящийся к сборке с помощью Makefile;
- В папке tools собраны различные утилиты по работе с SoC;
- В корне есть проект для Visual Struio 2015, сделанный по аналогии с RTL8195AM;
- В корне есть пара батников, они тестовые и их можно удалить :) ;
- В userset.mk указывается расположение SDK, на данный момент протестирован относительный путь;
- В project.mk указывается папка из примеров или своя, из которой автоматически будут подхвачены все исходники *.c, *.cpp, *.s, если необходимо указать конкретные исходники, то используются переменные ниже;
- В SDK\sdkset.mk настройки SDK, периферии SoC (там, к примеру, можно поменять скорость работы UART по-умолчанию объявлением DMBED_CONF_CORE_STDIO_BAUD_RATE=921600);
- В SDK\sdkbuild.mk более глобальные настройки компиляции и сборки;
- В SDK\paths.mk можно не заглядывать ;)
Вот. Из нереализованного пока что:
- Исправить компиляцию, она пока возможна только в 1 поток (-j 1);
- Инструменты для прошивки и отладки с помощью J-Link.
Если есть спецы по makefile, то буду рад указаниям, как более грамотно это все сделать или что поправить… я в этом нуб, честно говоря. :\
Процесс прошивки модуля крайне прост и не требует программатора-отладчика, если хочется по-быстрому всё сделать. Используя утилиту от производителя FlashTest v01.00.08 (в папке tools), можно прошивать модуль по UART. Последовательность действий такова: подключаем модуль к UART переходнику (Rx, Tx выводы на плате переходнике), главное, чтобы поддерживал скорость 921600. Далее запускаем утилиту FlashTest:
В Setup (с ошибкой написано во многих утилитах, забавно) можно изменить только скорость и объём памяти, для RDA5981A всё по умолчанию:
Выбираем порт, файл прошивки *.bin, лежащий в Debug\bin и жмём Start:
Программа ждёт ответа от SoC. Теперь просто жмём на кнопку сброса и начнётся процесс прошивки:
После завершения прошивки будет произведена верификация и отключение от выбранного COM порта (к нему можно подключиться терминалом):
Свежезалитая прошивка в модуле еще не стартовала. Жмём опять на кнопку сброса, и в терминал модуль выплюнет следующее (я залил модифицированный PWM пример):
RDA Wlan Boot ROM for RDA5991H v1.0 Build Time: 07:20:54 - Jan 24 2017 RDA Microelectronics Copyright(C) 2004-2017 Enter Mcu Mode count_left=5 count_left=4 count_left=3 count_left=2 count_left=1 Ready to boot... Partition addr:4010901c Find newest partition index:0, total:1, buf_addr:0x00100000, size:0x00000138 Partition[0] info flag:00000001, version:rda5991h p_address:00001000, r_address:00001000, psize_in_bytes:0x0000b000, dsize_in_"ËS—Q‹)H>' Ú¼HN +i)þ PWM duty=0.010000 PWM duty=0.020000 PWM duty=0.030000 PWM duty=0.040000 PWM duty=0.049600
Это простой путь. Долгий, правда, прошивка заливается в среднем секунд 5-8 + требуется нажимать на кнопку сброса (да ещё и припаять её сначала). :)
Отладка и прошивка с помощью J-Link
Этот раздел будет дополнен позже.
Вывод
По цене и предлагаемой периферии на борту SoC очень интересное и перспективное решение. В тоже время в документах довольно много мелких ошибок, неточностей, что может говорить о том, что всё это сделано наспех и быстро для продажи (привет Espressif х2). По SDK можно сказать аналогично — не всё ещё работает или есть примеры, на тот же USB пока ещё мало чего есть, на официальном форуме говорят, что в следующих релизах добавят поддержку USB Device и пример работы, хотя всё основное уже присутствует и можно поиграться. Также довольно много утилит есть в открытом доступе для прошивки\тестирования модуля, что вроде бы плюс, но их исходников нет, как нет и поддержки со стороны пользователей — чип\модуль совсем новые для публичного рынка.
В итоге вывод трудно сделать, думаю, каждый должен сам для себя решить — дать ли шанс новому SoC и стоит ли работать с ним или овчинка выделки не стоит.
Ссылки
- RDA5981A — голый чип для пайки на собственной разработки платы;
- RDA5981x1 — модуль на RDA5981A;
- RDA5981x1 Mini Dev. Board R1 — НЕ РЕКОМЕНДУЕТСЯ. Судя по фотографиям — разводка там кривая… к примеру, линии данных от USB тянутся как попало, как будто это обычные IO для мигания светодиодом;
- RC01 — новый модуль на RDA5981C + RDA5856QE32;
- ADElectronics/RDA5981_SDK_TEST_VS — мой пример проекта и SDK;
- Edragon/RDA — SDK, примеры, документация;
- Edragon/RDA-temp — минималистичный вариант SDK с примерами;
- RDAmicro — официальный форум RDA.
(Sorry for writing in English, I don’t speak Russian, I hope google translate will help ;-) )
Thank you for putting a lot of info about this module into one post, it’s very helpful! I am trying to find the module with the lowest power consumption while remaining connected to Wifi. I have looked at esp8266, esp32, and rtl8710 (https://blog.voneicken.com/projects/low-power-wifi-intro/) and it does not look like the rda5981 is any better? The datasheet says 47mA for «Wifi connected», that’s huge. Does it not go into power-save mode? Have you tested low-power operation?
НравитсяНравится
Hi!
I’m glad, if it helped you. :)
About this SoC — it’s good hardware, but VERY bad support (SDK, docs and official forum of RDA), so after couple of month (!) i tryed to get any answers on official RDA forum — nothing, my questions was just ignored… and i don’t work with this SoC anymore, support of RDA is really poor.
And sorry, i don’t tested low-power modes on this SoC…
НравитсяНравится
Thanks for the info! Have you tried MT7687/MT7697? They are a little more expensive, I believe, but may also be low power… I am looking for the lowest possible power consumption while connected to Wifi…
НравитсяНравится
No, i don’t tried any SoC from MediaTek, sorry.
I think WiFi and Low power — it’s incompatible, for low power need to use bluetooth, LoRa or other..
НравитсяНравится
Haha, wordpress «translates» my english into incomprehensible stuff!
НравитсяНравится
All looks fine. :)
P\s And my english is not perfect, so.. :D
НравитсяНравится