Программная реализация SPI

Я думаю о создании собственной библиотеки SPI для программного обеспечения на чистом C, потому что ее нет (насколько я могу судить).

Что меня также беспокоит - почему нет программных библиотек SPI? Есть ли какое-то аппаратное ограничение, которое я не рассматриваю?

РЕДАКТИРОВАТЬ:

Я решил написать свою собственную библиотеку из-за того, насколько глючным является периферийное устройство SPI в STM32. Особенно в 8-битный режим, но у меня также был много проблем с 16-битным режимом. Многие другие проблемы я даже не удосужился задокументировать.

Теперь я написал программную реализацию (это довольно просто) и работает отлично.


person andrey    schedule 24.02.2015    source источник
comment
Вероятно, существуют существуют программные библиотеки SPI.   -  person user253751    schedule 24.02.2015
comment
Я полагаю, что немногие люди когда-либо будут нуждаться в нем, учитывая, что все устройства STM32 имеют богатый выбор аппаратных периферийных устройств SPI, каждое из которых имеет переназначаемые контакты, поддерживает DMA и прерывания и может работать с пропускной способностью HCLK. /2.   -  person Andy Brown    schedule 26.02.2015
comment
@AndyBrown Добавил аргументы в пользу написания собственной реализации программного обеспечения.   -  person andrey    schedule 27.02.2015
comment
Учитывая, что SPI является таким распространенным периферийным устройством, вы можете подумать, что STM сделает это правильно, с ним действительно есть проблемы, особенно с выбором ведомого оборудования / программного обеспечения и их неоднозначной документацией вокруг него.   -  person Ospho    schedule 17.03.2015


Ответы (3)


почему нет программных библиотек SPI?

Потому что это около 10 строк кода для функций WriteByte и ReadByte, и большая часть из них — битовые биты регистров, специфичных для процессора. Протокол более высокого уровня зависит от устройства, подключенного к SPI. Вот что Википедия говорит по этому вопросу

Шина SPI является стандартом де-факто. Однако отсутствие формального стандарта отражается в большом разнообразии вариантов протокола. Распространены разные размеры слов. Каждое устройство определяет свой собственный протокол, включая то, поддерживает ли оно команды вообще. Некоторые устройства предназначены только для передачи; другие только для приема. Выбор чипа иногда бывает активным-высоким, а не активным-низким. Некоторые протоколы передают младший значащий бит первым.

Так что нет смысла делать библиотеку. Вы просто пишете код для каждой конкретной ситуации и комбинации устройств.

person user3386109    schedule 24.02.2015

Хотя другие ответили, что its just bitbanging; Я бы сказал, что есть смысл написать маленький слой:

  • Если вы не используете HAL или стандартные библиотеки (как я), вы можете написать слой для обработки инициализации, который может выполнять действия в соответствии с последовательностью инициализации чипа.
  • Вы можете сопоставить все ваши векторы прерывания для определенного периферийного устройства на этом уровне, используя механизмы обратного вызова.
  • Создайте разделение между доменами приложения и системы, что является основным принципом модульного проектирования.
  • Увеличение возможности повторного использования кода с использованием таких методов, как указатели на функции и общие интерфейсы.
  • Добавьте проверку ввода для настроек/параметров, которая в противном случае могла бы вызвать дублирование кода, если бы слой не использовался. Например, убедиться, что HCLK не превышает 180 МГц на stm32f429 при его инициализации.

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

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

person Ospho    schedule 17.03.2015

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

например Для архитектуры 8051 вы можете найти это.

person Vagish    schedule 24.02.2015