USB интерфейс для программирования DSP аудиопроцессоров Analog Devices в среде Sigma Studio

Начав изучать аудиопроцессор SigmaDSP® от фирмы Analog Devices (AD) встал вопрос как им управлять и как его программировать из среды графического проектирования SigmaStudio. AD предлагает для этого свое устройство «USB-интерфейс Analog Devices USBi» (EVAL-ADUSB2EBZ) — это интерфейс между USB-портом вашего ПК и выводами аппаратного ввода данных SigmaDSP, проще говоря это интерфейс USB — I2C/SPI, и стоит эта плата ~83$, что не совсем бюджетно.

Изучив вопрос в сети, было найдено бюджетное решение для создания аналога USB-интерфейса USBi от Analog Devices на базе микроконтроллера Cypress CY7C68013A . Кстати интерфейсная плата от AD построена тоже на чипе от Cypress, но немного на другом CY7C68053. Готовые платы с микроконтроллером CY7C68013A в виде модулей продаются на всем известном китайском сайте примерно по 200+ рублей, искать по фразе EZ-USB FX2LP CY7C68013A , выглядит она так:

Плата EZ-USB FX2LP на микроконтроллере CY7C68013A

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

Первый способ. Ручной запуск скрипта ADI_USBi.

Это самый распространенный способ в сети который предлагают все кто не смог разобраться с данным USB устройством.

Для начала нам нужно установить программное обеспечение CySuiteUSB, которое доступно для скачивания на сайте производителя чипа Cypress по этой ссылке. После установки подключаем наш USB модуль к компьютеру, в диспетчере устройств он определился как Cypress FX2LP No EEPROM Device

USB устройство Cypress FX2LP No EEPROM Device

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

Идем на компьютере в Пуск — Программы — и в папке Cypress запускаем утилиту CyConsole. В интерфейсе программы должно отображаться наше устройство Cypress FX2LP No EEPROM Device .

Нажимаем кнопку «LoadScript» и выбираем скрипт, который любезно предоставили Analog Devices в месте с программой SigmaStudio, скрипт находится в папке с установленной программой.

После того как выбрали скрипт, нажимаем кнопку «Play script», устройство USB при этом должно автоматически переподключиться.

После переподключения оно уже определится как Analog Devices USBi (programmed), это как раз то устройство которое нам нужно, чтобы его увидела SigmaStudio.

SigmaStudio сигнализирует надписью USB на зеленом фоне что USB подключен, можно программировать и управлять нашим DSP аудиопроцессором.

Второй способ. Автоматический запуск скрипта
ADI_USBi.

Второй способ должен был работать как говорится из коробки при установке драйвера, который находится в каталоге установки SigmaStudio …\Analog Devices\SigmaStudio 4.2\USB drivers\x64\, но почему то не работает видимо из-за устаревшей версии драйвера, не стал с ним разбираться, а полез в документацию по чипу CY7C68013A, а именно документ описывающий загрузочные опции чипа.

Как оказалось есть возможность автоматически выполнять скрипт при подключении USB устройства к компьютеру, нужно только правильно приготовить драйвер, а именно файл *.inf. Микроконтроллер
CY7C68013A из памяти имеет только ОЗУ и загруженная в него программа сбрасывается каждый раз при отключении питания. В первом способе мы загружали программу в ручном режиме, но можно прописать в inf файле идентификаторы VID/PID чтобы USB устройство определялось как
Cypress USB BootLoader и файл inf связывает этот VID/PID для загрузки прошивки из файла скрипта автоматически. Как подготовить inf файл описано в документации Cypress CyUsb3.sys Programmer’s Reference.

В нем есть подробное описание с примерами как нужно подготавливать inf файл. Я исправил inf файл согласно документации и теперь после установки этого драйвера, USB устройство определяется как Cypress USB BootLoader, и как только модуль подключается к компьютеру, в него автоматически загружается скрипт и наше устройство уже определится как Analog Devices USBi (programmed).

Для установки драйвера, нажимаем ПКМ на устройстве и выбираем «Обновить драйвер».

в появившемся окне нажимаем «Выполнить поиск драйверов на этом компьютере»

Через «Обзор» выбираем путь к папке с драйвером

Жмем «Далее», в появившемся окне будет предупреждение, потому что драйвер не имеет подписи, выбираем «Все равно установить этот драйвер»

Если винда попросит перезагрузки, можно отложить. Переподключаем наш USB модуль и вуаля, теперь он определяется сразу как Analog Devices USBi (programmed) без запуска утилиты CyConsole и ручного запуска скрипта.

SigmaStudio сразу же определяет USB устройство корректно.

Третий способ. Специальная прошивка для микроконтроллера.

Если вы заметили то на плате имеется небольшая микросхема в корпусе SOIC-8, это ни что иное как микросхема памяти EEPROM.

Она подключена к микроконтроллеру CY7C68013A по шине I2C. И если посмотреть документацию EZ-USB FX1/FX2LP Boot Options , то там описано что микроконтроллер умеет загружать программу не только по USB но из внешней EEPROM. В эту память можно записать программу которую микроконтроллер загрузит в свою память RAM и начнет сразу же работать согласно инструкций этой программы.

Тут стоит немного вернуться ко второму способу, я в файле inf указал в качестве устройства Cypress USB BootLoader VID и PID которые у платы установлены по-умолчанию, это не страшно если вы больше не будете подключать аналогичные USB устройства на чипе CY7C68013A , в противном случае у вас все аналогичные устройства будут определяться как Analog Devices USBi (programmed). Для решения этой проблемы можно записать во внешнюю EEPROM небольшую программу, а точнее даже не программу, а просто нужные значения VID/PID в конкретные ячейки памяти, к которым в файле inf будет сопоставлено устройство Cypress USB BootLoader. Описание находится в разделе 2.1 C0 Load: Loading USB IDs from I2C Device.

Таблица значений ячеек памяти EEPROM для режима загрузки C0

Обратите внимание, что в ячейке по адресу 0 должно находится значение 0xC0. А что будет делать микроконтроллер если в нулевом адресе будет значение C2? Об этом режиме можно прочитать в разделе 2.2 C2 Load: Loading Firmware from I2C Device. Кратко — при сбросе или при включении питания, если микроконтроллер обнаруживает внешнюю память EEPROM, подключенный к его I2C шине со значением 0xC2 в ячейке памяти по адресу 0, то он загружает прошивку из EEPROM.

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

Для прошивки EEPROM, запускаем утилиту CyConsole, меню «Options» выбираем пункт «EZ-USB Interface»

Убеждаемся, что выбрано наше USB устройство (после предыдущих манипуляций оно у меня определяется как Cypress USB BootLoader, у вас может быть по другому), перемычку на модуле рядом с микросхемой EEPROM нужно установить. Нажимаем кнопку «Lg EEPROM».

Выбираем файл прошивки USBi_prog.iic, ждем окончания загрузки прошивки в EEPROM

Переподключаем USB устройство к компьютеру и видим следующую картину

Что и требовалось доказать.

10
Отправить ответ

avatar
5 Цепочка комментария
5 Ответы по цепочке
3 Последователи
 
Популярнейший комментарий
Цепочка актуального комментария
4 Авторы комментариев
ДмитрийДенисконстантинinstalator Авторы недавних комментариев
Новые вначале Старые вначале По голосам
Денис
Гость
Денис

Спасибо, то что искал как прошить без выпайки микросхемы

Денис
Гость
Денис

Понял как из hex сделать iic. Как вы сделали hex файл?

константин
Гость
константин

Модуль из китая, точ в точ, как на картинке. Но на винде7 определяется не как Cypress FX2LP No EEPROM Device, а неизвестным устройством. и в CyConsole не виден.
что может быть?

константин
Гость
константин

модуль проверил используя pulse view. вроде как общение есть…

Дмитрий
Гость
Дмитрий

При прошивке китайской платы с двумя джамперами USB console выдавала ошибку EEPROM not enabled. Проблема решилась выдергиванием обоих джамперов. Хотя ВОЗМОЖНО достаточно вытащить джампер J2.
Вот так все просто. К сожалению не сразу допер и потратил на решение данного вопроса около двух часов. Надеюсь мой опыт будет комунибудь полезен.