Интерфейс RaspberryPi и периферийного SPI с использованием python

#python #raspberry-pi #spi

#python #raspberry-pi #spi

Вопрос:

Это мой первый проект, который включает параллельное программирование, поэтому простите меня, если я не использую правильную терминологию.

Я хочу подключить RaspberryPi 4 к периферийной плате, используя последовательный интерфейс SPI. Чтобы полностью понять последовательную связь, я хочу закодировать связь SPI без использования внешней библиотеки. Цель программы — отправлять данные на периферийное устройство и считывать с него данные, одновременно отображая полученные данные «в режиме реального времени». Чтобы легко управлять связью, мне нужно запустить поток, который будет генерировать сигналы sclk и chip select, и другой поток, который будет считывать / записывать данные и отображать их.

Мой вопрос: учитывая, что я буду использовать частоту sclk около 1 МГц, является ли проблемой то, что я выполняю потоковые функции вместо того, чтобы делать их действительно параллельными (используя многопроцессорную обработку)?

Я бы сказал, что тактовая частота Rpi4 намного выше, чем частота sclk, поэтому задержка по времени из-за «поддельного» параллелизма не является проблемой (учитывая тот факт, что все потоки состоят из нескольких инструкций), но я хочу знать, есть ли другие факторы, которые следует учитывать. Спасибо!

Ответ №1:

Вам абсолютно не нужны отдельные потоки, генерирующие часы и данные. Это ПОСЛЕДОВАТЕЛЬНЫЙ протокол, поэтому эти две вещи должны быть синхронными. Число 1 МГц — это всего лишь максимальный предел. Часы не обязательно должны быть точными и не обязательно регулярными. Вы, как мастер, полностью контролируете это. Все основано на переходах. В этом порядке вы устанавливаете выходной вывод, утверждаете часы, считываете входной вывод, отключаете часы, промываете и повторяете. Одна функция, простая, как пирог. Возможно, вам потребуется добавить несколько остановок, если этот процесс занимает менее микросекунды.

Комментарии:

1. Спасибо! Прочитав ваш ответ, я понял, что это была проблема из-за моего не очень умного дизайна, ахахах. Я не учел тот факт, что sclk не обязательно должен быть ровно 1 МГц. Еще раз спасибо.