Радиолоцман Электроника en
расширенный поиск +
  

28-02-2019

Преобразователи интерфейсов USB-SPI с гальванической развязкой на базе нового 51-совместимого микроконтроллера EFM8UB30. Часть 3

Silicon Labs » EFM8UB10

Журнал РАДИОЛОЦМАН, ноябрь 2018

Алексей Кузьминов (Москва)

Часть 2

Программные средства

Поскольку исходные тексты программ, сами оттранслированные программы (для компьютера – исполняемый файл в *.exe формате, для микроконтроллеров – файлы в *.hex формате, подлежащие программированию), а также их файл-проекты приведены в дополнительных материалах статьи и размещены на сайте журнала, в статье будет приведена только суть работы программ. В самом кратком виде – для компьютера и микроконтроллера LB12 и несколько подробнее – для микроконтроллера UB30.

Программные средства состоят из трех программ: программа для компьютера, передающая по интерфейсу USB строку, состоящую из 32 символов латинского алфавита, принимающая по интерфейсу USB 10 аналогичных строк и распечатывающая эти строки (и исходную строку) на экране монитора; программа для микроконтроллера UB30, использующаяся в преобразователях интерфейсов USB-SPI, однократно принимающая строку из 32 символов (массив из 32 элементов) по интерфейсу USB, 10-кратно передающая и принимающая этот массив по интерфейсу SPI и передающая его далее по интерфейсу USB; программа для микроконтроллера LB12, однократно принимающая массив из 32 элементов по интерфейсу SPI и 10-кратно передающая его по этому же интерфейсу.

Вначале о программе для компьютера (текст USB_32.clw, файл-проект USB_32.prj, исполняемый файл USB_32.exe). Эта программа написана на языке Clarion v.6 для Windows (о преимуществе этого языка 4 поколения с соответствующей RAD-системой подробно написано в [2]) и отличается от программы, приведенной в [1] и [2], только размером буфера (32 байта вместо 4096 байт) и, кроме того, буфер передается по интерфейсу USB один раз, а принимается 10 раз (в [1] и [2] – один раз). Описания всех функций API обмена по USB для компьютера приведены в [5], а описание функций, использующихся в программе, приведено в [1] и более подробно – в [2], поэтому останавливаться на них, на взгляд автора, нет смысла. Однако чтобы программа работала, необходимо, во-первых, установить на компьютер последнюю версию драйверов USBXpress, а также последнюю версию библиотеки SiUSBXp.dll (2017 г.). Эту информацию можно бесплатно скачать с сайта Silabs.com. Далее, с помощью библиотекаря LibMaker, входящего в пакет поставки Clarion, библиотеку SiUSBXp.dll необходимо преобразовать в библиотеку SiUSBXp.lib, которая используется в файл-проекте программы. Для этого необходимо вызвать LibMaker, добавить (кнопка «Add file…») туда файл SiUSBXp.dll и записать его как (кнопка «Save as…») SiUSBXp.lib (Рисунок 16). После этого уже можно транслировать программу и получить исполняемый файл USB_32.exe.

Окно LibMaker.
Рисунок 16. Окно LibMaker.

Теперь о программе для UB30.

Прежде всего, в Simplicity Studio v.4 необходимо сконфигурировать микроконтроллер: указать тактовую частоту 48 МГц, разрешить интерфейс SPI в матрице соединений, сконфигурировать SPI как 4-проводный ведомый (slave) и с помощью нескольких команд «Skip» «передвинуть» сигналы SPI (MISO, MOSI, SCK и NSS) в правую часть микросхемы UB30 (Рисунок 17).

Конфигурация UB30.
Рисунок 17. Конфигурация UB30.

Сигналы RE, RST067 и MISO установить как цифровые выходы (Digital Push-Pull Output), сигналы SCK, MOSI и NSS – как цифровые входы (Digital OpenDrain I/O), запретить слаботоковые подтяжки (установить свойства «Disable PortI/O Weak Pullup» в состояние «Pull-ups disabled») и разрешить работу матрицы соединений (установить свойство «Enable Crossbar» в состояние «Enabled»). После этого на C-51 автоматически сконфигурируется файл инициализации устройства (InitDevice.c).

Если сравнить расположение сигналов на Рисунке 17 со схемами на Рисунках 4 и 5, а также с разводкой на Рисунке 9, то можно убедиться, что схемы и разводка устройств на UB30 строго соответствуют Рисунку 17, или, другими словами, программные средства являются первичными, а схемы и разводка – вторичными.

По сравнению с программой для UB10 [1], [2], программа для UB30 отличается двумя особенностями.

Во-первых, автором обнаружено, что стандартные процедуры (или подпрограммы) ввода и вывода байта по SPI, использующие флаг SPIF, в UB30 по сравнению с UB10 [1], [2] работают со сбоями. Возможно, этот «баг» в дальнейшем будет учтен разработчиками UB30. Вместо стандартных процедур ввода/вывода байта необходимо использовать процедуры, учитывающие буфер FIFO.

В подпрограмме вывода байта (см. ниже) вместо анализа флага SPIF и его сброса (эти две команды умышленно оставлены и закомментированы «//») необходимо перед выводом байта (SPI0DAT=byte;) проанализировать флаг передатчика (TXNF) буфера FIFO на предмет его опустошения.

Подпрограмма вывода байта по SPI:

//-----------------
void outspi(unsigned char byte)
  {              
//-------------
    while (!SPI0CN0_TXNF)      // Ожидание опустошения FIFO (передатчика)
    {
      SPI0DAT=byte;            // Вывод байта по SPI
//  while (!SPI0CN0_SPIF);     // Ожидание окончания передачи
//    SPI0CN0_SPIF = 0;        // Очистка флага прерывания SPI
    }
  }
//-----------------

Если в подпрограмме ввода байта использовать флаг SPIF (см. ниже), то она также будет работать со сбоями. Вместо этого, после вывода пустого байта (SPI0DAT=0xff;), требующегося для последующего ввода байта, необходимо проанализировать флаг приемника (RXE) буфера FIFO также на предмет его опустошения. Команды стандартного ввода байта, связанные с флагом SPIF, также закомментированы.

Подпрограмма ввода байта по SPI:

//-----------------
unsigned char inspi()
  {
//--------------
    unsigned char byte;
    SPI0DAT=0xff;                            // Ввод байта в микроконтроллер.
    while (SPI0CFG & SPI0CFG_RXE__BMASK)     // Ожидание опустошения FIFO (приемника)
    {
//
//  while (!SPI0CN0_SPIF);                   // Ожидание окончания передачи
//    SPI0CN0_SPIF = 0;                      // Очистка флага прерывания SPI
      byte=SPI0DAT;
    }
return(byte);
  }
//----------------

Второй момент связан с сигналом готовности RE, о котором уже упоминалось. В самом начале программы сигнал готовности RE необходимо установить в запрещающее состояние (RE=1;). Перед выводом массива из 32 элементов в LB12 сигнал RE установить в разрешающее состояние (RE=0;), а после окончания вывода – в запрещающее состояние (RE=1;). Аналогичную процедуру необходимо произвести перед и после ввода каждого из десяти 32-элементных массивов, посылаемых из LB12 в UB30.

В остальном программа ненамного отличается от программы для UB10, приведенной в [1] и [2], поэтому, на взгляд автора, разобраться в ней не составит большого труда.

По поводу программы для LB12.

Программа использует среду Simplicity Studio v.3. Эта программа отличается от аналогичной программы, приведенной в [1] и [2], размером буфера (32 байта). Ввод/вывод по интерфейсу SPI организован стандартным способом (с использованием флага SPIF). Единственным дополнением является проверка готовности UB30 передавать и принимать 32-элементные массивы. Для этого перед приемом массива из UB30 необходимо проанализировать сигнал RE на предмет готовности (while(RE);). Аналогичную процедуру необходимо произвести и перед каждой передачей в UB30 десяти 32-элементных массивов по SPI.

Для конфигурирования LB12 необходимо установить внешний кварцевый генератор частотой 72 МГц, установить максимальную частоту ядра (Core) 75 МГц (SYSCLK is below 75 MHz), разрешить работу интерфейса SPI в матрице соединений и разрешить саму матрицу соединений. Сконфигурировать SPI как 4-проводный ведущий (master). С помощью команд «Skip» «передвинуть» сигналы SPI в правую часть микросхемы (Рисунок 18). Сигналы для внешнего генератора P0.3 (EXTCLK), готовности P1.1 (RE) и P1.3 (MISO) установить как цифровые входы (Digital OpenDrain I/O), а сигналы P1.2 (SCK), P1.4 (MOSI) и P1.5 (NSS) – как цифровые выходы (Digital Push-Pull Output). После конфигурирования необходимо записать эту конфигурацию на диск (нажав пиктограмму с рисунком диска в верхней части меню), в результате чего сконфигурируется файл инициализации устройства (InitDevice.c).

Конфигурация LB12.
Рисунок 18. Конфигурация LB12.

Если сравнить конфигурацию LB12 (Рисунок 18) со схемой Рисунок 1, то можно заметить их идентичность. Таким образом Рисунок 18 (т.е. программные средства) является первичным, а схема Рисунок 1 – вторичной, или, другими словами, схема внешних связей для LB12 (Рисунок 1) составлена по Рисунку 18.

Результаты

Если к плате с LB12 (Рисунок 15) подключить любое из устройств (Рисунки 11, 12 или 13), включить питание и запустить программу для компьютера (USB_32.exe), то на экран монитора выведется окно, на котором будет отражена передаваемая строка и 10 принятых строк. Программа одинаково хорошо работает и в WindowsXP (Рисунок 19а), и в Windows7 в 32-разрядном режиме (Рисунок 19 б).

Снимки экрана при работе программы USB_32.exe в  Windows XP (а) и Windows 7 (б).
а)
Снимки экрана при работе программы USB_32.exe в  Windows XP (а) и Windows 7 (б).
б)
Рисунок 19. Снимки экрана при работе программы USB_32.exe в
Windows XP (а) и Windows 7 (б).

Из Рисунка 19 можно заметить, что скорость обмена невысокая (всего 0.282 МБод), что всего в 2.5 раза больше максимальной скорости обмена по интерфейсу RS-232 (0.115200 МБод). Этот факт объясняется тем, что интерфейс USB при таком малом размере буфера (32 байта) работает очень медленно. В отличие от USB, интерфейс SPI работает на скорости 9 МБод (и даже выше), и его работа от размера буфера не зависит. Следует также отметить высокую надежность работы устройств.

Программирование UB30 с помощью встроенного загрузчика efm8load.exe

Если скупость (или какая-либо другая причина) не позволяет приобрести USB DEBUG адаптер, то для программирования UB30 можно воспользоваться встроенным USB-загрузчиком программ [6], [7]. О встроенном загрузчике написано в [7], а программные средства для него можно скачать с [6]. Однако, как это часто бывает, ключевые моменты загрузки программ в [7] отражены не полностью, а в [6] приведены не все программные средства. Ниже описано, как воспользоваться встроенным загрузчиком.

Вначале скачанный архив AN945SW.zip необходимо распаковать в какую-либо папку, например, C:…AN945SW. В папку C:...AN945SWToolsSource, где расположены файлы Efm8load.py и Hidport.py, необходимо скопировать библиотеку slabshiddevice.dll. Ее можно найти в нескольких местах в папке C:SiliconLabsSimplicityStudio. Далее в папку C:...AN945SWToolsWindows, где имеются файлы Efm8load.exe и Hex2boot.exe, необходимо скопировать подлежащую программированию оттранслированную программу в *.hex-формате, например, EFM8UB3_USBXpress_TestPanel_6.hex (эта программа приведена в дополнительных материалах к статье). В этой же папке необходимо создать два *.bat-файла: hex2boot.bat и efmload.bat следующего содержания (они также приведены в дополнительных материалах к статье).

hex2boot.bat:
hex2boot.exe EFM8UB3_USBXpress_TestPanel_6.hex -o EFM8UB3_USBXpress_TestPanel_6.efm8
pause

efmload.bat:
efm8load.exe EFM8UB3_USBXpress_TestPanel_6.efm8
pause

Для программирования необходимо изготовить или купить двухконтактный джампер с шагом 1.27 мм. Этот джампер необходимо надеть на первый и второй контакты разъема X3 (C2D и «земля», Рисунки 4 и 5). На фотографии Рисунок 14 стрелками показано, какие контакты следует перемкнуть.

Для программирования платы SI8663-DIP (Рисунок 14 справа сверху, синие стрелки) ее нужно подключить к компьютеру кабелем USB. Для программирования платы с ADuM4160 (Рисунок 14, слева сверху, белые стрелки) ее нужно вставить в макетную плату Рисунок 15, подключить к компьютеру кабелем USB и включить питание макетной платы. В обоих случаях эти устройства будут распознаны как HidDevice.

Окно при программировании UB30 с помощью встроенного USB-загрузчика программ.
Рисунок 20. Окно при программировании UB30 с помощью встроенного
USB-загрузчика программ.

Далее следует запустить hex2boot.bat, в результате чего сконфигурируется файл EFM8UB3_USBXpress_TestPanel_6.efm8 загрузочного (двоичного) формата. После этого необходимо запустить efmload.bat, в результате чего откроется окно (Рисунок 20), в котором будет отражен процесс программирования. После завершения программирования джампер с контактов разъема X3 следует снять, подключить устройство к макетной плате и к компьютеру кабелем USB и включить питание. Теперь, если посмотреть в панели управления в диспетчере устройств (USB), устройство будет уже опознано как USBXpress.device. Если запустить программу USB_32.exe, то на экран выведется такое же окно, как на Рисунке 19.

Заключение

Представленные в статье материалы свидетельствуют, что новейший микроконтроллер UB30 отлично работает в преобразователях интерфейса USB-SPI и может использоваться взамен UB10 в подобных устройствах. Изолированные преобразователи USB-SPI могут найти широкое применение в компьютерно-микроконтроллерных системах сбора и обработки информации, сопрягаемых с компьютером по интерфейсу USB. Кроме того, расширенные возможности UB30 (увеличенные оперативная и программная память и более богатый набор периферийных устройств по сравнению с UB10) позволяют использовать его и в несложных автономных устройствах, опционально обменивающихся информацией с компьютером по интерфейсу USB.

Литература

  1. Кузьминов А. Преобразователь интерфейсов USB-SPI на базе нового 51-совместимого микроконтроллера EFM8UB1. Современная электроника. 2017. № 1–3
  2. Кузьминов А.Ю. Связь между компьютером и микроконтроллером. Современные аппаратные и программные средства. – М.: Издательство «Перо», 2018
  3. Кузьминов А. Изготовление устройств на печатных платах с высоким разрешением в домашних условиях. Технологии в электронной промышленности. 2010. № 8–10, 2011. № 1, 2
  4. Кузьминов А. Технология изготовления печатных плат с высоким разрешением в любительских условиях. Радио. 2017. № 10.
  5. USBXpress Programmer's Guide
  6. EFM8 Factory Bootloader User Guide
  7. EFM8 Factory Bootloader AN945SW

Материалы по теме

Загрузки

Цена EFM8UB10EFM8UB10 на РадиоЛоцман.Цены — от 52,91 до 41,53 руб.
14 предложений от 8 поставщиков
Микроконтроллер 8 бит, EFM8 - Universal Bee, 50 МГц, 16 КБ, 2.25 КБ, 28 вывод(-ов), QFN
ПоставщикПроизводительНаименованиеЦена
T-electronSilicon LabsEFM8UB10F8G-C-QFN2052,91 руб.
ТриомSilicon LabsEFM8UB10F8G-C-QFN20R74,77 руб.
5 элементSilicon LabsEFM8UB10F16G-C-QFN28от 103,24 руб.
ДКО ЭлектронщикSilicon LabsEFM8UB10F16G-B-QFN20по запросу
Использование онлайн-утилиты от Littelfuse для выбора предохранителя
Литиевые ХИТы FANSO или что нужно знать инженеру о батарейках (материалы вебинара)
Срезы ↓
Новая Инженерная Школа
Новая Инженерная Школа
Курсы и семинары для инженеров, технологов, разработчиков и конструкторов предприятий приборостроения.
Рейтинг@Mail.ru