Проектирование и изготовление своей STM8 Develop Board

разделы: STM8 , дата: 22 июля 2018г.

Пару лет назад я публиковал "героический эпос" о пайке STM8L-чипов в адаптеры TSSOP/QFN48 - DIP. Насколько помню, тогда это был мой первый опыт пайки SMD компонентов. Сейчас конечно та статья кажется наивной, за пару прошедших лет много чего изменилось. Вошли в обиход сервисы изготовления печатных плат и сейчас каждый может заказать десяток плат заводского качества по весьма умеренным ценам. Можно открыть Service Manual какого либо устройства и заказать набор плат для его изготовления. Звучит как фантастика, и я не смог удержаться, чтобы не сделать свою STM8 Develop Board. Благо за два года ковыряния различных отладочных плат, идей у меня накопилось достаточно. Загвоздка была только в том, я никогда этим не занимался.

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

Во-первых, я хотел попрактиковаться в пайке SMD компонентов, т.к. я не так часто этим занимаюсь. Поэтому в качестве микроконтроллера я выбрал 48-пиновый чип с расстоянием между ножками 0.5 мм. Чипы в 44-пиновом корпусе имеют практически тот же функционал, но при этом у них расстояние между ножками 0.8 мм. Пайка таких чипов В РАЗЫ легче. Также я хотел попробовать свои силы в пайке микросхем в безвыводном корпусе и поэтому добавил опциональный USB-UART преобразователь CP2102. Есть разные мнения о сложности пайки чипов в таком корпусе, кто-то умудряется даже паять их без фена, но я бы не советовал.

Во-вторых, я хотел сделать универсальный дизайн печатной платы пригодный как для отладочных, так и для плат конкретных устройств.

Ну и в третьих, я хотел поработать с чипами 200-й серии, которые являются самыми производительными среди 8-битных микроконтроллеров STM.

Вроде желаний немного, а во что все это вылилось, я расскажу далее.

    Содержание:
  1. Предыстория
  2. Общий концепт платы
  3. Распиновка платы
  4. Ошибки
  5. Пайка CP2102
  6. Особенности работы STM8S207 на частоте 24MHz
  7. USB-UART адаптер CP2102
  8. Установка Customized драйверов CP2102 в Windows
  9. Работа с CP2102 через Xpress Сonfigurator в Simplicity Studio 4

1) Предыстория

Многих ошибок можно было бы избежать будь у меня достаточно времени на проектирование. У меня его не было, и я постараюсь объяснить почему. Все началось с того, что при рисовании платы для ESP8266 в easyeda.com я решил посмотреть, не будет ли дешевле отдать изготовление на завод. При калькуляции стоимости заказа я обнаружил, что к заказу применяется скидка минус 20$ на доставку, при условии оплаты двух заказов. Т.е. у меня была возможность получить два десятка печатных плат c с доставкой всего за 7$. Для сравнения, в местном магазине двухсторонний текстолит 1шт. размером 100х100 мм стоит 90р.

Да, по всему интернету висят баннеры: "Закажи у нас платы за 2$ с бесплатной доставкой за первый заказ". Однако акция с бесплатной доставкой давно закончилась, а баннеры остались. Выглядело как какой-то сбой на сайте, у меня не было уверенности, что я получу свои платы, а менеджеры пропустят мой заказ. Поэтому рисовал я платы в "темпе вальса", не жадничал, не пытался использовать все 100x100 мм2 площадь текстолита, и пытался сделать плату по минимуму, оставив только самое необходимое.

Однако, что бы было не совсем тоскливо я добавил на плату опциональные RTC DS1307 и UART-USB конвертер на чипе Silicon labs - CP2102. С последним в итоге оказалось больше всего возни.

1) Общий концепт платы

Итак, была задача сделать универсальную отладочную плату, так чтобы она при этом могла служить платой какого-либо устройства. Задачка из разряда скрещивания "ужа с ежом". В случае неудачи может получится ни то и ни другое.

В качестве микроконтроллера я выбрал STM8207 в 48-пиновом корпусе. Он имеет совместимое посадочное место (footprint) с микроконтроллерами STM8S105, STM8S208, STM8S005, STM8S007, что даёт некоторую гибкость в выборе чипа под конкретную задачу.

Несмотря на то, что на тот момент я сам не сделал ни одной платы (сейчас ЛУТ я уже освоил), говорить что я подошёл к вопросу с пустыми руками, все же неверно. В период освоения AVR, на паячных макетках я наделал различных AVR DevBoard на целую коробку:

От AVR я все-таки отказался в пользу STM8, но представление, о том что мне нужно от платы микроконтроллера я все же успел получить. Для Arduino существует удобный Sensor Shield, который представляет собой множество контактов разбросанных по различным группам, к которым можно подключать различную периферию:

Сочетание такого шилда с микроконтроллером, на мой взгляд даёт требуемый результат:

Но одной идеи мало, в технике все зависит от деталей. Вместо штыревых разъёмов я решил использовать разъёмы типа XH:

Так же как и штыревой разъём, они имеют шаг 2.54 между пинами, и следовательно на отладочную версию платы можно устанавливать штыревые разъёмы, а на рабочие версии ставить XH - разъёмы. Минусом такого разъема может быть то, что шлейфы и провода для для XH разъёмов нужно обжимать специальной приблудой - кримпером. Выглядит он так:

Почитать про кримпер можно здесь Обжимные клещи для ответных частей (BLS) штыревых контактов (PLS) | Электроника для всех. Хотя там говорится про PLS/BLS коннекторы, кримпер по сути тот же самый.

Вторым нюансом является размещение интерфейсных разъёмов. Например на один аналоговый пин не посадишь два датчика его достаточно будет иметь в единственном виде, а вот интерфейсные SPI и I2C разъёмы лучше иметь в количестве несколько штук.

3) Распиновка платы

Первым делом нас будет интересовать распиновка чипов STM8S105Cx и STM8S208Cx:

На рисунке выше представлена распиновка чипа STM8S208. 207-й чип отличается от 208-го отсутствием автомобильного CAN интерфейса, т.е. там на ножках 35,36 у 207-го чипа имеются лишь GPIO PG0/PG1.

Те пины, что имеют обозначение HS, могут отдавать ток до 80мА, а те пины что имеют обозначение T являются True Open Drain и у них нет подтягивающих резисторов. На известной китайской плате со 103-м чипом на такой вывод - PB5 посажен светодиод. И помнится, пару лет назад меня сильно удивляло, что для того чтобы переключить ножку GPIO на выход, нужно было выполнить две команды: Px_DDR|=(1<<PIN) и Px_CR1|=(1<<PIN), а в случает такой ножки, последняя команда являлась лишней. RTFM.

В общих чертах распиновка платы выглядит так:

Здесь показано на примере 207-го чипа у которого имеется два UART. В 105-м чипе на месте UART3 расположен UART2, а второй UART отсутствует.

Практически все разъёмы имеют подключение к шинам земли и питания:

Группа аналоговых разъёмов выглядит так:

Группа SPI портов получилась следующей:

Группа разъёмов I2C интерфейса выглядит следующим образом:

Здесь верхний разъём предназначен для внешнего модуля RTC, но может служить так же как дополнительный I2C разъём.

Два разъема с ШИМ - каналами представлены ниже:

UART разъёмы разведены под адаптер на чипе FT232RL:

Для отладки, на плате имеется пара светодиодов и одна кнопка. Они могут быть подключены на любую ножку микроконтроллера, но при этом имеют "дефолтные" пины.

Кнопка SW1 левой ножкой подключена в земле, а правой подтянута к питанию. Если замкнуть джампиком контакты разъёма Р30, то при опущенной кнопке на вход PD7 будет подаваться высокий уровень, а при нажатии на кнопку - низкий.

Если отбросить джампик, то с помощью соединительного провода, кнопку можно перекинуть на любую другую ножку микроконтроллера, и точно так же вывод PD7 можно использовать для каких-то более полезных нужд.

Аналогичным образом разведены два светодиода. Синий светодиод:

Зелёный светодиод:

Замечу, что светодиоды подтянуты к земле, т.е. включаются они высоким уровнем.

4) Ошибки

Их много. Большинство были сделаны из-за отсутствия опыта, но одна (посыпаю голову пеплом) была допущена все-таки из-за невнимательности.

1) Разъём mini-usb служит источником питания 5 Вольт. Когда я размещал этот разъём, то не обратил внимание на едва заметные серые точки. Понимание пришло когда заказывал этот разъём на али. По закону Мерфи одна из дорожек пересекала посадочное отверстие. В счастью, при изготовлении плат это отверстие заметализировали, хотя не обязаны были.

Так же я жалею, что не поставил параллельно mini-usb ещё какой-нибудь разъём питания попроще, навроде винтового клеммника.

2)Этот баг дался мне большой кровью, несмотря на его очевидность. Здесь дорожка легла вплотную к посадочным контактам разъема и закоротила с ними.

Я точно знал, корпус не соприкасается ни с одним из пяти контактов разъема, поэтому проигнорировал его. Проблемы пошли при отладке чипа CP2102, он не опознавался компьютером и при этом дико грелся. Скорее всего, один чип у меня таким образом сгорел, я не сразу заметил его нагревание. Несколько дней ушло поиски бага, когда я несколько раз перепаивал чип полагая что дело в моих кривых руках. Не знаю, чем бы это закончилось, но после очередной перепайки я заметил, что эффект нагревания зависит от конкретного кабеля. Логически продолжая мысль, выходило, что корпус закорочен с землёй в USB кабеле. Т.к. проблемная дорожка являлась шиной питания, получался коротыш.

Вообще, если говорить о micro-usb, то я выбрал не самый удачный разъём. Мне лично кажутся более практичными те разъёмы, что не требуют специальных посадочных мест на плате:

3) Я умудрился перепутать линии SDA и SCL ведущие к RTC DS1307. Пришлось обрезать родные дорожки и напаивать перемычки:

К слову говоря, размещение батарейного держателя на обратной стороне платы ОЧЕНЬ не удобно, т.к. что бы заменить батарейку, потребуется откручивать плату от корпуса устройства. Учитывая сколько кабелей к ней может быть присоединено, скорее всего придётся производить неполную разборку устройства. Это может быть затруднительно:

Кроме того, держатель существенно увеличивает расстояние между корпусом и платой.

4) Ещё одну грубую ошибку я совершил не разобравшись с такой штукой как VCAP:

VCAP - это ножка для подключения внешнего конденсатора номиналом 1-2 мкФ для главного регулятора напряжения на 1.8 Вольт. Без него чип не работает от слова вообще. Номинал конденсатора зависит от частоты кварца, таблицы соответствия есть в datasheet.

Я потерял много времени разбираясь с причинами почему программатор не видит чип. А так как я вообще никуда не вывел эту ножку, первая попытка подпаяться к ней была неудачной и какое-то время я просто не знал, что делать.

5) Пайка CP2102

Как я уже упоминал, это был мой первый опыт пайки чипов в безыводном корпусе (речь о CP2102). При некотором опыте, это ничуть не сложнее пайки обычной микросхемы. В качестве инструктажа я использовал это видео:

Делается все как на видео, т.е. лудятся контакты микросхемы, и посадочная площадка. Затем наносится флюс, и чип кладётся на своё место. Феном производится нагревание до расплавления припоя, после чего достаточно "кинуть" чип на посадочное место. Я глазом не успел моргнуть как чип сам лег на своё место и сам выровнялся (используется эффект поверхностного натяжения). Получилось очень ровно, я бы сказал идеально:

Что касается всего остального, то при наличии правильных инструментов и некоторого опыта, проблем быть не должно. Для пайки чипов я использовал глицерин-анилиновый флюс. Для пайки остальных компонентов - "ЛТИ-120". Паяльник обычный китайский на 24Вольт:

Когда-то там было написано смешное слово "HAKKO" но это недоразумение быстро стёрлось.

Паяльник использовал с двумя жалами: тип "игла" для пропайки ножек чипов и коническое жало для всего остального.

6) Особенности работы STM8S207 на частоте 24MHz

Признаюсь, я по наивности ожидал, что на 24MHz микроконтроллер будет работать быстрее в полтора раза по сравнению с микроконтроллером на 16MHz. О том, что что-то идёт не так я начал догадываться когда при переключении на внешний кварц микроконтроллер отказывался далее работать. Беглый обзор Option Bytes в datasheet подтвердил мои худшие опасения:

Т.е. при установке Waitstate=1, при каждом обращении к флешпамяти будет пропускаться по одному такту. Т.о. время выполнения каждой инструкции увеличивается на один такт. К примеру, данная подпрограмма формирования задержки будет иметь одинаковое время выполнения на 16MHz + waitstate=0 и при 24MHz + waitstate=1:

_delay:
    pushw y
    push a
    ld a, #0x06
    ldw y, #0x1a80          ; 0x61a80 = 400000 i.e. (2*10^6 MHz)/5cycles
loop:
    subw y, #0x01           ; decrement with set carry
    sbc a,#0x0              ; decrement carry flag i.e. a = a - carry_flag
    jrne loop
    pop a
    popw y
    ret

С другой стороны, при длинных инструкциях вроде divw или mul, микроконтроллер работает действительно быстрее. На скорую руку я составил тестовую программу:

#include <stdint.h>
#include "stm8s207c_s.h"
#include "stm8s_clk.h"
#include "stm8s_tim4.h"

#define BLUE_LED 3
#define GREEN_LED 7
#define BUTTON 7

extern void awu_irq(void) __interrupt(1);   // AWU IRQ handler
extern void clk_irq(void) __interrupt(2);   // CLK IRQ handler
extern void tim4_irq(void) __interrupt(23);
extern void delay(uint16_t value);
extern void uart3_send_char(uint8_t ch);
extern void uart3_print_str(char* str);
extern void uart3_print_num(uint16_t num);
volatile uint16_t count;
volatile uint8_t btn_delay=0;

uint16_t div_count;

volatile uint16_t result;

void delay_ms(uint16_t ms)
{
    count = ms;
    TIM4_SR   = 0x0;                        // Clear Pending Bit
    TIM4_PSCR = TIM4_PRESCALER_128;         // =7, prescaler =128
    TIM4_ARR  = 196;                        // freq Timer IRQ =1kHz/25MHz HSE
    TIM4_IER  = (uint8_t)TIM4_IT_UPDATE;    // =1, enable interrupt
    TIM4_CR1  = TIM4_CR1_CEN;               // =1, enable counter
    while (count) {
        result=count/(uint16_t)314;
        div_count++;
    }

    TIM4_CR1  = 0x0;                        //  disable counter
}

int main( void ) {
    // ------- CLK Setup --------------
    CLK_CKDIVR=CLK_PRESCALER_HSIDIV8;       // HSI = 2 MHz
    // turn off all  peripherals
    CLK_PCKENR1=0;
    CLK_PCKENR2=0;
    clk_pckenr1_bset(#3);                   // enable UART3
    clk_pckenr1_bset(#4);                   // enable TIM4
    clk_pckenr2_bset(#2);                   // enable AWU
    //----------- Setup HSE in auto mode -----------
    clk_swcr_bset(#1);                      // enable clock switch (SWEN)
    CLK_SWR = CLK_SOURCE_HSE;               // enable HSE
    clk_swcr_btjt(#0,l0);                   // wait HSE stabilization
    //----------- Enable CSS -----------------------
    clk_cssr_bset(#0);                      // set CSSEN
    clk_cssr_bset(#2);                      // set CSSDIE
    //----------- Setup UART3 ----------------------
    // Clear
    UART3_CR1=0;
    UART3_CR2=0;
    UART3_CR3=0;
    UART3_CR4=0;
    // setup UART3
    uart3_cr1_bset(#5);     // set UARTD, UART1 disable
    // 921600 Baud Rate, when fMASTER=25MHz
    UART3_BRR2=0x0b;
    UART3_BRR1=0x01;
    // Trasmission Enable
    uart3_cr2_bset(#3);      // set TEN, Transmission Enable
    // enable UART1
    uart3_cr1_bres(#5);      // clear UARTD, UART1 enable
    //----------- Setup AWU  -----------------------
    AWU_TBR = 13;
    AWU_APR = 31;       // =1 sec
    AWU_CSR = 0x10;     // set AWUEN bit for AWUCSR
    //----------- Setup Buzzer ---------------------
    BEEP_CSR=0x1e;                          // buuuuuuuuuzzzzz (low tone)
    beep_csr_bset(#5);                      // enable BEEP
    delay(100);
    beep_csr_bres(#5);                      // disable BEEP
    // ------- GPIO Setup -------------
    // BLUE LED
    pa_ddr_bset(#BLUE_LED);
    pa_cr1_bset(#BLUE_LED);
    // GREEN LED
    pb_ddr_bset(#GREEN_LED);
    pb_cr1_bset(#GREEN_LED);
    // -------- End Setup --------------
    // let's go..
    enableInterrupts();
    // main loop
    for(;;)
    {
        div_count=0;
        delay_ms(50);
        pa_odr_bcpl(#BLUE_LED);
        uart3_print_str("div count: ");
        uart3_print_num(div_count);
        uart3_send_char('\n');
        delay(1000);
    }
}

Здесь в течении 50 мс в цикле выполняется операция деления, и раз в секунду печатается результат. В итоге на 24МГц получается 59949 выполненных циклов, а stm8s103f3 на 16MHz показывает что-то около 40000 (проверялось на STM8S103F3). Так что прирост производительности все-таки есть.

Кроме того, waitstate это фишка не только STM8. Если заглянуть в Reference Manual STM32F103xx - RM0008, то там увидим:

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

7) USB-UART адаптер CP2102

Чип CP2102 оказался самой сложной частью платы. Опыта работы у меня с ним не было, как правильно его подключать я не знал. На схемы из руководства на чип я не полагался, и решил что будет проще скопировать схему реального устройства. После недолгого поиска схему нашёл тут: STEVAL-PCC018V1 Reference Design | Wireless Systems | Arrow.com.

Что не так с этой схемой? Посмотрим на схему типового включения:

Обратите внимание на ножку Vdd, она никуда не подключена. Ножки Vdd и RST могут сбить с толку, потому что они на питание и сброс нагрузки, а не самой CP2102.

Микросхема СP2102 содержит в себе линейный регулятор напряжения, с выхода которого может питаться сама и питать нагрузку. Входом регулятора является ножка REGIN. Схема питания от USB - линии называется - "USB-Bus Powered":

Соответственно ножка VDD является выходом регулятора.

Так же имеется режим внешнего питания: "USB Self-Powered". В этом случае ножка VDD служит для питания чипа, а регулятор не используется.

Во избежании накладок c новым непонятным чипом, ножки VDD, REGIN и VBUS я вывел на отдельный разъём, чему впоследствии был очень благодарен:

Для включения чипа я ставлю джампик на VBUS и REGIN, т.е. использую тип питания - "USB-Bus Powered". Self-Powered у меня не получилось использовать, как я предполагаю из жёсткой настройки в прошивке.

CP2102 представляет из себя обычный микроконтроллер с UART и USB интерфейсами, и если не ошибаюсь, то с 8051 архитектурой. В некоторых чипах можно менять протокол взаимодействия и даже менять саму прошивку, но в случае CP2102 можно поменять только такие параметры как: VendorID ProductID и т.д.

По умолчанию, чип CP2102 имеет следующие настройки:

В Linux подключение выглядит как-то так (по):

Это был лог подключения ESP8266 NodeMCU а адаптером CP2102. В случае же с моими чипами пошла такая картинка:

Мда... Verifone USB to Modem.

Да, китайский брат меня облапошил). В данном случае не помогли ни высокие рейтинги продавца, ни слова NEW и ORIGINAL в названии лота.

Ничего не покупайте у этого редиски:

Я уже оставил там негативный отзыв, но отзывы там хранятся только полгода.

Впрочем я похоже не единственный, кого облапошили китайцы. Например, поиском по гуглу находится такой топик - Possibility to restore original SiLabs VID&PID

Так что такое Verifone? Это такая приблуда для считывания карточки, которая есть в каждом магазине. В Китае их наверное миллионы. Могу предположить, что после списывания девайса, приблуда попадает китайцам на дербан. Оттуда выпаивается все более-менее полезное, чипы заново корпусируются, затем перепродаются как новые на али и ибэе. В случае транзисторов и операционников этот фокус проходит без последствий, но вот тут вышла загвоздочка. CP2102 имеет функцию залочки настроек.

В Linux проблема решается достаточно просто. Загружаем драйвер командой:

# modprobe cp210x

и далее посылаем новые vid/pid нашему драйверу:

# echo 11ca 0211 > /sys/bus/usb-serial/drivers/cp210x/new_id

После чего в логе ядра появляется следующие строки:

[402411.908795] cp210x 1-2.2:1.0: cp210x converter detected
[402411.908906] usb 1-2.2: cp210x converter now attached to ttyUSB0

и в системе появляется долгожданное последовательное USB устройство /dev/ttyUSB0. На этом этапе адаптером можно уже пользоваться. При необходимости, вышеупомянутые команды можно добавить в загрузочные скрипты системы, например в /etc/rc.local в случае Ubuntu или /etc/rc.d/rc.local в случае Slackware.

Другой способ решения проблемы, добавить файл 99-cp210x.rules в /lib/udev/rules.d следующего содержания:

ACTION=="add", ATTRS{idVendor}=="11ca", ATTRS{idProduct}=="0211", RUN+="/sbin/modprobe cp210x" RUN+="/bin/sh -c 'echo 11ca 0211 > /sys/bus/usb-serial/drivers/cp210x/new_id'"

после чего перезагрузить правила udev командой:

# sudo udevadm control --reload

В таком случае все будет работать автоматически.

8) Установка Customized драйверов CP2102 в Windows

В случае Windows все малость сложнее. Драйвер CP2102 не опознает такое устройство, и поэтому надо будет установить "ручной/", customized если угодно, драйвер. Возможность установки такого драйвера доступна только для Windows 7/8/10. Инструкция по выпуску своих драйверов изложена в апноте AN220:

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

В строке поиска нужно будет ввести "an220", после чего скачать нужный драйвер.

В распакованной папке будет нужная программа:

После запуска программы, первым делом нужно будет выбрать целевой чип - CP2102, и тип готового пакета: инсталятор или обычный архив. В данном случае я выбрал изготовление инсталятора.

Далее будет предупреждение, что изготавливаемый драйвер будет неподписанным Windows и в некоторых редакциях этой операционный системы, его установка будет невозможна.

Здесь нужно будет выбрать: делать драйвер только для Windows 10 или для прочих тоже. Т.к. я ставлю на семёрку, то выбираю второе.

Далее можно ввести реквизиты свой фирмы. Если фирмы нет, то можно оставить все по дефолту.

Далее нужно будет добавить свои устройства в список поддерживаемых драйвером:

В диалоговом окне нужно будет ввести VendorID и ProductID своего устройства:

Т.к. у меня разные чипы имеют разные ProductID, то мне пришлось добавить оба устройства.

Во избежания конфликтов, продукцию другого вендора пришлось удалить.

Напоследок осталось указать каталог расположения драйвера:

Далее предстоит пару раз щёлкнуть по кнопке далее:

И наконец-то, кнопка завершения.

В каталоге с драйвером запускаем инсталятор:

Windows выдаст предупреждение об отсутствии цифровой подписи у данного драйвера:

Завершение установки драйвера:

Теперь можно пробросить в виртуалку наш девайс:

И если все было сделано как надо, то адаптер отобразится в диспетчере устройств:

Теперь адаптером можно пользоваться и в Windows.

9) Работа с CP2102 через Xpress Сonfigurator в Simplicity Studio 4

Теперь предстоит разобраться, как в CP2102 задавать свои значения VID/PID, тип питания и прочую конфигурацию.

В рунете можно встретить упоминание следующих программ для кастомизации чипа CP2102: CP210xSetIDs, CP210xPortConfig и CP210xBaudRateAliasConfig. Эти программы признаны устаревшими, но их можно скачать например отсюда: CP210x Legacy Programming Utilities

Сейчас вся конфигурация производится через Xpress конфигуратор, который входит в состав Simplicity Studio. Это еще один комбайн на основе Eclipse IDE, и которая является официальной средой разработки чипов Silicon Labs.

Первым делом потребуется скачать саму среду разработки Simplicity Studio 4. Она доступна для Linux, Mac и Windows. Я не стал захламлять свой рабочий Linux, и поставил студию в виртуалку (Для скачивания и работы со студией потребуется регистрация).

Для работы потребуется пробросить устройство в виртуалку и запустить студию. При первом старте она предложит воспользоваться менеджером, который нам пока не нужен, т.к. студия не видит наш кастомный девайс (окно Debug Adapters пустое).

Закрываем менеджер:

Щёлкаем по иконке настроек:

В древовидном списке находим USB Devices. В верхнем окне будет отображён список подключённых USB устройств. Снизу будет кнопка редактирования правил фильтра, нужно будет по ней щёлкнуть.

В окне редактирования нужно будет добавить VID/PID своего устройства:

После чего устройство отобразится в списке Debug Adapters:

Теперь нужно будет установить Xperess Configurator. Для этого нужно выбрать сам адаптер, и щёлкнуть по плитке New Project:

Снова появится установочный менеджер

Здесь нужно поставить галочку напротив CP2102:

Здесь ничего делать не надо, жмём Next:

Здесь впервые упоминается Xpress. Делать ничего не надо, опять жмём Next:

Далее нужно будет принять лицензии, после чего жмём Finish:

Запустится процесс скачивания, во время которого предложат посмотреть ознакомительное видео:

По завершении установки, выдаст предупреждение, что студия будет перезагружена:

После рестарта студии, снова нужно будет выбрать адаптер и щёлкнуть по New Project:

Здесь жмём Next:

И наконец-то Finish:

После выскочит предупреждение о том, что еще потребуется скачать данные конфигурации:

После чего открывается конфигуратор. Здесь можно выставить свои VID, PID, название устройства, серийный номер, тип питания: Bus Power/Self Power и максимальный ток отдачи в режиме Bus Power. Так же можно залочить свои параметры. Предупреждаю, что залочку в CP2102 снять нельзя!

Для начала, можно считать конфигурацию подключённого устройства:

В диалоговом окне предложат выбрать устройство:

После чего будет считана конфигурация, внизу появится лог сессии чтения, и т.к. у меня залоченное устройство, то появилось предупреждение о том что изменения в залоченом устройстве нельзя сбросить.

Считанная конфигурация и лог чтения:

При попытке записать туда свои параметры, появляются ошибки. Это всего-лишь адаптер "отвалился" от виртуалки.

Ради эксперимента, подключаю ESP8266 NodeMCU с адаптером CP2102, и считываю конфиг адаптера. В данном случае прочитались дефолтные настройки:

Пробую поменять серийный номер с единицы на двойку. "Красная" часть лога записи означает, что адаптер опять отвалился от вируалки. Это нормально:

В хост-машине при этом появляется такой лог:

Пробрасываю устройство опять в виртуалку и заново читаю конфигурацию:

И можно видеть, что серийник изменился:

На этом всё. Как можно видеть, большую часть времени у меня заняла возня с адаптером CP2102. Я думаю, что плата с дальнейшем будет мелькать в статьях, поэтому я решил написать эту статью чтобы избежать вопросов о том что это.