2015-02-24 3 views
0

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

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

EDIT:

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

Я сейчас написал программное обеспечение (это довольно легко), и в работах просто отлично.

+0

Вероятно, есть * программные библиотеки SPI. – immibis

+0

Я бы предположил, что мало кому когда-либо понадобится один, учитывая, что все устройства STM32 имеют богатый выбор периферийных устройств _hardware_ SPI, причем каждый из них имеет возможность переназначения контактов, поддерживает DMA и прерывания и может работать с пропускной способностью HCLK/2. –

+0

@ AndyBrown Добавил мои аргументы в пользу написания моей собственной программной реализации. –

ответ

2

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

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

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

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

0

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

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

1

Хотя другие ответили, что its just bitbanging; Я считаю, что есть благо для написания небольших слоя:

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

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

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

Смежные вопросы