Журнал РАДИОЛОЦМАН, сентябрь 2018
В статье приводятся аппаратные средства (принципиальные схемы, разводка плат, фотографии) и программное обеспечение (исходные тексты программ на языке C-51 для микроконтроллеров, на языке Clarion – для компьютера и их оттранслированные варианты) изолированных преобразователей USB-SPI на основе новейшего (2017 г.) 51-совместимого микроконтроллера EFM8UB30F40G и цифровых изоляторов Si8663BC (для интерфейса SPI) и ADuM3160/4160 (для интерфейса USB). В качестве примера работы преобразователей USB-SPI приведено устройство сопряжения микроконтроллера EFM8LB12 (2016 г.) с компьютером по интерфейсу USB и продемонстрированы результаты испытаний его обмена информацией с компьютером.
Введение
В компьютерных системах сбора и обработки данных, в которых микроконтроллер собирает аналоговую и цифровую информацию, без обработки передает ее по какому-либо интерфейсу в компьютер, где производится окончательная ее обработка и вывод результатов на экран монитора и принтер, как показано в работе автора [2], наиболее рациональным является использование достаточно простых 8-разрядных высокоскоростных микроконтроллеров, обладающих широким набором периферийных устройств. Применение для этих целей 32-разрядных микроконтроллеров является бесперспективным, а потому бессмысленным, поскольку, во-первых, даже самый совершенный 32-разрядный микроконтроллер по сравнению с компьютером проигрывает последнему по скорости обработки информации, а, во-вторых, только у компьютера имеются монитор и принтер, а также более совершенная ОС, которая не идет ни в какое сравнение с ОС для 32-разрядных микроконтроллеров. Основным интерфейсом компьютера для связи с периферийными устройствами является интерфейс USB. В 8-разрядных микроконтроллерах, обладающих богатым набором периферийных устройств, интерфейс USB, как правило, отсутствует. В таких микроконтроллерах основным и наиболее скоростным интерфейсом является интерфейс SPI, отсутствующий в компьютере.
Задача преобразования интерфейса USB в интерфейс SPI для связи подобных микроконтроллеров с компьютером может быть решена различными способами, однако, как показано в работе автора [1], наиболее перспективным для этих целей является использование самых простых микроконтроллеров, оснащенных и интерфейсом USB, и интерфейсом SPI. Наиболее простым, недорогим и достаточно скоростным микроконтроллером является микроконтроллер EFM8UB10 (далее UB10), выпускаемый в сверхминиатюрном корпусе QFN20 размером 3 × 3 мм. Этот, относительно новый (2015 г. выпуска) микроконтроллер, оснащенный интерфейсами USB и SPI, выпускается компанией Silicon Laboratories, которая бесплатно поставляет программные средства под общим названием USBXpress, позволяющие достаточно просто, не вдаваясь в спецификацию USB, программировать обмен по этому интерфейсу как со стороны компьютера, так и со стороны микроконтроллера. В работах автора [1] и более подробно в [2] описываются преобразователи интерфейсов USB-SPI на базе микроконтроллеров UB10.
В 2017 г. компанией Silicon Laboratories выпущена новейшая микросхема EFM8UB30 (далее UB30), которая может использоваться вместо UB10 в преобразователях интерфейса USB-SPI. UB30 (как и UB10) также выпускается в корпусе QFN20 размером 3 × 3 мм. По сравнению с UB10 в UB30 увеличена программная память до 40 кБ (против 16 кБ в UB10), увеличен объем ОЗУ – XRAM до 3328 байт (против 2304 байт в UB10), добавлен еще один таймер Т5, отсутствующий в UB10, исключен UART0, присутствующий в UB10 (UART1 присутствует и в UB10, и в UB30), добавлены 4 блока логики CLU, отсутствующие в UB10. По выводам корпуса QFN20 UB30 полностью совместима с UB10. Поскольку названия некоторых регистров и название библиотеки обращения к функциям USB у UB30 иные, чем у UB10, для UB30 должна быть написана своя программа, или, другими словами, программа, предназначенная для UB10, на UB30 работать не будет.
Для написания программ, их отладки и, что особенно важно, для полуавтоматического конфигурирования микроконтроллера компанией Silicon Laboratories бесплатно поставляется среда программирования под общим названием Simplicity Studio. Для микроконтроллера UB10 используется Simplicity Studio v3, работающая в ОС WindowsXP, а для UB30 – новая Simplicity Studio v4, которая в ОС WindowsXP в некоторых режимах работает не совсем адекватно. Она хорошо работает только в ОС Windows7 в 32-разрядном режиме (и в более поздних ОС Windows), что несколько осложняет задачу, если для программирования микроконтроллера (и компьютера) используется ОС WindowsXP (однако эти сложности, как будет показано далее, вполне разрешимы).
Если микроконтроллер, собирающий аналоговую и цифровую информацию, использует высокоточный АЦП (встроенный, либо внешний), то преобразователь USB-SPI должен быть гальванически изолирован от компьютера для исключения различного рода шумов, проникающих из компьютера в тракт АЦП. Такая изоляция может быть осуществлена либо изолированием интерфейса USB (например, с помощью цифровых изоляторов ADuM3160/4160 производства компании Analog Devices ), либо изолированием интерфейса SPI (например, с помощью высокоскоростных изоляторов Si8662/63 компании Silicon Laboratories). В работах автора [1] и [2] в изолированных преобразователях интерфейсов USB-SPI использовались изоляторы ADuM3160 и Si8662 (4 передатчика, один из которых не использовался, и 2 приемника). Однако, как показала практика использования этих преобразователей, при малых размерах передаваемых и принимаемых пакетов информации (до 32 байт) скорости обмена по интерфейсу USB существенно снижаются (до 0.3 МБод, что уже всего в 2.5 раза выше скорости обмена по интерфейсу RS232 – 0.115 МБод), тогда как скорости обмена по интерфейсу SPI (до 12 МБод и выше) от размеров пакетов абсолютно не зависят. Этот разбаланс скоростей приводит к тому, что в микроконтроллере опытным путем приходится подбирать некоторую временнýю задержку в зависимости от размера пакета, иначе обмен происходит со сбоями. Например, если из микроконтроллера в преобразователь USB-SPI предаются по интерфейсу SPI 10 пакетов по 32 байта (на скорости SPI 9 МБод), a преобразователь не успевает передать такой пакет по USB (на скорости 0.3 МБод), то обмен может сорваться. Для исключения этого недостатка в обмене информацией по SPI (помимо основных) необходимо ввести еще один сигнал, например, готовности (Ready), который во время обмена по USB будет в запрещающем состоянии, а после завершения обмена по USB – в разрешающем. В этом случае обмен информацией по интерфейсам USB-SPI будет наиболее надежным и зависеть от размера пакетов уже не будет. Если используется преобразователь USB-SPI на основе изолятора USB ADuM3160/4160, где основной микроконтроллер и микроконтроллер преобразователя сопрягаются напрямую (по интерфейсу SPI), то введение дополнительного сигнала (Ready или, для простоты, Re) не вызовет никаких трудностей. Однако в преобразователях USB-SPI на базе изолятора Si8662 (4 сигнала в одну сторону, один из которых не используется, и 2 сигнала в другую) обмен становится невозможным, так как сигнал Re также требуется изолировать. Решение проблемы было найдено автором путем использования изолятора SI8663 (по 3 сигнала в обе стороны).
Помимо вышеописанных аппаратных средств, сигнал Re был также учтен и в программном обеспечении обмена.
Все перечисленные (и некоторые неперечисленные) проблемы были сняты автором в преобразователях интерфейсов USB-SPI на базе UB30 и изоляторов ADuM3160/4160 и SI8663, описанных в настоящей статье.
Статья состоит из двух частей. В первой части приведены аппаратные средства преобразователей, во второй – программные средства и результаты их работы.
Аппаратные средства
Устройство тестирования преобразователей USB-SPI (Рисунок 1), как можно убедиться, не отличается особой сложностью. В качестве основного микроконтроллера выбран микроконтроллер (DD1) EFM8LB12 (далее LB12) производства компании Silicon Laboratories, который как раз оснащен высокоточным 14-разрядным АЦП и у которого интерфейс USB отсутствует. LB12 – современный (2016 г.) и недорогой (около 2$) микроконтроллер с процессором конвейерной архитектуры является однотактным (то есть, 90% всех его команд или инструкций выполняется за один такт) и достаточно скоростным: его максимальная тактовая частота составляет 75 МГц. Сигналы, с помощью которых LB12 сопрягается с преобразователем интерфейсов USB-SPI, выведены на разъем X1, представляющий собой 4 двухрядных цанговых гнезда с расстояниями 2.54 мм (PBDHL-2x4). Это сигналы 4-проводного интерфейса SPI (MISO, SCK, MOSI и NSS), сигнал его сброса RST067, сигнал готовности RE (который уже упоминался), а также «земля» и питание – VddSPI.
Рисунок 1. | Схема макетной платы на основе LB12. |
Поскольку преобразователь интерфейса USB-SPI на базе изоляторов ADuM3160/4160 требует напряжения питания +5 В, а на базе SI8663 – +3.3 В, на плате установлена 3-контактная перемычка P1, оснащенная джампером, на два боковых контакта которой подается питание +5 В и +3.3 В. Если джампер установлен между контактом +3.3 В и центральным контактом VddSPI, то на 7-й контакт разъема X1 подается питание +3.3 В, и в этом случае используется преобразователь на базе SI8663. При установке джампера между контактами P1 +5 В и VddSPI (на Рисунке 1 он так и установлен) используется преобразователь на базе ADuM3160/4160. Тактирование LB12 осуществляется от внешнего генератора, подключаемого к 3-контактному разъему X3 (SIP-3), представляющему собой 3 цанговых гнезда с расстояниями 2.54 мм. С 3-го контакта X3 сигнал внешнего тактового генератора EXTCLK подается на вывод 30 DD1, контакт 2 X3 заземлен, а на контакт 1 подается напряжение питания +3 В (сигнал +3M). Это напряжение питания вырабатывается стабилизатором КР1158ЕН3Б (DA2), на вход которого (вывод 1) подается напряжение +5 В с разъема питания X4 (контакт 2). Вывод 2 DA2 заземлен, а на выводе 3 образуется напряжение +3 В с максимальным током 0.5 А (сигнал +3М). Конденсаторы C4 и C5 служат для штатной работы стабилизатора DA2.
В качестве внешних тактовых генераторов автором были протестированы три типа генераторов. Первые два – стандартные кварцевые CMOS тактовые генераторы SCO22350ADSR (50 МГц, компании Sunny Electronics) и SG-8002CE (72 МГц, EPSON). Схема их подключения показана в пунктирном прямоугольнике в левой нижней части Рисунка 1. Конденсатор C1 служит для штатной работы генераторов. Третий генератор – SI560CAA72M0000ABG (72 МГц, Silicon Laboratories). Схема его включения показана в правой нижней части Рисунка 1. Для каждого генератора автором разведена своя миниатюрная плата (см. далее).
Выводы VIO и VDD (выводы 2 и 3 DD1) подключены к выходному напряжению второго стабилизированного источника питания напряжением +3.3 В на базе стабилизатора LP2950Z3.3 (вывод 3 DA1). Конденсаторы C2 и C3 служат для штатной работы DA1. Входное стабилизированное напряжение +5 В с двухконтактного разъема X1 подается на вход стабилизатора (вывод 3 DA1), вывод 2 которого заземлен. Применение отдельного стабилизатора (DA2) для питания генераторов определяется двумя причинами. Во-первых, это сделано для снижения шума от генераторов, передающегося по питанию, а, во-вторых, если генераторы SCO22350ADSR и SG-8002CE потребляют только 10-15 мА тока, то генератор SI560CAA72M0000ABG потребляет уже 75 мА, и тока стабилизатора DA1 (LP2950Z3.3, максимальный ток 100 мА) может уже не хватить. Для индикации наличия питания +5 В использован светодиод LЕD1 зеленого свечения со своим токоограничительным резистором R3.
Рисунок 2. | Схемы кабелей для программирования LB12 с помощью USB-DEBUG адаптера (а) и питания (б). |
Для программирования микроконтроллера LB12 (DD1) используется интерфейс C2 (сигналы RST/C2CK и C2D, выводы 4 и 5 DD1, соответственно). Сигналы для программирования DD1 подаются с 3-контактного разъема X2: с вывода 3 сигнал RST067 подается на вывод 4 DD1, а с вывода 2 сигнал C2D подается на вывод 5 DD1. Контакт 1 X2 заземлен. RC-цепочка R1, C1, R2 требуется для программирования LB12. Программирование LB12 производится с помощью USB-DEBUG адаптера. Для программирования используется кабель связи USB-DEBUG адаптера с платой устройства (Рисунок 2а). Одним концом этот кабель подключается к разъему выходного шлейфа USB-DEBUG адаптера (X1), вторым (X2) – к разъему X2 Рисунка 1. Кроме того, необходим также кабель питания (Рисунок 2б), который одним концом X1 подключается к БП +5 В, а вторым (X2) – к разъему питания X4 Рисунка 1. Этот кабель и БП используются и в штатном режиме работы устройства. При программировании LB12 преобразователи интерфейса USB-SPI необходимо отключить (вытащить из разъема X1, Рисунок 1).
Рисунок 3. | Схема расположения контактов платы-переходника для LB12. |
Устройство по схеме Рисунок 1 собрано на макетной плате, а все соединения выполнены вручную проводом МГТФ-0.03. Однако, поскольку микроконтроллер LB12 имеет сверхминиатюрный корпус с мелким размером и расположением выводов, для макетирования он непригоден. Поэтому автором разведена и изготовлена соответствующая плата-переходник (см. далее). Схема расположения контактов платы-переходника приведена на Рисунке 3.
Литература
- Кузьминов А. Преобразователь интерфейсов USB-SPI на базе нового 51-совместимого микроконтроллера EFM8UB1. Современная электроника. 2017. № 1–3
- Кузьминов А.Ю. Связь между компьютером и микроконтроллером. Современные аппаратные и программные средства. – М.: Издательство «Перо», 2018
- Кузьминов А. Изготовление устройств на печатных платах с высоким разрешением в домашних условиях. Технологии в электронной промышленности. 2010. № 8–10, 2011. № 1, 2
- Кузьминов А. Технология изготовления печатных плат с высоким разрешением в любительских условиях. Радио. 2017. № 10.
- USBXpress Programmer's Guide
- EFM8 Factory Bootloader User Guide
- EFM8 Factory Bootloader AN945SW