№9 / 2018 / статья 7

Добавляем Bluetooth Low Energy в устройство с 8-битным микроконтроллером

Святослав Зубарев (г. Смоленск)

Компания Microchip представляет радиомодуль RN4870, управление которым осуществляется с помощью простых ASCII-команд, что позволяет добавить функционал Bluetooth Low Energy в любые устройства интернета вещей, в том числе – и построенные на 8-битных микроконтроллерах. В статье описаны характеристики данного модуля и преимущества перед аналогичными решениями, а также – его подключение, настройка и примеры работы.

Беспроводные решения, построенные на технологиях Wi-Fi, ZigBee, Bluetooth с недавних пор присутствуют во всей нашей жизни, начиная от бытовых и коммерческих прикладных устройств и заканчивая решениями в медицине и оборонно-промышленном комплексе.

Компания Microchip предлагает своим клиентам решения, которые могут быть использованы в любой из данных отраслей. Прежде всего это устройства Bluetooth, но также доступны решения и для Wi-Fi, ZigBee, MiWi и Lora. Сравнительные характеристики этих технологий приведены в таблице 1.

Таблица 1. Сравнительные характеристики популярных беспроводных технологий

Технология Стандарт Диапазон Сетевой стек (софт) Метод включения (нужен ли MCU)* Чип Модуль Подробная информация
Bluetooth IEEE 802.15.1 2.4 GHz Bluetooth v2.1, Bluetooth Audio, BLE 4.0, 4.1 and 4.2 Standalone, Companion, Link Controller Да Да www.microchip.com/Bluetooth
Wi-Fi IEEE 802.11 b,g,n w/o w/o BLE 2.4 GHz TCP/IP Standalone, Network Controller, Link Controller Да Да www.microchip.com/Wifi
Zigbee IEEE 802.15.4 2.4 GHz ZigBee® 3.0 (Pro with GP option) Standalone, Link Controller Да Да www.microchip.com/Zigbee
MiWi Proprietary Sub-GHz & 2.4 GHz MiWi™ networking protocol Standalone, Link Controller Да Да www.microchip.com/miwi
Lora LoRaWAN Sub-GHz LoRaWAN™ Protoco Standalone, Network Controller Q4 2018 Да www.microchip.com/Lora

*Standalone – законченное устройство, которое возможно создать на одной микросхеме (на борту есть процессор для приложения пользователя).
Link Controller – только радио (MAC-уровень). Требует внешнего микроконтроллера для стека и приложения пользователя.
Network Controller/Companion – сетевой процессор. На внешнем микроконтроллере работает только приложение пользователя.

Для каких решений предпочтительнее использовать технологию Bluetooth?

Bluetooth-модули, интегрированные в устройства, достаточно сильно расширяют функционал взаимодействия с ними. Использование Bluetooth не ограничено какими-либо рамками: технология Bluetooth прочно утвердилась в сфере интернета вещей: часть этой технологии, именуемая Bluetooth LE (Bluetooth Low Energy, BLE) прямо позиционирует себя как идеальный выбор для IoT. Bluetooth Low Energy сегодня – один из самых простых способов обеспечить беспроводной интерфейс к малопотребляющим батарейным устройствам. BLE уже умеет маршрутизировать интернет-трафик, определять координаты в помещениях, подключать промышленные программируемые логические контроллеры, поддерживать WEB-серверы, подключать весы, термометры, пульсометры, оксиметры, При этом Bluetooth является открытым протоколом и его описание доступно на сайте.

Одним из интересных способов использования Bluetooth является определение местоположения, в частности – создание Bluetooth-маячков. Точность такой системы можно повысить, увеличив количество маячков и настроив радиус распространения их сигнала.

Добавить в устройство технологию Bluetooth можно тремя способами (рисунок 1):

Рис. 1. Режимы работы устройства Bluetooth

Рис. 1. Режимы работы устройства Bluetooth

  • Устройство работает в автономном режиме (Standalone) – это характерно для модулей серии SAMB. В этом режиме BLE-стек, профили и приложение пользователя работают на одном модуле или чипе, для работы не требуется внешний контроллер (а).
  • Устройство работает в режиме «Компаньон» (Companion) – это характерно для модулей серий RN, BM, IS. В данном режиме на модуле присутствует дополнительный функциональный блок, где исполняется BLE-стек, профили и Link Control, а приложение исполняется на внешнем микроконтроллере (б).
  • Устройство работает в режиме «Связной контроллер» (Link Controller) – это характерно для модулей серии BTLC. В данном режиме на модуле присутствует дополнительный функциональный блок, где исполняется BLE-стек, профили и Link Control, а BLE-профили и приложение выполняются на внешнем микроконтроллере (в).

Компания Microchip производит модули, которые поддерживают каждый из приведенных способов подключения. В частности, модули RN4870 поддерживают второй способ.

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

  • Программируемые модули – модули, для которых существует своя среда разработки и специальные библиотеки, с помощью которых пользователь сам пишет программный код и выстраивает алгоритм работы. К таким модулям можно отнести SAMB11 и BTLC1000, которые используют среду разработки Atmel Studio.
  • Конфигурируемые модули – модули, которые не используют специальных сред для написания кода, а алгоритм работы и управление модулем осуществляются с помощью специальных команд ASCII/Hex. Последние модули просты в применении, и именно к ним относится RN4870.

Простые в использовании модули, алгоритм которых задается при помощи команд, не подойдут для решения, требующего глубокой и тщательной настройки, но в то же время программируемые модули нет смысла использовать в проектах, целью которых является быстрый вывод на рынок несложного устройства при минимальных затратах времени. В таблице 2 приведены краткие характеристики чипов, на которых базируются модули обеих групп производства Microchip. Стоит отметить, что именно на чипах IS1870/71 базируются модули RN4870/71.

Таблица 2. Краткие характеристики чипов производства Microchip

Характеристики IS1870 IS1871 SAMB11 BTLC1000
Тип BLE only BLE standalone BLE peripheral
BT specification 5.0 4.2 4.2
Ток в спящем режиме, мкА 1,9…2,9 1,125
Активный ток 10 мА RX (3 В, -90 дБм),
10 мА TX (3 В, 0 дБм)
4,5 мА RX (3,6 В, -93 дБм),
3,0 мА TX (3,6 В, 0 дБм)
Версия BLE 4.2+LE Security 4.2
Размер чипа, мм 6×6 QFN 4×4 QFN 4×4 QFN, 2,15×2,25 WLCSP 6×6 QFN
Размер модуля, мм BM/RN:
12×22
12×15
BM/RN:
9×11
6×8
MR: 20×13
XR: 5,5×4,5
ZR: 10,5×7,5
MR: 22,9×15,9
XR: 5,5×4,5
ZR: 10,5×7,5
Чувствительность, дБм -90 -95
Поддержка Mesh Бета-версия В будущем В будущем
Выходная мощность, дБм +2 +3,5
Напряжение питания, В 1,9…3,6 1,8…4,3

BLE – относительно новая технология, в которой осуществляется передача небольших пакетов данных, и которая предназначена для устройств, способных работать до десяти и более лет от автономного источника питания, что невозможно при использовании стандартной технологии Bluetooth Classic.

Модули RN4870/71

RN4870/71 (рисунок 2) – сертифицированные модули, работающие по технологии BLE 5.0 с простым набором команд.

Рис. 2. Внешний вид модулей RN4870/71

Рис. 2. Внешний вид модулей RN4870/71

Основное достоинство модулей – готовность к работе «из коробки». Это обусловлено наличием в линейке модулей с антенной на борту: для начала работы достаточно просто подать питание. Также на борту модулей присутствует 8 АЦП, 3 ШИМ и до 18 портов ввода-вывода. Модули поддерживают GAP, SDP, SPP, GATT и взаимодействие по интерфейсам UART, SPI и I²C, а также могут работать как в связке с хостом – получая команды как от микроконтроллера, так и автономно – при помощи встроенных скриптов. Причем для разработки скриптов не требуется специальной среды: скрипты – это просто короткие текстовые файлы с инструкциями, которые сохраняются в энергонезависимой памяти устройства.

Модули поддерживают режимы «клиент» и «сервер», но не могут работать как центральное и периферийное устройство одновременно (режим “Multi-roll”). Благодаря встроенному прозрачному UART пользователь может подключиться к модулю с помощью смартфона без создания специального приложения. Присутствует возможность задействовать режим маяка, который настраивается при помощи простых команд. К сожалению, на модулях RN4870/71 невозможно построить сеть BLE-mesh, которая в данном случае была бы очень кстати. Также доступны команды, изменяющие выходную мощность сигнала, от которой, соответственно, зависит дальность приема/передачи.

Модули RN4870/71 выпускаются в нескольких вариантах: с наличием/отсутствием экрана и антенны, а также – различных размеров, которые в первую очередь обусловлены количеством доступных выводов (таблица 3). Модули строятся на базе двух микросхем: IS1870 и IS1871, причем IS1871 обладает меньшим числом выводов и меньшим размером.

Таблица 3. Краткие характеристики RN4870/71

Характеристики RN4870-V/RM118 RN4870U-V/RM118 RN4871-V/RM118 RN4871U-V/RM118
Внутреннее FW V 1.18 V 1.18 V 1.18 V 1.18
Экран Есть Отсутствует Есть Отсутствует
Flash/ROM Flash Flash Flash Flash
GPIO/WPM/ADC 18/3/8 18/3/8 9/1/5 9/1/5
Количество выводов 33 30 16 17
Антенна Керамическая чип-антенна Контакт RF (RF pad) для подключения внешней антенны Керамическая чип-антенна Контакт RF (RF pad) для подключения внешней антенны
Размер, мм 12×22 12×15 9×11,5 6×8
Сертификация FCC, IC, CE, NCC, KCC, MIC, SRRC NA FCC, IC, CE, NCC, KCC, MIC, SRRC NA

Предыдущая версия семейства носила название BM7x. По сути, BM7x и RN487x – одни и те же модули, отличающиеся только типом прошивки. Так, если RN487x управляются простыми текстовыми командами, то BM7x управляются с помощью бинарных пакетов, что расширяет возможности создания BLE-приложений. Бинарные пакеты, используемые в BM7x, обладают большей эффективностью по сравнению с командами в RN487x, позволяют производить прокачку большего объема данных и взаимодействовать с функционалом «железа» напрямую. Также, поскольку переход в командный режим не требуется, модули BM7x обладают большей скоростью управления, меньшим размером сообщения для обновления данных GATT, а хост (микроконтроллер) получает уведомления без переключения в командный режим. В свою очередь модули RN487x, использующие командное управление, имеют объем UART-данных выше на 50…90%, но значительно более простую технологию управления, а для отладки работы не требуется никакого специального программного обеспечения, достаточно простого терминала.

Иными словами, модули BM7x подходят для решений, требующих высокой производительности и глубокой настройки «железа», а соответственно – и высокой квалификации разработчика, в то время как модули RN487x идеально подходят для решений простого и среднего уровня сложности, и их освоение не требует большого количества времени. Стоит также отметить, что поскольку модули имеют одинаковую начинку, получить один модуль из другого можно простой сменой прошивки (это отлично подойдет в тех случаях, когда понятно, что функционала команд недостаточно или, наоборот, управление бинарными пакетами слишком запутано).

Средства разработки

В первую очередь к средствам разработки следует отнести отладочную плату RN4870 PICtail (рисунок 3). Плата обеспечивает доступ ко всем выводам модуля RN4870, имеет на борту преобразователь USB-UART и питается от батарейки типа CR2032, разъема USB или внешней платы PICtail. Отличным дополнением к ней является плата с датчиками, с помощью которых можно изучить работу модуля, например, протестировав передачу данных по UART с терминала на персональном компьютере и далее через модуль – на смартфон. Для любителей платформы Arduino также доступна открытая библиотека SmartEverything Microchip RN4870 BLE 4.2.

Рис. 3. Отладочная плата RN4870 PICtail и дополнительная плата с датчиками

Рис. 3. Отладочная плата RN4870 PICtail и дополнительная плата с датчиками

Для тестирования передачи по UART достаточно подключить отладочную плату к ПК и запустить на смартфоне одно из приложений (рисунок 4), предоставляемых компанией Microchip — Bluetooth Smart Discover, BLE Sensor App или Smart Data. К сожалению, исходные файлы приложения для смартфона недоступны, но ввиду их сравнительной простоты процесс создания подобных утилит достаточно тривиален, в частности, для разработки под Android. На сегодняшний день имеется множество сред практически под любой язык программирования, начиная с Android Studio или Eclipse и заканчивая QT Software development или Xamarin для Visual Studio. То же можно сказать и про IOS.

Рис. 4. Приложения для сообщения с модулями Microchip

Рис. 4. Приложения для сообщения с модулями Microchip

Разумеется, возможна и обратная передача данных со смартфона через модуль RN4870 на персональный компьютер.

В модулях RN4870/71 присутствует возможность обновления прошивки. Сама процедура достаточно проста и описана на сайте производителя. Для обновления прошивки достаточно скачать утилиту ISupdate Programming Utility, выбрать соответствующие файлы с прошивкой и загрузить ее в модуль (рисунок 5).

Рис. 5. Обновление прошивки модуля RN4870

Рис. 5. Обновление прошивки модуля RN4870

На момент написания статьи актуальной версией прошивки является версия 1.30. Изначально модули поставлялись с версией прошивки 1.13, поэтому при начале работы рекомендуется в первую очередь обновить прошивку до последней версии, так как с момента выхода первых версий было внесено огромное количество изменений, например, появилась возможность работы по SPI.

Команды управления

Так как модуль поддерживает UART-интерфейс, после подключения доступны два режима управления. Для подачи команд необходимо перейти в текстовый режим. Команда, как правило, состоит из одной-двух букв и каких-либо параметров. Сам набор команд довольно большой, но достаточно подробно описан в документации к модулю. Условно все команды можно разделить на 6 групп:

  • команды действий – используются для запуска процесса или отображения критической информации;
  • команды Set/Get – используются для установки или получения конфигурации различных функций модуля;
  • команда list – перечисляют важную информацию в нескольких строках, информация заканчивается символом “END”;
  • команды настройки сервисов – используются для определения сервисов и их характеристик;
  • команды доступа – используются для обращения и записи характеристик сервера/клиента;
  • команды скрипта – используются для скриптового процесса модуля.

Примеры использования команд показаны на рисунке 6.

Рис. 6. Пример использования команд

Рис. 6. Пример использования команд

Команды значительно упрощают процесс работы с модулем и предоставляют пользователю широкие возможности (таблица 4).

Таблица 4. Возможности команд управления

Сфера применения Функции
Соединение Установка соединения
Обрыв соединения
Установка/разрыв связи (Bond/Unbond)
Старт и остановка сканирования
Добавление/удаление устройства из WhiteList (белого списка)
Чтение RSSI для текущего соединения
Остановка процесса установки соединения
Интерфейсы ввода-вывода Запись/чтение I2C
Запись/чтение SPI
Изменение настроек в EEPROM
Конфигурирование выводов
Конфигурирование маски GPIO
Установка/чтение состояния GPIO
Чтение и запись аналоговых данных
Контроль двух PWM-выходов
Системные Перезагрузка
Восстановление заводских настроек
Вход в командный режим и выход из него
Вход в режим Low Power
Скрипты Вход в режим скрипта
Декларация обработчика события
Выполнение текущего скрипта
Вывод (отображение) текущего скрипта
Очистка скрипта
Определение пользовательской функции
Сервисы GATT Создание/удаление публичного сервиса/характеристики
Запись/чтение значения характеристики
Установка нотификации для характеристики
Управление GAP Роли Central, Peripheral, Observer, Broadcaster
Установка паролей (PIN-code)
Выбор из набора встроенных сервисов
Установка/разрыв связывания (bonding)
Установка типа устройства (appearance)
Режим Advertising Запуск/остановка
Задание пользовательских данных для Advertising
Задание данных для Scan Response
Задание данных для Beacon
Частный сервис (Private Sevices) Создание/удаление частного сервиса/характеристики
Запись/чтение значения характеристики
Установка нотификации для характеристики
Прозрачный UART Разрешение/запрет
Конфигурация для роли «Периферия» (Peripheral)
Конфигурация для роли «Центральный узел» (Central)
Удаленная конфигурация модуля (по эфиру)

Исходя из вышесказанного, можно сделать вывод, что все, что требуется для работы модуля в качестве BLE-устройства, доступно для редактирования через команды. Например, возможно подключить МЭМС-датчик по I²С или SPI (акселерометр, датчик влажности и так далее) и обращаться к нему с помощью команд или написать скрипт, который бы использовал эти команды. Также возможна организация соединения и задание модулю тех параметров, которые он будет использовать в режиме соединения. Существует возможность задавать модулю те параметры, которые он будет использовать в режиме периферийного устройства и рассылая Advertising-сообщения, а также создавать сервисы и добавлять туда характеристики.

Набор данных, которым будет оперировать модуль, содержится в наборе сервисов. Существует специальная команда «PS, Идентификатор сервиса». После ввода этой команды создается сервис, который имеет заданный уникальный идентификатор (рисунок 7). Выбор идентификатора при использовании частных сервисов состоит, как правило, в генерации случайного 16-байтного набора символов (UUID). При создании публичного сервиса, то есть сервиса, который описан Bluetooth SIG, идентификатор выбирается из доступных, в зависимости от типа конкретного устройства.

Рис. 7. Создание сервиса и характеристик

Рис. 7. Создание сервиса и характеристик

После создания сервиса необходимо добавить в него характеристики. Каждая характеристика, так же, как и сам сервис, определяется уникальным идентификатором. Помимо уникального идентификатора для характеристики необходимо задать уровень доступа (задается через запятую) и длину данных (1…20 байт для модуля RN4870 и до 512 байт в целом для BLE). Формат данных может быть любой – строковое значение, 8-битная переменная, 16-битная переменная и так далее.

В приведенном примере на рисунке 7 показывается создание сервиса и добавление в него трех характеристик. После перезапуска модуля они сохранятся в энергонезависимой памяти и будут доступны для работы.

Однако сами по себе характеристики не несут в себе полезной информации. Для записи данных в характеристики используется команда “SHW”, где сначала мы указываем характеристику, а затем – данные, которые хотим записать (рисунок 8).

В примере на рисунке 8 показана запись, а затем – контрольное чтение числа 1122.

Рис. 8. Запись данных в сервис

Рис. 8. Запись данных в сервис

Подключение и управление модулем

Модуль способен работать в двух режимах:

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

С точки зрения схемотехники подключения наиболее простой вариант – это подача питания на модуль и, если управление модулем происходит при помощи внешнего микроконтроллера, задействование UART-интерфейса. В минимальном варианте – это подключение линии RX-TX (рисунок 9), но, если планируется использовать потоковый режим передачи данных, следует также подключить RTS и CTS для квитирования сигналов. Размер буфера данных на прием и передачу составляет 128 байт. При работе модуля в автономном режиме (с помощью скриптов) достаточно просто подать на него питание.

Рис. 9. Подключение модуля к внешнему микроконтроллеру

Рис. 9. Подключение модуля к внешнему микроконтроллеру

Так как технология BLE не имеет официального профиля или сервиса для передачи последовательных данных (подобно SPP в классическом Bluetooth), Microchip определил Private Service, который симулирует Bluetooth Classic SPP (Transparent Serial Port service). В документации этот сервис обозначается как как MDLP. Сервис является прозрачным для пользователя: на каждом конце присутствует только поток данных (UART Serial Data Stream).

Оптимизация параметров для данного вида потоковой передачи данных происходит в два этапа:

  • если есть доступ к настройкам на обоих концах линка (то есть при варианте соединения «модуль–модуль»), можно настроить оптимальные параметры таймингов для достижения или максимальной скорости, или меньшего потребления;
  • если модуль общается со смартфоном, то параметры связи будут определяться используемой операционной системой (iOS/Android). Скорость передачи данных в этом случае будет ниже, например, для iOS – не выше 10 кбит/с.

Как работает прозрачный канал между двумя модулями?

Сервис прозрачного канала уже встроен в модуль, причем в новой прошивке версии 1.30 он по умолчанию имеет включенное состояние. Включение этого сервиса по умолчанию не влияет на работу с другими сервисами модуля и позволяет при включении питания сразу же входить в режим Advertising. Далее, для взаимодействия модулей, на одном из них необходимо ввести команду “F”: модуль перейдет в режим центрального устройства и будет выводить в терминал все доступные для подключения устройства, после чего подается команда на подключение к выбранному устройству по MAC-адресу. После выбора устройства происходит соединение и возникает прозрачный режим: все, что приходит на UART одного модуля, выходит с UART второго модуля.

Пример организации прозрачного канала для модулей RN4870 показан на рисунке 10. Правильность полученных данных определяется с помощью 24-битного CRC. Если пакет не получен – то, соответственно, центральным устройством не получен ответ о достоверной передаче данных. В этом случае передача пакета повторяется на разных каналах до тех пор, пока не будет получен ответ о том, что пакет принят, или продолжительность попыток не превысит значение timeout соединения.

Рис. 10. Организация прозрачного канала между модулями RN4870

Рис. 10. Организация прозрачного канала между модулями RN4870

Если описывать алгоритм более подробно, то для установки связи между модулями RN4870 необходимо выполнить следующие действия:

  • подключиться к модулю 1 через терминал;
  • перейти в командный режим ($$$);
  • запустить встроенный сервис “TransparentUART” (SS,C0) и перегрузиться (R,1). После перезагрузки модуль находится в режиме “Advertising”;
  • запустить сервис “Transparent UART” на втором модуле(не перезагружать модуль;
  • запустить Scan (F), увидеть второй модуль и остановить сканирование (X);
  • установить соединение со вторым модулем(C,0,<Target MAC>). После установки соединения появится сообщение о подключении.

Работа RN4870 без хоста

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

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

  • подключиться к модулю через терминал;
  • запустить утилиту“RN4870/71 Provision Utility”;
  • загрузить текстовый скрипт;
  • запустить приложение “BLE SensorApp” на смартфоне;
  • найти устройство “RN4870-xxxx”;
  • начать взаимодействие с платой.

После выполнения описанных выше действий, при помощи отладочной платы RN4870 PICtail и платы датчиков можно на практике убедиться в возможностях модуля при взаимодействии его со сторонней периферией (рисунок 11).

Рис. 11. Взаимодействие модуля RN4870 с платой датчиков

Рис. 11. Взаимодействие модуля RN4870 с платой датчиков

Однако при создании скрипта стоит учесть, что его размер, доступный для загрузки, имеет ограничение в 1000 знаков и 50 строк, причем – не более 100 знаков в одной строке.

Преимущества RN4870

RN4870 являются модулями с законченным стеком, которые могут работать как под управлением внешнего микроконтроллера, так и скриптов, что позволяет построить простое решение без использования внешнего микроконтроллера. RN4870 позволяет добавить BLE-функционал даже к системе с 8-битным микроконтроллером, так как является, возможно, единственным BLE-модулем с управлением с помощью простых текстовых команд. Модули имеют встроенный сервис прозрачного канала, что является прямой заменой кабельного соединения, причем сервис работает сразу же после включения питания. Модули RN4870 имеют сертификацию Bluetooth 5.0 с набором функций Bluetooth 4.2. Сертификация Bluetooth позволяет размещать соответствующий логотип на своей продукции при использовании модулей в серийных решениях.

Литература

  1. Олег Пушкарев, вебинар: Как добавить BLE 4.2 в устройство с 8-битным микроконтроллером;
  2. RN4870/71 Bluetooth 4.2 Low Energy Module Data Sheet;
  3. RN487X Bluetooth Low Energy Module Sell Sheet;
  4. Getting Started with Bluetooth Low Energy, Robert Davidson, Akiba, Carles Cufí, Kevin Townsend, 2014.

Наши информационные каналы

О компании Microchip

Microchip Technology Inc. - ведущий поставщик микроконтроллеров, схем смешанного сигнала, аналоговых полупроводников и решений на основе флэш-IP. Решения Microchip обеспечивают разработку с низким уровнем риска, снижают общую стоимость системы и сокращают время выхода на рынок для тысяч различных клиентских приложений по всему миру. Штаб-квартира в Чандлер, штат Аризона. Продукция Microchip обладает высокими качеством и уровнем технической поддержки. Продукция Microchip обладает высоким уровн ...читать далее