ΣSigmaStudio English

Подключение процессоров SigmaDSP к микроконтроллеру

Обзор

В этом руководстве описывается, как интегрировать процессор SigmaDSP в системы на базе микроконтроллеров.

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

Прилагаемый ниже пример кода, совместимый с Arduino, включает простую программу для загрузки процессоров ADAU1701, ADAU1761 или ADAU1467 без каких-либо изменений. Он написан для Teensy 4.0, поэтому назначение выводов следует скорректировать для использования на других платформах. Teensy 4.0 был выбран потому, что он прост в использовании и имеет достаточно памяти для хранения даже самой большой программы SigmaDSP. Версия кода 1.1.0 также протестирована и работает на ESP8266 (с небольшими изменениями, описанными ниже).

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


Версия примера кода 1.1.0: teensy_sigmadsp_example_project_1.1.0.zip

Примечания к версии примера кода 1.1.0
  • В строке 77 файла main.cpp ссылка на SIGMASTUDIOFW.cpp должна быть SigmaStudioFW.h.
  • Строка 250 файла SigmaStudioFW.h — это byte register_value[dataLength] = {};. Для совместимости с ESP8266 она должна быть byte register_value[dataLength];. Это исправление будет включено в следующий выпуск.

Версия примера кода 1.0.0: teensy_sigmadsp_example_project_1.0.0.zip

Каналы связи: I2C и SPI

Все текущие процессоры SigmaDSP оснащены портами управления I2C и SPI. Подключение микроконтроллера к одному из портов управления позволяет загружать программу SigmaDSP, читать/записывать регистры и обновлять параметры программы на лету.

SPI — это самый быстрый протокол для связи между микроконтроллером и процессором SigmaDSP. В зависимости от выбранного SigmaDSP, частота SCLK для SPI может быть установлена до 20 МГц. Для него требуется четыре вывода на вашем микроконтроллере, желательно аппаратный порт SPI; программные реализации SPI возможны, но обычно создают высокую нагрузку на микроконтроллер.

I2C — это более медленный протокол. Большинство процессоров SigmaDSP поддерживают максимальную частоту SCL 400 кГц, хотя процессоры ADAU146x рассчитаны на частоту до 1 МГц. I2C требует два вывода на вашем микроконтроллере, желательно аппаратный порт I2C; программные реализации I2C также создают некоторую нагрузку на микроконтроллер.

Существует множество других причин, по которым либо I2C, либо SPI может быть более подходящим для вашего устройства. Для простоты мы не будем здесь вдаваться в эти причины. Если вы не уверены, что использовать, задайте вопрос на форуме поддержки EngineerZone. Если вы опишете свой проект, мы поможем вам сделать выбор.

В примере кода вы можете переключаться между кодом I2C и SPI, переключая #define USE_SPI в файле USER_SETTINGS.h. Для экономии памяти код для неиспользуемого интерфейса будет исключен компилятором.

Аппаратные подключения

Уровни логических сигналов на вашем микроконтроллере должны соответствовать напряжению питания IOVDD вашего SigmaDSP, либо необходимо использовать преобразователи уровней. Arduino Uno по умолчанию использует логику 5 В, которая напрямую несовместима с процессорами SigmaDSP.
Рекомендуется подключить микроконтроллер к работающей оценочной плате SigmaDSP перед попыткой программирования пользовательской платы и проверить рабочую связь между микроконтроллером и DSP. Это позволит отделить процесс отладки прошивки от процесса отладки аппаратного обеспечения.

Разъем USBi

Все оценочные платы SigmaDSP оснащены 10-контактным разъемом для программирования. Разъем соединяется с программатором USBi (входит в комплект всех оценочных плат) с использованием назначения выводов, показанного здесь. Разъем USBi также является лучшим способом подключения микроконтроллера к вашей оценочной плате.

Разъем USBi

USB_CLK не является обязательным сигналом для плат разработки SigmaDSP, поэтому он обычно оставлен в виде разомкнутой цепи.

Пожалуйста, обратитесь к схемам в Руководстве пользователя вашей оценочной платы, которое можно найти на ее веб-странице продукта, чтобы определить, какие интерфейсы доступны на разъемах. Также обратите внимание, есть ли на вашей оценочной плате подтягивающие резисторы на выводах SCL, SDA и /SS; если их нет, вы должны их добавить.

ADAU1701

Схема EVAL-ADAU1701MINIZ показывает, что на разъеме для программирования доступен только I2C (контакты 1 и 3). Кроме того, на схеме не показаны подтягивающие резисторы I2C, поэтому они должны быть обеспечены вашим собственным аппаратным обеспечением. Разъем также включает контакт сброса (контакт 6) и контакт питания 5 В (контакт 4). В примере кода ADAU1701 упоминается как процессор «Sigma100».

Оценочная плата использует логические уровни 3,3 В. Для сопряжения с микроконтроллерами 1,8 В или 5 В рекомендуются преобразователи уровней.

Контакт питания 5 В (контакт 4) может быть подключен к выводу VUSB вашего микроконтроллера, если доступен достаточный ток. Будьте осторожны, чтобы не превысить общий ток 500 мА от порта USB.

ADAU1701

ADAU1761

ADAU1761 (упоминается как Sigma200) имеет назначение выводов, аналогичное ADAU1701, хотя подтягивающие резисторы I2C уже установлены на плате. Схема оценочной платы доступна здесь.

EVAL-ADAU1761Z также позволяет контакту 4 разъема USBi питать DSP. Опять же, убедитесь, что ваша система потребляет <500 мА от порта USB.

ADAU1761

ADAU145x/ADAU146x

Процессоры ADAU145x и ADAU146x (также называемые Sigma300 и Sigma350 соответственно) предоставляют контакты связи как SPI. Поскольку эти процессоры мультиплексируют интерфейсы SPI и I2C, разъем также может программировать плату через I2C (см. раздел «Пример схемы» для получения дополнительной информации).

Обратите внимание, что контакт 4 разъема USBi зажигает светодиод, но не подает питание на всю плату. Процессоры ADAU145x и ADAU146x должны питаться через разъем для внешнего источника питания (barrel jack).

ADAU145x/ADAU146x

Пример схемы

Приведенная ниже схема на основе микроконтроллера Teensy 4.0 позволяет программировать процессоры SigmaDSP через разъем программирования USBi и использовалась для разработки примера кода. Пожалуйста, нажмите на изображение, чтобы увидеть версию в полном разрешении.

Пример схемы

Последовательные резисторы на 100 Ом предназначены для защиты Teensy от короткого замыкания выводов, а порта USB компьютера — от короткого замыкания на VUSB. Однако, если вы питаете оценочную плату от Teensy, резистор R1 должен быть удален и заменен перемычкой, и необходимо соблюдать осторожность, чтобы в любой момент не потреблять более 500 мА от порта USB компьютера.

Обратите внимание, что соединения SCL и SDA продублированы на разъеме:

  • MISO,SDA присутствует как на контакте 3, так и на контакте 5 разъема.
  • SCLK,SCL присутствует как на контакте 1, так и на контакте 7 разъема.

Это связано с тем, что некоторые платы разработки SigmaDSP подключают интерфейс I2C к USBi (например, ADAU1701), в то время как другие подключают интерфейс SPI (например, ADAU1466). Подключение I2C к контактам 1 и 3 позволяет программировать первые; а включение обоих соединений SPI и I2C позволяет использовать любой протокол для вторых.

То же самое относится и к микроконтроллеру:

  • MISO,SDA присутствует как на контакте 12, так и на контакте 18 Teensy.
  • SCLK,SCL присутствует как на контакте 13, так и на контакте 19 Teensy.

Эта конфигурация соединяет интерфейсы SPI и I2C Teensy друг с другом. Если неиспользуемый интерфейс отключен (переведен в третье состояние) в программном обеспечении, это позволяет Teensy выбирать, какой протокол связи использовать, без изменения аппаратного обеспечения. Эта функция включена в пример программы.

Функция setup() в примере кода подключает ADDR0 и ADDR1 к земле, если USE_SPI установлен в false в USER_SETTINGS.h, помещая DSP Sigma300/Sigma350 по 7-битному I2C адресу 0b0111000.

Рекомендации по самозагрузке

Память микроконтроллера часто ограничена. Настроив процессор SigmaDSP на самозагрузку из внешней EEPROM, можно исключить большую часть программы SigmaDSP из кода вашего микроконтроллера. Однако, прежде чем принимать это решение, следует учесть некоторые соображения и распространенные ошибки:

  • Некоторые процессоры SigmaDSP имеют только один порт I2C, который используется как для управления, так и для самозагрузки, например ADAU1701. I2C разработан для работы с одним ведущим устройством, но во время самозагрузки DSP и микроконтроллер теоретически могут одновременно попытаться захватить управление шиной, что приведет к повреждению данных.
    • Один из способов обойти это — отключить самозагрузку на SigmaDSP и запрограммировать микроконтроллер на передачу содержимого EEPROM в DSP. Таким образом, микроконтроллер будет единственным ведущим устройством I2C на шине.
  • Микроконтроллер не должен пытаться использовать ведомый порт управления, пока DSP выполняет операцию самозагрузки.
    • Вы можете использовать один из выводов GPIO SigmaDSP для сигнала микроконтроллеру о том, что программирование завершено и можно безопасно начинать использовать порт управления.

Обзор включенных файлов

Пример кода разделен на следующие файлы:

  • main.cpp: Основная часть программы, которая инициализирует аппаратные библиотеки и содержит пользовательский поток
  • USER_SETTINGS.h: Пользовательские переменные конфигурации; используйте эту функцию для изменения таких параметров, как тип DSP, протокол связи и скорость передачи SPI/I2C
  • SigmaStudioFW.h: Пользовательские функции для связи с DSP. Этот файл требуется для экспортируемых файлов SigmaStudio.

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

Эти файлы перезаписываются каждый раз при нажатии кнопки «Export System Files» в SigmaStudio, поэтому обязательно фиксируйте любые изменения в другом месте.

Для большинства приложений не требуется изменять эти файлы.

  • your_project_name_IC_1.h: Содержит адреса и значения регистров управления по умолчанию, а также функцию default_download(), используемую для программирования DSP. Функция default_download() выполняет точно такой же процесс, как «Link-Compile-Download» в SigmaStudio.
  • your_project_name_IC_1_PARAM.h: Содержит полезную информацию о параметрах алгоритма.
    • Значения по умолчанию
    • Адреса в RAM
    • На какой странице памяти находится параметр (для ADAU146x)
  • your_project_name_IC_1_REG.h: Содержит информацию, аналогичную файлу _PARAM.h выше, но для регистров управления, а не для параметров алгоритма.

SigmaStudio также экспортирует следующие файлы, которые не используются примером кода.

  • your_project_name.params: Понятное человеку описание каждого параметра в проекте SigmaStudio.
  • your_project_name.hex: Содержит содержимое программной RAM.
  • your_project_name.xml: Другая версия параметров проекта по умолчанию в формате XML.

Журнал изменений примеров кода

1.1.0

  • Изменено имя функции PRINT_DSP_REGISTER на SIGMA_PRINT_REGISTER для согласованности
  • Изменено имя функции SIGMA_READ_REGISTER на SIGMA_READ_REGISTER_BYTES для согласованности
  • SIGMA_PRINT_REGISTER вызывает SIGMA_READ_REGISTER_BYTES вместо двойной реализации связи
  • SIGMASTUDIOTYPE_8_24_CONVERT теперь является псевдонимом для SIGMASTUDIOTYPE_FIXPOINT_CONVERT
  • SIGMASTUDIOTYPE_FIXPOINT_CONVERT переключается на соответствующую реализацию в зависимости от типа DSP (форматы чисел 8.24 или 5.23)
  • SIGMASTUDIOTYPE_INTEGER_CONVERT теперь является сквозным макросом
  • getMemoryDepth теперь находится под переключателем компилятора для удаления из памяти, если I2C не включен
  • Добавлен новый вызов функции для SIGMA_WRITE_REGISTER_BLOCK, который опускает адрес DSP
  • Добавлена функция SIGMASTUDIOTYPE_REGISTER_CONVERT
  • Добавлена функция SIGMA_WRITE_REGISTER_FLOAT
  • Добавлена функция SIGMA_WRITE_REGISTER_INTEGER
  • Добавлена функция SIGMA_READ_REGISTER_FLOAT
  • Добавлена функция SIGMA_READ_REGISTER_INTEGER

1.0.0

Первоначальный выпуск