Alternativy k knihovně Wire pro I2C

Hledám (přiměřeně snadno použitelné a dobře otestované) alternativy k Wire knihovna. Wire funguje velmi dobře, ale: Potřebuji pouze Arduino, aby fungovalo jako mistr I2C, a knihovna Wire se zdá být skutečným plýtváním zdroje:

Mým cílem je rozesílat data en bloc (např. 32 nebo 64 bajtů). Tato data již sedí v poli v SRAM. Když nyní použijete knihovnu Wire, zavoláte funkci TwoWire::write, která zkopíruje vaše data do 2. vyrovnávací paměti. Poté Wire využívá knihovnu TWI, kde twi_writeTo zkopíruje data znovu do 3. vyrovnávací paměť. To „je trochu neohrabané, že?“

Viděl jsem DSSCircuits / I2C-Master-Library , ale nejsem si jistý jak je vyzrálé, protože po počátečním odevzdání, které je nyní staré 3 roky, nedošlo k žádnému potvrzení.

Komentáře

  • Opravdu máte problémy s používáním RAM? Optimalizace něčeho dříve, než se z něj stane problém, je často zbytečné úsilí.
  • Všechno spadá do otázky, že to bude chtít fungovat brzy a / nebo přenosně vs chtějí, aby to fungovalo optimálně . Samozřejmě můžete získat příručku k programátoru ATmega ' a psát na periferní zařízení zaregistrujte se.
  • dsscircuits ' hlavní knihovna Arduino I2C zobrazuje pět revizí I2C knihovna, pro kterou je váš odkaz na github určen. Pravděpodobně je to dobrý výchozí bod pro revize, které máte na mysli. Pokud má Wire opravy od ledna 2012, můžete je třeba přidat do I2C.
  • > Alternativy k knihovně Wire pro I2C napište vlastní. i2c je jedním z nejjednodušších protokolů pro psaní od začátku.

Odpověď

Nevidím žádnou námitku k používání Hlavní knihovny I2C obvodů DSS .

Je možné, že již několik let nebyl aktualizován, ale pokud to funguje, ne “ nemusím být. Není to tak, že by knihovny pro mikrokontroléry musely podporovat nové ovladače tiskáren, ovladače videa atd.

Pokud to funguje, funguje to.

Čip se nezměnil a jediným skutečným důvodem pro aktualizace v těchto dnech je, pokud se IDE změní (nebo změní kompilátor) takovým způsobem, že zavádí chyby kompilace. Takové věci se staly poměrně nedávno, například věci jako PROGMEM mají přísnější pravidla.

Komentáře

  • Tato knihovna vypadala velmi slibně, ale všimněte si, že ano podporují pouze cíle AVR. Jelikož jádra Arduina byla vyvinuta pro různé architektury, nebude tato knihovna " fungovat " pro žádnou desku kompatibilní s Arduino. Například není kompatibilní s Adafruit ' s peřím založeným na STM32F405

odpověď

Za kontrolu stojí také knihovna Procyon AVR . Je teď trochu starý, ale velmi profesionální a trochu minimalistický. Není mnoho závislostí, mělo by být v pořádku používat pouze pouze modul I2C. Od té doby není v části AVR I2C nic nového.

Odpověď

Třída Cosa TWI představuje velmi odlišný přístup k podpoře ovladačů zařízení I2C. Pro vyrovnávací paměti vůbec nepoužívá žádné další SRAM. Pokud ovladač zařízení neblokuje, musí zvládnout potřebné ukládání do vyrovnávací paměti. Třída Cosa TWI také podporuje typickou interakci se zařízeními I2C, jako jsou master / slave, „write register-read data“ -patterns, a transakce při použití více vláken.

K dispozici je softwarová a hardwarová knihovna Arduino-TWI . Využívá knihovnu Arduino-GPIO a lze ji použít na deskách založených na AVR a SAM.

Některé příklady: TWI Scanner , Hodiny / kalendář v reálném čase DS3231 , I2C LCD adaptér s PCF8574 .

Odpověď

2 libs jsem vytvořil sám pro snazší použití a konzistentní volání:

jeden pro AVR cíle:
cI2C

další používající stejné funkce pro všechny ostatní cíle (což je v zásadě obal pro knihovnu Wire):
WireWrapper

Oba jsou k dispozici ve správci knihoven IDE.
Oba fungují jako hlavní bez použití přerušení a jsou testovány na různých cílech s různými podřízenými:
– UNO, Nano pro cI2C
– nula, splatné & ESP8266 pro WireWrapper

odpověď

K hlavní otázce můžete použít zcela odlišný přístup.Zeptáte-li se na alternativy, které jste k tomu uvedli, zbavte se nepoužívaného kódu v binárním souboru. Odstranění nepoužitého kódu můžete dosáhnout bez použití alternativní knihovny. Mějte na paměti, že můžete instruovat kompilátor a linker, aby vyloučili nepoužitý kód z kompilovaného binárního souboru. Stačí použít příznaky kompilace:

CFLAGS += -Wl,-static CFLAGS += -ffunction-sections CFLAGS += -Wl,--gc-sections 

Funkce Rach bude ve vlastní sekci.

LDFLAGS += -Wl,-gc-sections 

To říká GCC, aby odeslal příznak -gc-oddíly linkeru, který odstraní nepoužívané sekce. A voilla! Nepoužité sekce jsou odstraněny.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *