Alternatieven voor Wire-bibliotheek voor I2C

Ik ben op zoek naar (redelijk eenvoudig te gebruiken en goed geteste) alternatieven voor de Wire bibliotheek. Wire werkt erg goed, maar: ik heb alleen de Arduino nodig om als I2C-master te fungeren en de Wire -bibliotheek lijkt een echte verspilling van bronnen:

Mijn doel is om gegevens en bloc te verzenden (bijv. 32 of 64 bytes). Deze gegevens zitten al in een array in SRAM. Als je nu de Wire -bibliotheek gebruikt, roep je de TwoWire::write -functie aan die je gegevens naar een 2e buffer kopieert. Daarna maakt Wire gebruik van de TWI bibliotheek waarin twi_writeTo de gegevens opnieuw kopieert naar een 3e buffer. Dat is toch een beetje onhandig, nietwaar?

Ik heb de DSSCircuits / I2C-Master-Library gezien, maar ik weet het niet zeker hoe volwassen het is omdat er “geen commit is geweest na de initiële commit die nu 3 jaar oud is.

Reacties

  • Heb je werkelijk ram gebruik problemen? Iets optimaliseren voordat het een probleem wordt, is vaak een verspilde moeite.
  • Het komt allemaal neer op de vraag of je het snel en / of draagbaar versus het optimaal willen laten werken. Het staat je natuurlijk vrij om de ' handleiding van de ATmega-programmeur te downloaden en naar het randapparaat te schrijven registreert uzelf.
  • dsscircuits ' Arduino I2C-masterbibliotheek webpagina toont vijf herzieningen van de I2C bibliotheek waar je github-link voor is. Het is waarschijnlijk een prima startpunt voor de revisies die je in gedachten hebt. Als Wire correcties heeft ondergaan sinds jan. 2012, zou je moet u ze aan I2C toevoegen.
  • > Alternatieven voor Wire-bibliotheek voor I2C, schrijf uw eigen. i2c is een van de gemakkelijkere protocollen om helemaal opnieuw te schrijven.

Answer

Ik zie geen bezwaar om DSS Circuits I2C Master Library te gebruiken.

Het is misschien al een paar jaar niet bijgewerkt, maar als het werkt, doet het dat niet ” t hoeft te zijn. Het is niet zo dat bibliotheken voor microcontrollers nieuwe printerstuurprogrammas, videostuurprogrammas, enz. Moeten ondersteunen.

Als het werkt, werkt het.

De chip is niet veranderd , en de enige echte reden voor updates tegenwoordig is als de IDE verandert (of de compiler verandert) op zon manier dat het compileerfouten introduceert. Zulke dingen zijn vrij recent gebeurd met zaken als PROGMEM met strengere regels, bijvoorbeeld.

Opmerkingen

  • Deze bibliotheek zag er veelbelovend uit, maar merk op dat het zo is ondersteunen alleen AVR-doelen. Aangezien Arduino-cores zijn ontwikkeld voor een verscheidenheid aan architecturen, zal deze bibliotheek niet " alleen " werken voor elk Arduino-compatibel bord. Het is bijvoorbeeld niet compatibel met Adafruit ' s op STM32F405 gebaseerde Feather

Antwoord

Ook Procyon AVR-bibliotheek het bekijken waard. Het is nu een beetje oud, maar erg professioneel en nogal minimalistisch. Niet veel afhankelijkheden, het zou prima moeten zijn om alleen de I2C-module te gebruiken. Sindsdien is er nauwelijks iets nieuws in AVR I2C.

Antwoord

Cosa TWI -klasse is een heel andere benadering van I2C-apparaatstuurprogramma-ondersteuning. Het gebruikt helemaal geen extra SRAM voor buffers. Als een apparaatstuurprogramma niet blokkeert, moet het de nodige buffering verwerken. Ook ondersteunt de Cosa TWI-klasse typische interactie met I2C-apparaten zoals master / slave, “schrijf register-lees data” -patronen en transacties bij gebruik van multi-threading.

Er is een software en hardware Arduino-TWI -bibliotheek beschikbaar. Het maakt gebruik van de Arduino-GPIO-bibliotheek en kan worden gebruikt op AVR- en SAM-gebaseerde kaarten.

Enkele voorbeelden: TWI-scanner , DS3231 Real-Time klok / kalender , I2C LCD-adapter met PCF8574 .

Answer

Ik heb zelf 2 libs gemaakt voor eenvoudiger gebruik en consistente oproepen:

een voor AVR-doelen:
cI2C

een ander gebruikt dezelfde functies voor alle andere doelen (wat in feite een wrapper is voor de Wire-bibliotheek):
WireWrapper

Beide zijn beschikbaar in de IDE-bibliotheekbeheerder.
Ze werken allebei als master zonder interrupt te gebruiken en worden getest op verschillende doelen met verschillende slaves:
– UNO, Nano voor cI2C
– Zero, Due & ESP8266 voor WireWrapper

Antwoord

U kunt een geheel andere benadering van de bovenste vraag gebruiken.Bij het vragen naar alternatieven heb je hiervoor reden gegeven: het verwijderen van ongebruikte code in het binaire bestand. U kunt ongebruikte code verwijderen zonder daadwerkelijk een alternatieve bibliotheek te gebruiken. Houd er rekening mee dat u de compiler en linker kunt instrueren om ongebruikte code uit het gecompileerde binaire bestand uit te sluiten. Gebruik gewoon compilatievlaggen:

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

De Rach-functie zal in zijn eigen sectie staan.

LDFLAGS += -Wl,-gc-sections 

Dit vertelt GCC om de vlag -gc-secties naar de linker te sturen, die ongebruikte secties zal verwijderen. En voilla! Ongebruikte secties worden verwijderd.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *