Содержание
Подключение процессоров 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. Для экономии памяти код для неиспользуемого интерфейса будет исключен компилятором.
Аппаратные подключения
Разъем USBi
Все оценочные платы SigmaDSP оснащены 10-контактным разъемом для программирования. Разъем соединяется с программатором 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.
ADAU1761
ADAU1761 (упоминается как Sigma200) имеет назначение выводов, аналогичное ADAU1701, хотя подтягивающие резисторы I2C уже установлены на плате. Схема оценочной платы доступна здесь.
EVAL-ADAU1761Z также позволяет контакту 4 разъема USBi питать DSP. Опять же, убедитесь, что ваша система потребляет <500 мА от порта USB.
ADAU145x/ADAU146x
Процессоры ADAU145x и ADAU146x (также называемые Sigma300 и Sigma350 соответственно) предоставляют контакты связи как SPI. Поскольку эти процессоры мультиплексируют интерфейсы SPI и I2C, разъем также может программировать плату через I2C (см. раздел «Пример схемы» для получения дополнительной информации).
Обратите внимание, что контакт 4 разъема USBi зажигает светодиод, но не подает питание на всю плату. Процессоры ADAU145x и ADAU146x должны питаться через разъем для внешнего источника питания (barrel jack).
Пример схемы
Приведенная ниже схема на основе микроконтроллера Teensy 4.0 позволяет программировать процессоры SigmaDSP через разъем программирования USBi и использовалась для разработки примера кода. Пожалуйста, нажмите на изображение, чтобы увидеть версию в полном разрешении.
Обратите внимание, что соединения 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 выбирать, какой протокол связи использовать, без изменения аппаратного обеспечения. Эта функция включена в пример программы.
Рекомендации по самозагрузке
Память микроконтроллера часто ограничена. Настроив процессор SigmaDSP на самозагрузку из внешней EEPROM, можно исключить большую часть программы SigmaDSP из кода вашего микроконтроллера. Однако, прежде чем принимать это решение, следует учесть некоторые соображения и распространенные ошибки:
- Некоторые процессоры SigmaDSP имеют только один порт I2C, который используется как для управления, так и для самозагрузки, например ADAU1701. I2C разработан для работы с одним ведущим устройством, но во время самозагрузки DSP и микроконтроллер теоретически могут одновременно попытаться захватить управление шиной, что приведет к повреждению данных.
- Один из способов обойти это — отключить самозагрузку на SigmaDSP и запрограммировать микроконтроллер на передачу содержимого EEPROM в DSP. Таким образом, микроконтроллер будет единственным ведущим устройством I2C на шине.
- Микроконтроллер не должен пытаться использовать ведомый порт управления, пока DSP выполняет операцию самозагрузки.
- Вы можете использовать один из выводов GPIO SigmaDSP для сигнала микроконтроллеру о том, что программирование завершено и можно безопасно начинать использовать порт управления.
Навигация по примеру кода
Обзор включенных файлов
Пример кода разделен на следующие файлы:
main.cpp: Основная часть программы, которая инициализирует аппаратные библиотеки и содержит пользовательский потокUSER_SETTINGS.h: Пользовательские переменные конфигурации; используйте эту функцию для изменения таких параметров, как тип DSP, протокол связи и скорость передачи SPI/I2CSigmaStudioFW.h: Пользовательские функции для связи с DSP. Этот файл требуется для экспортируемых файлов SigmaStudio.
Пример кода требует некоторые файлы, экспортированные SigmaStudio, которые описывают содержимое проекта 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_CONVERTSIGMASTUDIOTYPE_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
Первоначальный выпуск




