Какие частоты SPI поддерживает Raspberry Pi?


22

Что SPI частоты делает поддержку Raspberry Pi?

Дополнительно:

  • Все ли они поддерживаются драйвером SPI bootc.net ?
  • Есть ли какие-то дополнительные вещи, с которыми я должен быть осторожен при попытке связаться с каким-либо другим чипом через SPI?

Ответы:


21

Raspberry Pi SPI работает на тактовой частоте APB, которая эквивалентна тактовой частоте ядра 250 МГц. Это может быть разделено на любое четное число от 2 до 65536 для желаемой скорости. В спецификации указано, что делитель должен быть степенью двойки, но это неверно . Нечетные числа округляются в меньшую сторону, а 0 (или 1) эквивалентно 65536. Поэтому делитель меньше 2 невозможен.

Это делает диапазон частот от 3,814 кГц до 125 МГц с 32768 шагами между ними.

(По этому вопросу было много дезинформации, но эти результаты были подтверждены экспериментально. Пожалуйста, распространите информацию.)


1
Я думаю, что этот ответ должен быть наверху.
Джон Уотт

вы уверены в этом? Гордон утверждает, что, хотя вы можете кормить его любым четным числом, на самом деле имеют значение только степени двух: Понимание SPI на Raspberry Pi | Проекты Гордонс
scruss

3
Я проверил это с помощью осциллографа. Я думаю, что проблема с Гордоном в том, что он использует драйвер ядра, который ограничивает тактовую частоту, вместо того, чтобы напрямую командовать процессором без использования драйвера ядра.
Nakedible

2
Эта ветка форума предоставляет дополнительную информацию, чтобы доказать ответ Nakedible: raspberrypi.org/phpBB3/…
Nippey

5

SPI может работать на тактовой частоте ядра или делиться на более медленные периферийные устройства. Тактовая частота ядра составляет 250 МГц. Делитель может быть установлен на любую степень двойки - от 2 ^ 0 до 2 ^ 16. Это означает, что поддерживаются частоты SPI от 3,8 кГц до 250 МГц.

Источники:


1
Возможно - Фархад использует источники данных для BCM2835, который является фактическим SoC для RPi, в то время как я ссылаюсь на BCM2708, который является только частью SoC. Источники могут сходиться ... но с другой стороны, они не могут. Поэтому я думаю, что лучше сохранить альтернативные источники на данный момент.
Мария Зверина

1
Да, и в area51 указано, что у нас 1,7 ответа на вопрос, и говорится: «2,5 ответа на вопрос - это хорошо, только 1 ответ на вопрос требует некоторой работы. На здоровом сайте вопросы получают несколько ответов, и лучший ответ оценивается сверху». :-)
Мария Зверина

1
Неверный ответ: 2 ^ 0 не поддерживается, и делитель не должен быть степенью двойки.
Nakedible

1
@Nakedible вы можете предоставить источник для ваших заявлений?
Мария Зверина

1
Лист данных bcm2835 подтверждает точку 2 ^ 0. raspberrypi.org/wp-content/uploads/2012/02/… Это также подтверждается определениями в библиотеке bcm2835. open.com.au/mikem/bcm2835 Что касается непостоянства двух делителей, то в таблице ошибок упоминается, что возможно кратное 2. elinux.org/BCM2835_datasheet_errata Это также было опубликовано на каком-то форуме, что любое кратное 2, кажется, работает. Все это также было подтверждено тестированием вывода SPI на реальном оборудовании. Смотрите мой ответ ниже, который точно определяет это.
Nakedible

4

В спецификации BCM2835 на стр. 120 сказано следующее: Значение тактового регистра блока SPI содержит.

BC Clock Divider SCLK = Core Clock / CDIV Если CDIV установлен на 0, делитель равен 65536. Делитель должен иметь степень 2. Нечетные числа округляются в меньшую сторону. Максимальная тактовая частота SPI равна тактовой частоте APB.

Я не могу найти ссылку на максимальную частоту шины APB, я думаю, что это часть документации ARM11, а не этот SoC.


1
Спасибо за ссылку; Я считаю, что страница 156? Кажется, CDIV имеет ширину 16 байт, поэтому он составляет от 1 до 65536. «Частота ядра» - это, вероятно, 700 МГц? Таким образом, мы получили бы диапазон от ~ 10,7 кГц до загадочного предела APB?
akavel

1
Добро пожаловать, но я боюсь, что эти часы не являются основными часами. Это шина APB: «APB предназначена для контроля доступа с низкой пропускной способностью, например регистровых интерфейсов на периферии системы. Эта шина имеет фазу адреса и данных, аналогичную AHB, но значительно сокращенный список сигналов низкой сложности (например, без пакетов) ). Он должен поддерживать 32-битные и 66 МГц сигналы. "
Фархада

4

Я проверил с, как видно на http://www.brianhensley.net/2012/07/getting-spi-working-on-raspberry-pi.html и изменил скорость.

Максимальная скорость при прохождении теста составляет 15 МГц = 15000 кГц: см. Результат:

spi mode: 0
bits per word: 8
max speed: 15000000 Hz (15000 KHz)

FF FF FF FF FF FF
40 00 00 00 00 95
FF FF FF FF FF FF
FF FF FF FF FF FF
FF FF FF FF FF FF
DE AD BE EF BA AD
F0 0D

Тест на 16 МГц не удался. Андре


1
Мой работал нормально на 32 МГц = 32 000 кГц. Я видел здесь упомянутое, что это практический предел тоже. Я использую последнюю версию прошивки RPi на Raspbian hard float, если это имеет значение.
dodgy_coder

RPI 3 успешно выполнил этот тест на частоте 60 МГц.
Влад
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.