Otázka:
Jakou přenosovou rychlost mohu získat ze sběrnice i2c?
user7015
2015-04-08 10:20:29 UTC
view on stackexchange narkive permalink

Stručně řečeno, jaký je maximální datový tok, kterého lze dosáhnout zápisem na sběrnici I2C z Raspberry Pi? Mělo by to být teoretické maximum 100 kB / s?

Podrobněji píšu na sběrnici I2C z mého Pi a posílá zprávy na 10 mikrokontrolérů PWM, každý se 16 kanály. (Model je Adafruit's PCA9685).

Chtěl bych být schopen aktualizovat tyto registry na něco jako 10-20Hz. Každý kanál má dvoubajtový registr, takže naivně bych očekával, že se bude rovnat 16 * 10 * 20 = 3,2 kB / s. To je v rámci limitu protokolu 100 kB / s.

Když se však pokusím řídit tyto mikrokontroléry ze skriptu Pythonu běžícího na mém Pi, jsem schopen dosáhnout pouze frekvence aktualizace 2 Hz; Vytvořil jsem profil kódu a většinu času jsem strávil v knihovně, která skutečně volá zařízení / dev / i2c *.

Zajímalo by mě, jestli existuje omezení hardwaru nebo ovladače, které omezuje bitrate?

Používám model 1. generace B, Raspbian verze 2015-02-16.

Jen poznámka, jsem si docela jistý, že byste měli být schopni získat větší bitrate přes SPI. Mikrokontrolér by také měl být omezovačem na I2C ... ne malinovou pí.
Měli byste to zkusit `strace`; pokud používáte knihovnu `smbus`, může to napínat hranice toho, k čemu je určena (to, co děláte, zní spíš jako by to vyžadovalo vlastní ovladač jádra, nebo něco, co obchází jádro pomocí` mmap`, např. elektroinstalace Pi). Obecná knihovna smbus bude dělat systémové volání pro každý zápis.
Rychlost sběrnice I2C je uvedena v bitech za sekundu (bps). Výchozí rychlost Pi I2C je 100 kb / s NE 100 kb / s.
Dva odpovědi:
joan
2015-04-08 12:39:03 UTC
view on stackexchange narkive permalink

Hodiny I2C b / s (bitů za sekundu) lze nastavit mezi 125 Mb / s a ​​3826 b / s (hodiny jádra 250 MHz s rovnoměrným rozdělovačem mezi 2 a 65536). BCM2835 ARM Peripherals strany 28-36.

V praxi je nepravděpodobné, že by rychlost vyšší než 30 Mb / s fungovala.

Maximální počet b / s, jaké jsem slyšel of je 3,4 Mb / s, ale nepamatuji si žádné nabízené důkazy.

Přenosové rychlosti 400 kb / s (jakýsi standard) a 1 Mb / s jsou běžné.

Pokud nepoužíváte strom zařízení (u nedávného jádra je to nepravděpodobné), použijte

  sudo modprobe i2c_bcm2708 baudrate = xxx  

k nastavení rychlosti.

Se stromem zařízení použijte následující položky v /boot/config.txt

dtparam=i2c1=ondtparam=i2c_arm_baudrate=xxx

U ovladače SPI pro linuxové jádro je limitujícím faktorem propustnosti počet volání SPI za sekundu (zhruba 20 000). Nevím, zda má ovladač I2C pro linuxové jádro stejný problém.

Neviděl jsem tolik zařízení I2c, která jsou schopna zpracovávat rychlosti 1 Mb / s ... 400 kHz, je však běžnější ... Nejrychlejší aktuálně zadaná rychlost je „ultrarychlý režim“, tedy 5 Mb / s. Ale to je jen jednosměrné. 3,4 Mb / s, známý jako vysokorychlostní režim, je stále obousměrný. Viz tento odkaz: http://www.nxp.com/documents/user_manual/UM10204.pdf
Užitečný odkaz. Zdá se, že si pamatuji, že skutečným zabijákem rychlosti je čas potřebný k tomu, aby se linky zvedly na logiku 1 prostřednictvím pull-up rezistoru.
Ano, máte pravdu. Omezovačem jsou ve skutečnosti vytahovací rezistory v kombinaci s kapacitou vedení.
Rob Starling
2017-11-18 10:14:17 UTC
view on stackexchange narkive permalink

Nezapomeňte, že datový tok linky není stejný jako propustnost. Kromě 16 datových bitů musíte počítat s adresováním, potvrzením a časem start / stop na drátu. Konzervativně bych za to dělil dvěma.



Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 3.0, pod kterou je distribuován.
Loading...