Возникла проблема:
Есть плата с контроллером STM32F437ZGT6. На этой же плате находятся два цапа DAC8581 с интерфейсом SPI, на которые нужно слать 16-битные данные с частотой примерно 2,3МГц. Каждый ЦАП подключен к своему каналу SPI, данные загружаются в SPI посредством DMA.
Чтобы ЦАП принимал данные, в начале каждого сеанса связи ему нужно дергать ногой /CS.
Соответственно, исходя из скорости обмена, это нужно делать аппаратно.
Но выяснилось, что в режиме мастера SPI дергает этой ногой только один раз, а потом держит этот вывод в активном состоянии до отключения интерфейса.
И единственный режим, когда SPI правильно дергает ногой NSS, - это так называемый TI mode. Но есть одна проблема - в этом режиме невозможно изменить полярность и фазу тактовых импульсов.
И оказалось, что несмотря на то, что режим называется TI mode, полярность импульсов у него строго противоположна полярности импульсов, требуемых ЦАПу, который родом из Техаса.
Тактовая частота интерфейса установлена 42МГц, т.е. близка к максимально возможной.
Если тактовые импульсы чуть задержать, например с помощью конденсатора, то интерфейс работает нормально. Но такое решение является нестабильным и температурно-зависимым, так как работа интерфейса зависит от скорости нарастания двух фронтов, данных и тактов.
Если инвертировать сигнал SCK с помощью внешнего быстрого логического инвертора, то интерфейс работает нормально на этой частоте.
Вопросы: Есть ли какой нибудь способ обойтись без внешнего инвертора? Может быть я чего то недопонял в настройках интерфейса? Есть у кого положительный опыт аппаратного управления NSS?