И вот эта плата лежит передо мной. Свежая, 6-и слойная, ещё не остывшая после станции горячего воздуха. Это самая первая итерация. Я ещё не знаю рабочая ли она, не допущены ли какие-нибудь фатальные ошибки в схеме или что-то типа замыкания земли и питании во внутренних слоях после трассировки. Заработает ли вся периферия, которая подключена к микроконтроллеру, заведётся ли кварц у микроконтроллера, будет ли работать USB на полной скорости в 480 Мбит/сек., нет ли ошибок в разводке радио цепей, подключится ли вообще отладочный адаптер. И вот надо начинать её поднимать…
Но все по порядку.
K66BLEZ1 — модульная плата для макетирования и разработки устройств преимущественно в сфере IoT, носимой электроники и малой автоматизации. Создана на новейших микроконтроллерах фирмы NXP семейства Kinetis. Имеет на борту радио модуль с поддержкой Bluetooth LE и ZigBee. Также есть разъёмы для microSD карты и USB 2.0 HS с поддержкой режимов device, host, OTG и зарядник литиевого аккумулятора 3.6 В. С нижней стороны выведено два разъёма по 60 контактов. Есть энергонезависимые часы реального времени с отдельным элементом питания.
Коротко о плате.
На плате установлено два микроконтроллера: MK66FN2M0VLQ18 (180 МГц, 2 МБ Flash, 256 КБ RAM) и MKW40Z160VHT4 (48 МГц, 160 КБ Flash, 20 КБ RAM). Первый для основного приложения и второй для беспроводной связи. 90 сигнальных пинов микроконтроллера MK66 выведены на два внешних разъёма.
Плата модуля 6-и слойная с интегрированной PCB антенной на 2,4 ГГц. Материал — высокотемпературный текстолит FR4, допускающий многократные перепайки. Покрытие — Immersion gold ENIG. (Кликнуть для увеличения) |
Встроенную антенну можно заменить на выносную припаяв на плату разъём типа UMC. Габаритный чертёж модуля. (Кликнуть для увеличения) |
Cоздан схемный и конструктивный (3D) компонент модуля для среды разработки Altium Designer. Файлы компонета модуля можно найти в репозитарии по сcылке в конце статьи. (Кликнуть для увеличения) |
Представление схемного элемента модуля в среде Altium Designer (Кликнуть для увеличения) |
Схема модуля K66BLEZ1.
Большинство выводов микроконтроллера MK66FN2M0VLQ18 выведены на два внешних разъёма. Разъёмы выбраны так чтобы было удобно присоединять и отсоединять модуль от материнских плат.
Питание к плате подключается либо через USB разъем, либо через разъёмы расширения X6, X7. Микросхема зарядника BQ24296RGET обеспечивает процесс надёжного автономного заряда литиевого аккумулятора от USB с контролем тока, напряжения и температуры аккумулятора.
Шаг первый. Подаём питание на модуль.
Питание подаётся подключением USB кабеля. Ток потребления не превышает 100 мА поэтому подходит любой USB host интерфейс компьютера. Пока в микроконтроллере нет программы компьютер никак не реагирует на подключение модуля по USB.
Но на модуле должен включиться светодиод «PwrGood». Светодиод «Charger» должен мигать, это говорит, что аккумулятор не подключён. Светодиод «CPU» обслуживается программно, поэтому тоже не горит.
Шаг второй. Подключение JTAG/SWD адаптера и проверка работоспособности SWD каналов.
Микроконтроллеры на плате имеют отдельные разъёмы для подключения отладочных адаптеров по SWD интерфейсу. микроконтроллер K66 допускает 3-х проводное подключение SWD с сигналом SWO (разъём X3), а микроконтроллер MKW40 допускает только 2-х проводное подключение (разъём X4). Но это не накладывает ограничения на отладочный адаптер, и он для обоих микроконтроллером может быть одним и тем же.
Для отладки я применяю адаптер J-Link. Отладочные разъёмы на модуле с шагом 1.27 мм. Поэтому пришлось сделать специальный переходник со стандартного разъёма адаптера на разъем модуля как показано на фото ниже.
(Кликнуть для увеличения)
Хотя адаптер J-Link и является лучшим в своём классе, но можно для отладки применить и более дешёвые отладчики, например, ST-Link.
Для тестирования работоспособности каналов отладки и программирования я использую утилиту от Segger JFlash.
Эта утилита позволяет просмотреть состояние всех областей памяти чипа, протестировать скорость работы интерфейса и запрограммировать Flash память чипов.
(Кликнуть для увеличения)
(Кликнуть для увеличения)
С помощью JFlash удалось подключиться и проверить оба чипа на модуле.
Шаг третий. Тестирование первой программы для микроконтроллера K66
Однако первой программой будет не Hello Word и даже не мигание светодиодом.
В качестве первого теста выберем сразу эмулятор внешнего диска по USB и эмулятор USB видеокамеры.
Это возможно поскольку схема модуля во много повторяет схему отладочной платы FRDM-K66F
Но сначала надо было скачать SDK с примерами программ.
Создаётся SDK для платы специальным онлайн инструментом на сайте NXP.com по адресу http://kex.freescale.com/en/summary?cas_auth=1 (для этого придётся зарегистрироваться на сайте)
В диалоге выбираем микроконтроллер MK66FN2M0xxx18
Диалоговое окно будет иметь вид, показанный ниже:
(Кликнуть для увеличения)
Сразу надо определить среду разработки, в которой будет компилироваться SDK. Можно выбрать что-то одно из списка или сразу всё. Список включает и коммерческие IDE и бесплатные:
Я традиционно выбираю IAR. Мои недавние исследования на тему выбора компиляторов очередной раз показали, что IAR по-прежнему вне конкуренции, во всяком случае для ARM Cortex-M4.
SDK будет создан с встроенными примерами приложений и тестами периферии для плат frdmk66f и twrk65f180m. Практически все примеры для платы frdmk66f подходят и для нашей платы K66BLEZ1. Поскольку кварцевые резонаторы у этих плат имеют одинаковую частоту и у K66BLEZ1 совпадает подключение SD карты и USB HS интерфейса.
Были испытаны примеры: usb_device_cdc_vcom, usb_device_cdc_vcom_lite, usb_device_msc_sdcard, usb_device_video_virtual_camera.
Запись на SD карту в примере usb_device_msc_sdcard была довольно низкой — 200 КБ/сек., считывание — 1 МБ/сек.
В примере usb_device_video_virtual_camera для просмотра видео использовалась программа PotPlayer x64. Скриншот встроенного в микроконтроллер видео приведён ниже.
(Кликнуть для увеличения)
Итого
Плата ожила без всякого дополнительного тюнинга. USB завёлся на полной скорости. Все драйвера USB на стороне PC тоже работоспособны. Всё говорит о хороших перспективах по дальнейшему подъёму модуля. Впереди предстоит освоение эффективной инициализации чипов, портирование нескольких RTOS, тестирование производительности процессора и файловых систем, создание универсального загрузчика, развёртывание сетевых стеков и протоколов беспроводных mesh сетей и много других интересных вещей.
Здесь хранятся все материалы, связанные с этим проектом — https://github.com/Indemsys/K66BLEZ1
Комментарии (13)
Indemsys
14.04.2016 17:11Модуль планировался и как отладочный поэтому был сделан скоростной USB для осциллографирования внутренних переменных программного обеспечения и сигналов.
После отладки ПО всегда можно сделать более бюджетный модуль на том же семействе Kinetis.
Потом еще была цель в универсализации.
Одним модулем закрыть все возможные варианты узлов в локальных беспроводных сетях: и сенсоры, и маршрутизаторы, и шлюзы c координаторами.
Стеки протоколов конечно есть и очень развитые. И для BLE и для ZigBee.
ljonya
14.04.2016 22:40+1Kinetis интересные микроконтроллеры. У меня было желание их попробовать еще когда они были Freescale. Особенно подкупала бесплатная IDE Kinetis Design Studio, MQX и документированность. Какое будущее у Kinetis в NXP? Будут ли развиваться параллельно с LPC или это тупиковая линейка? Как-то непонятно, зачем NXP развивать то что досталось от поглощения Freescale. Спасибо за статью!
a_usoltsev
14.04.2016 22:56+1Будут. При том похоронят скорее LPC.
Из недавних событий:
-отказались от MQX, будут поддерживать взаимодействие с FreeRTOS и uc/os
-сильно переработали драйвера. Старые были заточены под использование с РТОС-были функции, как с блокирующим, так и с неблокирующим вызовами. Сейчас упростили. Вроде как, будет проще разбираться. Но поэтому старый кодогенератор не работает, а он был дюжеудобный. Поэтому я не перескакиваю на новый KSDK.
-новый кодогенератор под новые драйвера обещают выкатить в июле.
-выходят новые подсерии, например mk8xxx и mkl8xxx+какой-то mkw вышли уже при NXP.
-вышел новый KSDK-kinetis software development kit — плагин, который ложится поверх эклипса.(всё бесплатно само-собой)
Вообще от слияния Freescale дал NXP кинетис и IMX процы+что-то по RF. Так сложилось, что у нас kinetisы не были распространены, но по миру это весьма популярные МК.
Если Вы территориально в Москве, то могу отладку дать погонять или пару различных процессоров.ljonya
15.04.2016 06:16Большое спасибо за подробный ответ! К сожалению, живу далеко от Москвы, но летом в любом случае раздобуду отладку на Kinetis M4/M4F.
a_usoltsev
14.04.2016 22:45+1Может быть будет полезно кому-нибудь в свете темы:
Во вторник был на семинаре от Cypress по их BLE 4.2 решениям.Кратко:
-есть и скоро выкатят ещё больше чипов арм кортекс М0 с 2.4ггц на борту.(PSOC и PROC-решения) Предоставляется стек, занимает 80кб флеша при общем объеме 256.
-Программируется в их бесплатной IDEшке. Поддержка тоже драйверного уровня, всё очень легко+куча примеров. Сейчас идет 100-дневный челлендж — по проекту на PSOC4 BLE в день. Можно на сайте найти.
-Есть маленькие(типа 2.5х2.5) платки сертифицированные. Говорят, что будут продавать по цене порядка 3.5 бакса. Хотят в ближайшем будущем конкурировать с atheros. Выведено питание+ около 15 ног. Есть с керамической антенной, а есть с разъемом под внешнюю.
-задали вопрос-будут ли меш-решения. Сказали, что уже есть-надо написать им в поддержку. Так как БЛЕ пока не поддерживает меш-сети, но скоро планируют ввести(июль назывался)
-Кипарисовцы слились со Спаншеном, у которого была лицензия на кортексы м4. К осени сказали будут PSOC-и на М4 ина М4+М0. В принципе, должно быть интересно.
Вобообще, Avnet и Silica где-то раз в пол года привозит их людей на воркшоп. Можно, как инфу новую узнать, так и отладки получить по теме воркшопа(предыдущий был по юсб 3). Опять же через сайт можно отследить.Costic
15.04.2016 15:00Спасибо за инфу, ссылочки бы ешё :-)
Тоже наблюдаю активность Cypress, но мне кажется, что у них только шикарные процессоры для USB 2.0 и 3.0, а вот остальное ничем не примечательно. На wireless рынке Nordic и Texas рулят и ESP их подгоняет.
Costic
15.04.2016 14:55Поздравляю с выпуском рабочего изделия.
1) Не могли бы вы указать цену (себестоимость) платки?
2) Процессор вроде бы мощный, USB 2.0 полноценный, а параллельной шины нет, память DRAM не подключить. Если вы его позиционируете как Low-Energy (RF, wireless, BLE), то USB и Ethernet не будут востребованы. И ещё недостаток вижу, процессор не толерантен к 5 В. Для IoT это не хорошо. Прокомментируете? Какие планы использования?
3) Мне кажется, было бы эффективно один процессор (центральный) для обработки, а второй для периферии с мощными выводами. И по параллельной шине подключить DRAM. Тогда можно и видео/аудио обработку реализовать, системы наблюдения, распознавания образов и т.д. А вот BLE / Wi-Fi такие вещи мне кажется в виде «свистка» надо делать. У вас второй чип почти ничем не занят, а в нём ведь куча всего есть. Думаю, можно было попроще передатчик выбрать.
4) А нельзя ли было FT232 для отладки прикрутить?
Indemsys
15.04.2016 16:28Себестоимость пока не определена. Это была ручная работа.
С DDRAM у меня есть другой проект - https://habrahabr.ru/post/262657/
Ethernet нужен для шлюзов. Я на этом модуле собирался делать много чего.
3 вольта не проблема, на этих микроконтроллерах делал даже инверторы для двигателей — https://habrahabr.ru/post/256611/
FT232 не ставлю поскольку пользуюсь технологией RTT
Свисток всегда можно сделать, но вначале должна быть отладка. Отлаживать на свистке мне бы не хотелось.
a_usoltsev
Ещё у Кинетисов киллер-фича есть: 16бит АЦП. Подобное есть только арм-камней от АД, но они стоят дороговато+ нету драйверов, как тут( стек для юсб предлагают купить от uc/os). У кинетисов именно что есть драйвера, построенные поверх hal, что сильно сокращает время разработки.
А зачем два камня на плате, которая предполагается, как IoT-батарейное решение? Я имею ввиду, почему было не обойтись просто KW-камнем? Да и просто камень с ethernet'ом и high-speed трансивером на борту дорогое удовольствие.
Кстати, а как там со стеками для беспроводной связи?