
Приветствую, Хабр!
Как я уже писал ранее, я не удержался и приобрел микроконтроллер К1921ВГ015. Так как пожеланий по отладочной плате после моей статьи почти не поступило, решил выжать из контроллера все по максимуму. Хотелось получить макет сразу с хорошим набором интерфейсов. Как мне показалось, это будет интереснее, чем голая плата с питанием и штыревыми разъемами.
Используете Terraform? Помогите нам сделать новый сервис лучше. Пройдите короткий опрос — мы выберем самые интересные кейсы и пригласим вас на онлайн-интервью. За участие — плюшевый Тирекс или бонусы на услуги Selectel.
Сначала я вообще не хотел выводить гребенки на плате и занять все по полной, как обычно делаю на материнских платах для процессорных модулей, но здравый смысл все-таки победил. Так как чип имеет 100-выводной корпус (LQFP100), что весьма неплохо, я пришел к некотором компромиссу — оставил возможность подключаться извне, а также развел на плате наиболее ходовые (у меня) интерфейсы. Давайте обо всем по порядку с примерами по схемотехнике. Я буду идти от простого к сложному, чтобы вы получили информацию о плате, а в конце сделаю некоторые выводы.
Из документации: «Микросхема К1921ВГ015 представляет собой СБИС 32-разрядного
микроконтроллера на базе ядра RISC-V, предназначенного для промышленных и
потребительских приложений, включая системы дистанционного мониторинга,
контрольно-измерительные приборы, системы автоматизации производственных
процессов, автомобильную электронику, а также устройства с батарейным питанием.»
Интерфейс прошивки и отладки
Для внутрисхемного программирования и отладки платы используется JTAG. В документации указано, что подходят адаптеры Olimex ARM-USB-OCD-H или J-Link, что меня, в принципе, устраивает. На контроллере есть выводы TCK, TMS, TDI, TDO, TRST, которые я и задействовал в стандартной распиновке J-Link. По софту пока говорить не будем, сейчас как раз занимаемся запуском платы.
Для оперативного сброса платы вывел тактовую кнопку на вывод Reset. Еще одна, под названием SERVEN, служит для перехода в сервисный режим, в котором запрещаются любые операции со всей Flash-памятью, кроме полного стирания.
Индикация
Всего использовал шесть светодиодов. Первые два — индикация наличия питания 3,3В и 5В. Порт GPIOC15 задействован только для светодиода. Остальные три продублированы на штыревые линейки по краям платы, чтобы можно было реализовать индикацию и одновременное использования входов/выходов (GPIOB13-GPIOB15).
Долго думал по поводу установки дисплея 16х2, для отображения информации, но решил обойтись пищалкой на GPIOC14, а для вывода полноценных отладочных сообщений реализовал UART-USB (об этом ниже).

АЦП
Два канала АЦП задействовал на самой плате. Первый — это фотодиод, чтобы поиграться с замерами освещенности (ADC_CH6). Второй канал решил использовать для проверки блока сигма-дельта АЦП (ADC_CH7). Хочу попробовать сделать запись с микрофона на SD-карту. Усилитель взял первый попавшийся, который использовался в прошлых проектах.

Рис.1. Микрофонный усилитель MAX4466EXK+T
Остальные каналы вывел на разъемы.
I2C
Вот с I2C на контроллере засада. Шина всего одна, а хотелось бы как минимум две. Пришлось по всей плате таскать проводники, но как уже есть. Надолго занимать шину, в принципе, нечем, так что думаю все будет нормально. На некоторые микросхемы установил DIP переключатели для установки адреса, чтобы не пересеклось, если подключить что-то еще.
Датчик температуры
Тут не стал ничего выдумывать и поставил LM75AD. Ни в одном проекте проблем с ним не было. Хочу сравнить показания с внутренним датчиком температуры, на канале АЦП ADC_CH10.
EEPROM
Ну куда же без него? Поставил микросхему AT24HC16.
Монитор тока и напряжения
Очень хотелось измерять ток под нагрузкой и посмотреть просадки, если они будут. Раньше использовали микросхему INA226AIDGSR и похожие. Тут нашелся ее полный аналог TPA626-VR-S. Решил поставить ее по питанию 3,3В.

Рис.2. Монитор тока и напряжения TPA626-VR-S.
NFC
До последнего момента (пока расставлял компоненты) не знал, оставлю ли схему считывателя NFC. Много места занимает антенна, под ней нужен вырез во всех слоях, а рядом много всего наставлено и не факт, что в итоге корректно заработает. Снова пошел на некий компромисс — развел «как влезла» антенну на плате и сделал возможность переключения на внешнюю антенну, если вдруг что.

Рис.3. Схема NFC считывателя на микросхеме PN7150B0HN.
Схема на PN7150B0HN отлажена уже не в одном проекте. И как только я не издевался над трассировкой антенны. Был даже вариант 10х75мм — работает отлично. В этой плате полноценного квадрата/прямоугольника не получилось сделать, и я пошел ва-банк.

Рис.4. NFC антенна считывателя PN7150B0HN.
С I2C все. Больше ничего не придумал, что можно поставить и что хоть как-то бы пригодилось в дальнейшем. Шину, конечно, продублировал на крайний разъем и шилд.
Shield
Как-то, несколько лет назад, разрабатывал плату с использованием шилда камеры Arduino. Подумал, а почему бы и нет? Поставлю стандартный разъем, возможно, получится использовать какую-то готовую плату как «нашлепку» сверху. Пока хорошими вариантами вижу камеру и Ethernet по SPI. Есть, например, шилд небольшой клавиатуры собственной разработки, можно будет и его затестить.

Рис.5. Распиновка разъемов отладочной платы.
На схеме выше указана распиновка краевых разъемов, в том числе шилда (справа внизу). Как мог старался все сгруппировать, чтобы было удобнее использовать, но может где-то и просчитался.
SPI/QSPI
Микроконтроллер имеет две шины SPI и одну QSPI. Последнюю решил занять под QSPI-Flash в корпусе 8-WSON. Пока это будет MX66L51235FZ2I-10G, а потом посмотрим. Оба обычных SPI вывел на разъемы, а один из них продублировал разъемом для uSD карты, чтобы можно было что-то попробовать записать, например звук с микрофона.

Рис.6. SPI/QSPI.
В первый раз встречаю, чтобы в документации было указано не MISO/MOSI, а RX/TX для SPI. В принципе, понятно, но не привычно.
UART
Вот что порадовало, так это количество UART на чипе. Тут их целых пять — есть где разгуляться.
UART-USB
UART0 решил занять микросхемой CP2105-F01-GMR (так уж получилось, что была в наличии двухканальная, я использовал только один), для реализации связи с ПК. Можно будет вывести какие-нибудь отладочные сообщения, например. Чтобы не потерять интерфейс, сделал возможность отключения микросхемы и продублировал GPIO на штыревую линейку (плюс два вывода, либо UART, если не нужен преобразователь).

Рис.7. UART-USB.
RS-485
Два порта (UART2/UART3) задействовал для интерфейсов RS-485. Лишними точно не будут. Можно соединить снаружи и гонять данные по петле для теста. Была пара проектов, где необходимы два независимых RS-485.

Рис.8. Два интерфейса RS-485
Остальные, один из низ полный — на внешние разъемы. Чтобы сохранить полный UART, пришлось поставить DIP-переключатель для коммутации IRQ от микросхем PN7150B0HN и TPA626-VR-S на порт GPIOC5 (EXTIN для внешних прерываний). Остальные все оказались заняты.
CAN
Снова сюрприз. Контроллер имеет сразу два аппаратных CAN интерфейса, что порадовало. CAN0 на GPIOB8/GPIOB9 и CAN1 на GPIOB10/GPIOB11. В обоих случаях использовал физики TJA1040T.

Рис.9. CAN0/CAN1 на TJA1040T.
Только сейчас подумал, что можно было задействовать режим standby. Если будет вторая итерация платы, возможно, переделаю.
TAMPER
Микроконтроллер имеет три входа для датчиков вскрытия (плюс один выход генерации сигнала для датчиков). При разрыве датчика определяется несанкционированный доступ к устройству.
Из документации: «Микроконтроллер содержит домен батарейного питания, в который входят периферийные блоки: RTC, аналоговые компараторы, блок контроля вскрытия,
дополнительное ОЗУ 64 КБ, независимый сторожевой таймер. Периферийные блоки,
входящие в состав домена батарейного питания, позволяют осуществлять контроль
вскрытия корпуса системы, отсчитывать временные промежутки и сохранять информацию при отсутствии основного питания».
Для проверки датчиков я установил DIP-переключатель, которым можно имитировать событие вскрытия. Один из датчиков продублировал на разъем.
WAKEUP
Всего имеется три входа для контроля события пробуждения. Не придумав ничего лучше, я поставил три кнопки, которыми можно подавать сигнал на контроллер для выхода из различных режимов (ожидания, остановки и сна).
USB
Для проверки USB 2.0 FullSpeed (Device), поставил разъем формата TYPE-C, от которого также можно осуществлять питание всей платы. Иногда бывает очень удобно не заморачиваться с внешним блоком питания, а просто подключить к ПК.

Рис.10. Разъем TYPE-C.
RTC
Для питания блока RTC поставил холдер S8411-45R батарейки CR1220.

Рис.11. Подсистема питания микроконтроллера.
Для питания AREF использовал прецизионный источник опорного напряжения RS3112-2.5XSF3 на 2,5В. Теперь вот так приходится на схемах указывать аналоги микросхем через «/», если что-то вдруг неожиданно пропадет или подорожает.
Вот, наверное, и все по схеме отладочной платы. Про трассировку, думаю, смысла писать нет. Плату сделал на четырех слоях, так как много аналоговых проводников, которые нужно тянуть от микроконтроллера и до двух разъемов (краевой и шилд). На внутренних слоях земля и питание. Высокоскоростных интерфейсов нет, не считая USB.
Выводы
Первое, что хочется отметить, с точки зрения трассировки — это порядок расположения выводов на микросхеме. Все порты от нулевого до последнего идут по порядку на корпусе. Это очень удобно в процессе проектирования схемы. Кто делал проекты на STM32, думаю, поймет.
Очень не хватает второго I2C интерфейса. Я привык разделять шины. Одну задействовать для высокой загрузки, например, для опроса тачскрина, вторую для различных датчиков. Либо одна общая, вторая внешняя, для подключения различных устройств. Бывает необходимость в установке двух одинаковых устройств, у которых нет возможности менять адрес, тут так просто это будет не реализовать.
Выводы каналов АЦП ADC_CH0 – ADC_CH7 находятся в отдельном блоке и не допускают переназначения. По логике это должно положительно повлиять на характеристики оцифровки данных. Тесты покажут.
Документация на русском языке. Начинаешь в поиске вбивать привычный англоязычный термин, а там ничего. Тоже не критично, нужно просто привыкнуть.
Очень не хватает в микроконтроллере таких интерфейсов, как Ethernet, SDIO и SAI, но тут уж как есть.
Общие впечатления от разработки платы сугубо положительные. Посмотрим, как будет вести себя отладка в процессе тестирования. Исходники, как и обещал, я выложу на гите, но немного позже, когда запустим и проверим основные интерфейсы. Не хочется распространять ошибки, если они вдруг обнаружатся. Рядом с проектом Altium будем класть «скетчи» для различных интерфейсов, которые есть на отладке.
Ну что же. Приступим…

Спасибо за внимание и успехов!