Архив 1 октября 2017

Texas Instruments CC3220SF-LAUNCHXL

Приехала на днях демоплата от Texas Instruments. С микроконтроллером СС3200 я балуюсь достаточно давно, и узнав о появлении его новой версии CC3220 – практически при первой же возможности решил заказать отладочный набор. Но в апреле-мае это у меня не вышло – TI отказывался слать набор из своего магазина в Россию, ссылаясь на проблемы с таможенными органами, а в Чип-и-Дипе и Терраэлектронике эта же платка стоила неприлично дорого. Настолько неприлично, что я даже стал рассматривать варианты заказа в каком-нибудь Farnell или Mouser – по срокам то же, а по деньгам выходило дешевле. Останавливало одно – даже на коробке написаны слова WiFi и 256-bit encryption, на которые, по слухам, любят возбуждаться таможенники.

Но вот буквально на прошлой неделе я просматривал нотификации ФСБ и обнаружил многообещающий документ. Теперь можно было не пугаться надписей на коробке – так как согласно этому документу, этот отладочный набор средством шифрования не является. В общем, от “таможенных” проблем я был избавлен и со спокойной совестью заказал игрушку непосредственно у TI.

Кстати, обратите внимание на интернет-магазин Texas Instruments. Понятно, что заказывать оттуда отдельные детали – не совсем правильный путь, велик шанс, что посылку признают “коммерческой партией”, а вот отладочные наборы – почему бы и нет? Тот же CC3220SF-LAUNCHXL стоит у TI 49,99$ + 6,99$ доставка (а при заказе от 150$ – доставка бесплатна) – итого что-то около 3300 рублей. Для сравнения – в Терраэлектронике этот же набор предлагается за 5684 рубля со сроком поставки три недели, в Чип-и-Дипе – был примерно за 6000 с аналогичным сроком поставки (по-моему, раздел “Позиции на заказ” у них повторяет каталог Farnell). При этом TI store доставляет экспресс-почтой FedEx, у меня от момента заказа до вручения посылки прошла всего лишь неделя (пять рабочих дней – по идее, заказав в понедельник, теоретически можно получить свой заказ уже в пятницу).

Комплект поставки – сама плата в антистатическом пакетике, шнурочек с MicroUSB и пара бумажек с адресами сайтов TI и Terms and Conditions. В общем, ничего особенного. Что же мы получаем за 3300 рублей? На демоплате имеется:

- микроконтроллер CC3200SF со всей необходимой “обвязкой”;
- подключенные по I2C датчик температуры и акселерометр;
- повторитель на ОУ для аналоговых входов;
- две кнопки, три светодиода;
- “гребенки”, соединенные со свободными пинами МК;
- отладчик типа XDS110.

Разрабатывая демо-платы линейки LaunchPad, в TI явно посматривали в сторону ардуины. Во всяком случае, идея, что надо сделать универсальный разъем для дочерних плат с любой периферией (у TI они называются BoosterPack) – явно оттуда. В фирменном интернет-магазине встречаются такие платы со слотом для SD-карты, например, или с маленьким дисплейчиком, кнопками и джойстиком. Не знаю, кем надо быть, чтобы покупать BoosterPack со слотом для SD-карты, а затем героически дорабатывать его напильником, когда примерно то же самое можно сделать, имея в хозяйстве адаптер для MicroSD и разъем типа BLD-20 – но давайте не будем смеяться.

Главное здесь, конечно – это микроконтролер CC3220SF. Заявленные характеристики звучат весьма многообещающе:

- ядро Cortex-M4 с тактовой частотой 80 МГц;
- 256 кБ SRAM (в версиях без встроенной флеш-памяти пользователю доступно около 240 Кб);
- 1 МБ флеш-памяти процессора (в версии SF);
- 2xUART;
- SPI;
- I2C;
- SD-host;
- 4 таймера с ШИМ;
- watchdog;
- 4 канала АЦП с разрядностью 12 бит;
- McASP;
- интерфейс камеры (parallel camera interface module);
- до 27 линий ввода-вывода.

Короче говоря, засунули буквально все, что можно – хотя нахрена здесь, скажем, интерфейс камеры – я понять затрудняюсь. Возможно, исключительно для того, чтобы была возможность соорудить хреновенькую веб-камеру в демонстрашках, больше ничего осмысленного сделать все равно не получится.

Естественно, нельзя забывать и об основной фишке серии CC32xx – встроенном отдельном процессорном ядре, отвечающем за работу с WiFi. Это вам не ESP8266 с китайской прошивкой, управляемой AT-командами, а полноценный сетевой процессор (еще одно ядро ARM Cortex-M, судя по тому, что встречаетсчя в других микроконтролерах этой серии – M0, под управлением специальной прошивки в ПЗУ). Он отвечает за подключение к WiFi, сетевые соединения (интерфейс в стиле BSD socket – так что никаких особых сложностей в программировании не возникает), а для полного счастья в нем реализованы еще и несколько сетевых приложений – HTTP-сервер, DHCP-сервер, ping и DNS-клиент. В новом семействе увеличено количество ресурсов, доступных сетевому процессору – теперь в режиме точки доступа к устройству может быть подключен не 1, а 4 клиента, а количество одновременно доступных сокетов увеличилось с 8 до 16.

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

Описание Цена розничная в TI Store, $ Цена оптовая (1 ku) в TI Store, $ Цена в Терраэлектронике, р
CC3200 Микроконтролер 9,07 4,90 923-727
CC3200MOD Модуль 13,50 7,99 1491-1258
CC3220R Микроконтролер 11,08 5,14
CC3220S Микроконтролер с защитой данных 12,41 5,76 1021-736
CC3220SF Микроконтролер с защитой данных и 1 Мб флеш-памяти 12,66 6,79 1204-868
CC3220MODS Модуль, МК с защитой данных 17,52 9,39 1498-1262
CC3220MODSF Модуль, МК с защитой данных и 1 Мб флеш-памяти 19,76 10,59
CC3220MODAS Модуль, МК с защитой данных, встроенная антенна 19,57 10,49
CC3220MODASF Модуль, МК с защитой данных и 1 Мб флеш-памяти, встроенная антенна 21,81 11,69

Сравнивать эти модули с какими-нибудь ESP стоимостью три копейки за пучок, конечно, в целом бессмысленно – но не стоит забывать, что тут у нас имеется вполне неплохой микропроцессор на ядре Cortex-M4 c офигенным объемом памяти, сравнимый с теми же STM32 F1 и F3.

Но… В случае с CC3200 поджидает довольно неприятная засада – ядро Cortex-M4 не очень эффективно работает, когда исполняемый код находится в SRAM, каждая команда выполняется не за один, а за два такта. Скажу сразу, что я возлагал довольно большие надежды на CC3220SF, увидев в даташите слова про “1-Mb XIP Flash” – так что первым делом, скачав SDK, я решил… нет, не поморгать светодиодиком, а прогнать парочку бенчмарков.

Для встраиваемых микропроцессоров принято использовать писькомерки Dhrystone и CoreMark. Первая – довольно древняя, но по ее поводу имеется Application Note от ARM, регламентирующий использование оптимизаций компилятора (если коротко – запрещено все). Второй бенчмарк местами превращается в соревнование “кто круче расставит флаги оптимизаций”, и его результаты крайне желательно приводить вместе с параметрами компилятора. Итак, первая табличка – Dhrystone и CoreMark на СС3200 и CC3220SF (код выполняется из флеш-памяти), компилятор IAR 8.10.1, параметры оптимизации для CoreMark приведены в заголовке.

Dhrystone, DMIPS CoreMark, -Ol CoreMark, -Om CoreMark, -Ohs
CC3200 46,8 71,05 87,95 135,69
CC3220SF, код в флеш-памяти 27,4 47,14 57,50 86,88

Ничего себе! – сказал я и офигел от результатов. Спрашивается, за что платили? Зачем мне огромная, по меркам младших Cortex, память, когда производительность процессора падает в три раза относительно “номинальной”? Cortex-M4 теоретически должен выдавать около 1,25 DMIPS/MHz и около 3 CoreMark/MHz (в зависимости от компилятора). Результаты CC3200 предсказуемые, но еще более-менее терпимые. Что же касается CC3220SF – то освободив SRAM для данных, мы получаем проигрыш в производительности в полтора раза. Зачем такая радость?

Я прогнал еще один вариант бенчмарка – на этот раз без использования флешки. Результат оказался аналогичен CC3200 – вот еще одна строчка в таблицу выше:

Dhrystone, DMIPS CoreMark, -Ol CoreMark, -Om CoreMark, -Ohs
CC3220SF, код в SRAM 46,5 71,02 87,76 135,50

В такой конфигурации, разумеется, CC3220SF теряет все преимущества перед своими “младшими” версиями без флеш-памяти. А теперь давайте вернемся к табличке с ценами и зададим себе вопрос – “А если нет разницы, зачем платить больше”? Мегабайт медленной флеш-памяти, в целом не особо нужной, стоит 1,5$.

Короче говоря, я ожидал большего.

UPD На данный момент придерживаюсь мнения, что флеш-память в CC3220SF неправильно сконфигурирована – так как в микроконтролерах серии MSP432 она устроена похожим образом, и буферизацию чтения необходимо включать “вручную”.