Пару лет назад я публиковал "героический эпос" о пайке STM8L-чипов в адаптеры TSSOP/QFN48 - DIP. Насколько помню, тогда это был мой первый опыт пайки SMD компонентов. Сейчас конечно та статья кажется наивной, за пару прошедших лет много чего изменилось. Вошли в обиход сервисы изготовления печатных плат и сейчас каждый может заказать десяток плат заводского качества по весьма умеренным ценам. Можно открыть Service Manual какого либо устройства и заказать набор плат для его изготовления. Звучит как фантастика, и я не смог удержаться, чтобы не сделать свою STM8 Develop Board. Благо за два года ковыряния различных отладочных плат, идей у меня накопилось достаточно. Загвоздка была только в том, я никогда этим не занимался.
Т.к. за один заказ можно было разместить только один дизайн платы, моя задача была одним выстрелом убить три зайца, т.е. реализовать в одном проекте решение следующих задач:
Во-первых, я хотел попрактиковаться в пайке SMD компонентов, т.к. я не так часто этим занимаюсь. Поэтому в качестве микроконтроллера я выбрал 48-пиновый чип с расстоянием между ножками 0.5 мм. Чипы в 44-пиновом корпусе имеют практически тот же функционал, но при этом у них расстояние между ножками 0.8 мм. Пайка таких чипов В РАЗЫ легче. Также я хотел попробовать свои силы в пайке микросхем в безвыводном корпусе и поэтому добавил опциональный USB-UART преобразователь CP2102. Есть разные мнения о сложности пайки чипов в таком корпусе, кто-то умудряется даже паять их без фена, но я бы не советовал.
Во-вторых, я хотел сделать универсальный дизайн печатной платы пригодный как для отладочных, так и для плат конкретных устройств.
Ну и в третьих, я хотел поработать с чипами 200-й серии, которые являются самыми производительными среди 8-битных микроконтроллеров STM.
Вроде желаний немного, а во что все это вылилось, я расскажу далее.
Многих ошибок можно было бы избежать будь у меня достаточно времени на проектирование. У меня его не было, и я постараюсь объяснить почему. Все началось с того, что при рисовании платы для ESP8266 в easyeda.com я решил посмотреть, не будет ли дешевле отдать изготовление на завод. При калькуляции стоимости заказа я обнаружил, что к заказу применяется скидка минус 20$ на доставку, при условии оплаты двух заказов. Т.е. у меня была возможность получить два десятка печатных плат c с доставкой всего за 7$. Для сравнения, в местном магазине двухсторонний текстолит 1шт. размером 100х100 мм стоит 90р.
Да, по всему интернету висят баннеры: "Закажи у нас платы за 2$ с бесплатной доставкой за первый заказ". Однако акция с бесплатной доставкой давно закончилась, а баннеры остались. Выглядело как какой-то сбой на сайте, у меня не было уверенности, что я получу свои платы, а менеджеры пропустят мой заказ. Поэтому рисовал я платы в "темпе вальса", не жадничал, не пытался использовать все 100x100 мм2 площадь текстолита, и пытался сделать плату по минимуму, оставив только самое необходимое.
Однако, что бы было не совсем тоскливо я добавил на плату опциональные RTC DS1307 и UART-USB конвертер на чипе Silicon labs - CP2102. С последним в итоге оказалось больше всего возни.
Итак, была задача сделать универсальную отладочную плату, так чтобы она при этом могла служить платой какого-либо устройства. Задачка из разряда скрещивания "ужа с ежом". В случае неудачи может получится ни то и ни другое.
В качестве микроконтроллера я выбрал 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 разъёмы лучше иметь в количестве несколько штук.
Первым делом нас будет интересовать распиновка чипов 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 можно использовать для каких-то более полезных нужд.
Аналогичным образом разведены два светодиода. Синий светодиод:
Зелёный светодиод:
Замечу, что светодиоды подтянуты к земле, т.е. включаются они высоким уровнем.
Их много. Большинство были сделаны из-за отсутствия опыта, но одна (посыпаю голову пеплом) была допущена все-таки из-за невнимательности.
1) Разъём mini-usb служит источником питания 5 Вольт. Когда я размещал этот разъём, то не обратил внимание на едва заметные серые точки. Понимание пришло когда заказывал этот разъём на али. По закону Мерфи одна из дорожек пересекала посадочное отверстие. В счастью, при изготовлении плат это отверстие заметализировали, хотя не обязаны были.
Так же я жалею, что не поставил параллельно mini-usb ещё какой-нибудь разъём питания попроще, навроде винтового клеммника.
2)Этот баг дался мне большой кровью, несмотря на его очевидность. Здесь дорожка легла вплотную к посадочным контактам разъема и закоротила с ними.
Я точно знал, корпус не соприкасается ни с одним из пяти контактов разъема, поэтому проигнорировал его. Проблемы пошли при отладке чипа CP2102, он не опознавался компьютером и при этом дико грелся. Скорее всего, один чип у меня таким образом сгорел, я не сразу заметил его нагревание. Несколько дней ушло поиски бага, когда я несколько раз перепаивал чип полагая что дело в моих кривых руках. Не знаю, чем бы это закончилось, но после очередной перепайки я заметил, что эффект нагревания зависит от конкретного кабеля. Логически продолжая мысль, выходило, что корпус закорочен с землёй в USB кабеле. Т.к. проблемная дорожка являлась шиной питания, получался коротыш.
Вообще, если говорить о micro-usb, то я выбрал не самый удачный разъём. Мне лично кажутся более практичными те разъёмы, что не требуют специальных посадочных мест на плате:
3) Я умудрился перепутать линии SDA и SCL ведущие к RTC DS1307. Пришлось обрезать родные дорожки и напаивать перемычки:
К слову говоря, размещение батарейного держателя на обратной стороне платы ОЧЕНЬ не удобно, т.к. что бы заменить батарейку, потребуется откручивать плату от корпуса устройства. Учитывая сколько кабелей к ней может быть присоединено, скорее всего придётся производить неполную разборку устройства. Это может быть затруднительно:
Кроме того, держатель существенно увеличивает расстояние между корпусом и платой.
4) Ещё одну грубую ошибку я совершил не разобравшись с такой штукой как VCAP:
VCAP - это ножка для подключения внешнего конденсатора номиналом 1-2 мкФ для главного регулятора напряжения на 1.8 Вольт. Без него чип не работает от слова вообще. Номинал конденсатора зависит от частоты кварца, таблицы соответствия есть в datasheet.
Я потерял много времени разбираясь с причинами почему программатор не видит чип. А так как я вообще никуда не вывел эту ножку, первая попытка подпаяться к ней была неудачной и какое-то время я просто не знал, что делать.
Как я уже упоминал, это был мой первый опыт пайки чипов в безыводном корпусе (речь о CP2102). При некотором опыте, это ничуть не сложнее пайки обычной микросхемы. В качестве инструктажа я использовал это видео:
Делается все как на видео, т.е. лудятся контакты микросхемы, и посадочная площадка. Затем наносится флюс, и чип кладётся на своё место. Феном производится нагревание до расплавления припоя, после чего достаточно "кинуть" чип на посадочное место. Я глазом не успел моргнуть как чип сам лег на своё место и сам выровнялся (используется эффект поверхностного натяжения). Получилось очень ровно, я бы сказал идеально:
Что касается всего остального, то при наличии правильных инструментов и некоторого опыта, проблем быть не должно. Для пайки чипов я использовал глицерин-анилиновый флюс. Для пайки остальных компонентов - "ЛТИ-120". Паяльник обычный китайский на 24Вольт:
Когда-то там было написано смешное слово "HAKKO" но это недоразумение быстро стёрлось.
Паяльник использовал с двумя жалами: тип "игла" для пропайки ножек чипов и коническое жало для всего остального.
Признаюсь, я по наивности ожидал, что на 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, то там увидим:
Т.е. можно говорить о том, что флеш память и ядро микроконтроллера работают на разных частотах.
Чип 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
В таком случае все будет работать автоматически.
В случае Windows все малость сложнее. Драйвер CP2102 не опознает такое устройство, и поэтому надо будет установить "ручной/", customized если угодно, драйвер. Возможность установки такого драйвера доступна только для Windows 7/8/10. Инструкция по выпуску своих драйверов изложена в апноте AN220:
Однако, чтобы найти программу описываемую в апноте пришлось порядком погуглить. В данном случае нам нужен будет ZIP архив an220sw.zip. Скачать его можно на следующей странице сайта производителя:
В строке поиска нужно будет ввести "an220", после чего скачать нужный драйвер.
В распакованной папке будет нужная программа:
После запуска программы, первым делом нужно будет выбрать целевой чип - CP2102, и тип готового пакета: инсталятор или обычный архив. В данном случае я выбрал изготовление инсталятора.
Далее будет предупреждение, что изготавливаемый драйвер будет неподписанным Windows и в некоторых редакциях этой операционный системы, его установка будет невозможна.
Здесь нужно будет выбрать: делать драйвер только для Windows 10 или для прочих тоже. Т.к. я ставлю на семёрку, то выбираю второе.
Далее можно ввести реквизиты свой фирмы. Если фирмы нет, то можно оставить все по дефолту.
Далее нужно будет добавить свои устройства в список поддерживаемых драйвером:
В диалоговом окне нужно будет ввести VendorID и ProductID своего устройства:
Т.к. у меня разные чипы имеют разные ProductID, то мне пришлось добавить оба устройства.
Во избежания конфликтов, продукцию другого вендора пришлось удалить.
Напоследок осталось указать каталог расположения драйвера:
Далее предстоит пару раз щёлкнуть по кнопке далее:
И наконец-то, кнопка завершения.
В каталоге с драйвером запускаем инсталятор:
Windows выдаст предупреждение об отсутствии цифровой подписи у данного драйвера:
Завершение установки драйвера:
Теперь можно пробросить в виртуалку наш девайс:
И если все было сделано как надо, то адаптер отобразится в диспетчере устройств:
Теперь адаптером можно пользоваться и в Windows.
Теперь предстоит разобраться, как в 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. Я думаю, что плата с дальнейшем будет мелькать в статьях, поэтому я решил написать эту статью чтобы избежать вопросов о том что это.