Какой битрейт можно получить с шины i2c?

Короче говоря, каков максимальный битрейт, который может быть достигнут при записи на шину I2C от Raspberry Pi? Должен ли быть теоретический максимум 100 КБ /с?

Более подробно я пишу на шину I2C из своего Pi, отправляя сообщения на 10 микропроцессоров PWM, каждый из которых имеет 16 каналов. (Модель PCA9685 от Adafruit ).

Я хотел бы иметь возможность обновлять эти регистры примерно на 10-20 Гц. Каждый канал имеет 2-байтовый регистр, поэтому наивно ожидаю, что он будет равен 16 * 10 * 20 = 3,2 КБ /с. Это хорошо в пределах протокола 100KB /s.

Однако, когда я пытаюсь управлять этими микроконтроллерами из сценария Python, работающего на моем Pi, я могу только получить частоту обновления 2 Гц; Я профилировал код и большую часть времени провел в библиотеке, которая фактически вызывается на устройство /dev /i2c *.

Мне интересно, есть ли ограничение на аппаратное обеспечение или драйвер, ограничивающее битрейт?

Я использую модель B первого поколения, версию Raspbian 2015-02-16.

i2c
5 голосов | спросил user7015 8 AMpWed, 08 Apr 2015 08:20:28 +030020Wednesday 2015, 08:20:28

2 ответа


5

Частота бит I2C (бит в секунду) может быть установлена ​​между 125 Мбит /с и 3826 бит /с (с частотой ядра 250 МГц с четным делителем между 2 и 65536). BCM2835 ARM Peripherals страницы 28-36.

На практике скорость выше 30 Мбит /с вряд ли будет работать.

Максимальные бит, о которых я слышал, составляют 3,4 Мбит /с, но я не помню никаких доказательств.

Обычные частоты бит 400 кбит /с (своего рода стандарт) и 1 Мбит /с.

Если вы не используете дерево устройств (маловероятно с недавним ядром), используйте

sudo modprobe i2c_bcm2708 baudrate=xxx

, чтобы установить скорость.

В дереве устройств используйте следующие записи в /boot/config.txt

dtparam=i2c1=on
dtparam=i2c_arm_baudrate=xxx

С драйвером SPI для Linux-ядра предельным коэффициентом пропускной способности является количество вызовов SPI, которые вы можете сделать в секунду (примерно 20 тыс.). Я не знаю, имеет ли драйвер ядра I2C Linux ту же проблему.

ответил joan 8 AMpWed, 08 Apr 2015 10:39:03 +030039Wednesday 2015, 10:39:03
0

Не забывайте, что битрейт линии не совпадает с пропускной способностью. В дополнение к 16 битам данных вам необходимо учитывать адресацию, подтверждение и время запуска /останова на проводе. Консервативно, я бы разделил на два для этого.

ответил Rob Starling 18 62017vEurope/Moscow11bEurope/MoscowSat, 18 Nov 2017 07:14:16 +0300 2017, 07:14:16

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132