В чем разница между транзакциями SPI на основе прерывания и опроса

У меня есть некоторые сомнения относительно протокола связи SPI. В моей архитектуре есть канал связи SPI между процессором и устройством CPLD. Я хотел записать в один из регистров CPLD.

Я планирую написать CPLd LKM, который будет передавать адрес регистра CPLD и значение ядру spi linux, используя такие вызовы, как spi_sync.

Итак, нужно ли рассматривать процессор как ведущий, а устройство CPLD как ведомое?

Кроме того, хотелось бы знать, что означает транзакция SPI на основе прерывания и опроса и почему транзакция на основе опроса рекомендуется во время загрузки?


person Amit Singh Tomar    schedule 11.05.2014    source источник


Ответы (1)


Итак, нужно ли рассматривать процессор как ведущий, а устройство CPLD как ведомое?

Контроллер SPI, подключенный к ЦП, предположительно будет главным SPI (хотя существуют SoC с контроллерами SPI, которые могут работать либо в ведущем, либо в подчиненном режиме).
Контроллер SPI устройства CPLD будет предположительно будет ведомым устройством SPI (хотя существуют конструкции CPLD, например Xilinx, которые могут быть ведущим устройством SPI).

Примечания:
Иногда контроллер SPI настолько тесно связан со своим устройством, что рассматривается как «устройство SPI», например последовательные микросхемы флэш-памяти SPI (которые могут быть подчиненными).

Кроме того, хотелось бы знать, что означает транзакция SPI на основе прерываний и опросов.

Вы спрашиваете о том, как завершение передачи указывается драйверу SPI. Это взаимодействие между контроллером SPI и его процессором.
В многопроцессорной ОС (например, Linux) драйвер может приостановить поток после того, как он инициировал операцию ввода-вывода (чтение или запись). Прерывание завершения SPI инициирует выполнение ISR SPI, которое затем пробуждает приостановленный поток и позволяет драйверу завершить операцию ввода-вывода.
Если прерывание не генерируется по завершении, то используется метод опроса. альтернатива. Через некоторый интервал времени регистр состояния SPI будет считываться и проверяться на завершение ввода-вывода. В противном случае водителю придется продолжать ждать. Если статус указывал, что передача завершена, то водитель завершал операцию.

Некоторые ведомые устройства SPI могут запросить или потребовать от ведущего устройства SPI выполнить чтение.
Обычно для подчиненного устройства SPI используется механизм ad hoc.
Устройство может иметь выходной сигнал ( обычно называется SPI_IRQ), который можно использовать для запуска прерывания GPIO на хосте. Мне неизвестны какие-либо схемы опроса для замены этого механизма прерывания.

и почему транзакция на основе опроса рекомендуется во время загрузки?

Большинство (или все?) загрузочных программ не поддерживают многопроцессорность. Обычно они ограничены по размеру и, следовательно, обычно являются однопоточными.
Когда инициируется блокирующая операция ввода-вывода, многопроцессорная (или многопоточная) ОС может запланировать выполнение другого процесса или потока и разрешить прерывание, указывающее на завершение операции. операция ввода-вывода.
Но загрузочной программе, вероятно, больше нечего делать во время ожидания прерывания.
Так что обходитесь без настройки прерывания и просто проверяйте состояние в цикле ожидания.

Кстати, «многопроцессорность» означает более одного процесса. Это не имеет ничего общего с мультипроцессорами или многоядерными процессорами.

person sawdust    schedule 12.05.2014
comment
Спасибо @sawdust, когда вы говорите, что контроллер SPI подключен к ЦП и контроллеру SPI на CPLD. Это означает, что на каждое устройство есть отдельные контроллеры? - person Amit Singh Tomar; 12.05.2014
comment
Да, на каждом узле шины SPI будет контроллер SPI. (Только один узел может быть ведущим SPI.) В типичной SoC контроллер (ы) SPI будет отдельным периферийным устройством (устройствами), точно так же, как контроллер UART или USB. Но в упакованном чипе, таком как последовательная флэш-память SPI, мы обычно не утруждаем себя проведением различий между внутренними компонентами целевого устройства. CPLD может попасть в эту категорию, если рассматривать его как блок-бокс с интерфейсом SPI (CLK, CS, MOSI и MISO). - person sawdust; 12.05.2014