Alternativ till Wire-biblioteket för I2C

Jag letar efter (rimligt lättanvänd och väl testad) alternativ till Wire bibliotek. Wire fungerar mycket bra, men: Jag behöver bara Arduino för att fungera som I2C-mästare och Wire -biblioteket verkar vara ett verkligt slöseri med resurser:

Mitt mål är att skicka ut data en block (t.ex. 32 eller 64 byte). Dessa data sitter redan i en array i SRAM. Nu när du använder Wire -biblioteket ringer du till TwoWire::write -funktionen som kopierar dina data till en andra buffert. Därefter använder Wire biblioteket TWI där twi_writeTo kopierar data igen till en 3: e bufferten. Det ”lite klumpigt, är det inte?

Jag har sett DSSCircuits / I2C-Master-Library men jag är inte säker hur mogen det är eftersom det inte har gjorts något åtagande efter det första åtagandet som är 3 år nu.

Kommentarer

  • Har du faktiskt problem med ramanvändning? Att optimera något innan det blir ett problem är ofta en slöseri.
  • Det handlar allt om frågan om att få det att fungera snart och / eller portabelt mot att få det att fungera optimalt . Du är naturligtvis fri att få ATmega-programmeraren ' handbok och skriva till kringutrustningen registrerar dig själv.
  • dsscircuits ' Arduino I2C-huvudbibliotek webbsida visar fem versioner av I2C biblioteket som din github-länk är för. Det är förmodligen en ok utgångspunkt för de ändringar du har i åtanke. Om Wire har haft korrigeringar sedan januari 2012 kanske måste lägga till dem i I2C.
  • > Alternativ till Wire-biblioteket för I2C skriv ditt eget. i2c är ett av de enklare protokollen att skriva från grunden.

Svar

Jag ser ingen invändning att använda DSS Circuits I2C Master Library .

Det kanske inte har uppdaterats på några år, men om det fungerar fungerar det inte ” t behöver vara. Det är inte som om bibliotek för mikrokontroller måste stödja nya skrivardrivrutiner, videodrivrutiner etc.

Om det fungerar fungerar det.

Chipet har inte ändrats. , och den enda verkliga anledningen till uppdateringar i dessa dagar är om IDE ändras (eller kompilatorn ändras) på ett sådant sätt att det introducerar kompileringsfel. Sådana saker har hänt ganska nyligen med till exempel att PROGMEM har stramare regler.

Kommentarer

  • Detta bibliotek såg väldigt lovande ut, men notera att det gör stöder endast AVR-mål. Eftersom Arduino-kärnor har utvecklats för en mängd olika arkitekturer kommer detta bibliotek inte att " bara fungera " för något Arduino-kompatibelt kort. Det är till exempel inte kompatibelt med Adafruit ' s STM32F405-baserade fjäder

Svar

Även Procyon AVR-bibliotek är värt att kontrollera. Det är lite gammalt nu men väldigt professionellt och ganska minimalistiskt. Inte mycket beroende, borde vara bra att bara använda I2C-modulen. Det finns knappast något nytt i AVR I2C-delen sedan.

Svar

Cosa TWI -klassen är ett helt annat sätt att stödja I2C-enhetsdrivrutinen. Det använder inte extra SRAM för buffertar alls. Om en enhetsdrivrutin inte blockerar måste den hantera nödvändig buffring. Cosa TWI-klassen stöder också typisk interaktion med I2C-enheter som master / slave, ”skriv registerläsdata” -mönster och transaktioner vid användning av multitrådning.

Det finns ett Arduino-TWI -bibliotek tillgängligt. Den använder Arduino-GPIO-biblioteket och kan användas på AVR- och SAM-baserade kort.

Några exempel: TWI Scanner , DS3231 Realtidsklocka / kalender , I2C LCD-adapter med PCF8574 .

Svar

Jag gjorde själv två libs för enklare användning och konsekventa samtal:

en för AVR-mål:
cI2C

en annan som använder samma funktioner för alla andra mål (som i grunden är ett omslag för Wire-biblioteket):
WireWrapper

Båda finns i IDE-bibliotekshanteraren.
De fungerar båda som master utan att använda avbrott och testas på olika mål med olika slavar:
– UNO, Nano för cI2C
– Zero, Due & ESP8266 för WireWrapper

Svar

Du kan använda en helt annan metod för den översta frågan.Fråga efter alternativ som du har gett anledning till detta: bli av med oanvänd kod i binären. Du kan uppnå borttagning av oanvänd kod utan att använda alternativt bibliotek. Kom ihåg att du kan instruera kompilatorn och länkaren att utesluta oanvänd kod från den kompilerade binären. Använd bara kompileringsflaggor:

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

Rach-funktionen kommer att finnas i sitt eget avsnitt.

LDFLAGS += -Wl,-gc-sections 

Detta säger till GCC att skicka -gc-sektionsflaggan till länkaren som tar bort oanvända sektioner. Och voilla! Oanvända sektioner tas bort.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *