題:
I2C的Wire庫的替代品
fuenfundachtzig
2015-05-10 01:50:08 UTC
view on stackexchange narkive permalink

我正在尋找(合理易用且經過良好測試的) Wire 庫的替代方案。 Wire 工作得很好,但是:我只需要Arduino充當I2C主設備,而 Wire 庫似乎是對資源的真正浪費:

我的目標是整體發送數據(例如32或64字節)。該數據已經位於SRAM中的陣列中。現在,當您使用 Wire 庫時,您將調用 TwoWire :: write 函數,該函數會將您的數據複製到第二個緩衝區中。之後, Wire 使用 TWI 庫,其中 twi_writeTo 將數據再次復製到第3個緩衝區中。

我看過 DSSCircuits / I2C-Master-Library,但是我不確定它有多成熟,因為還沒有首次提交(現在已經3年)之後的任何提交。

您實際上有使用公羊的問題嗎?在出現問題之前對其進行優化通常是浪費精力。
這全都歸結為想要使其“很快”和/或“便攜式”工作與想要“最佳地”工作的問題。當然,您可以自由獲取ATmega程序員手冊並自行寫到外設寄存器。
dsscircuits的[Arduino I2C主庫](http://www.dsscircuits.com/articles/86-articles/66-arduino-i2c-master-library)網頁顯示了github鏈接用於的I2C庫的五個修訂。對於您所考慮的修訂,這可能是一個不錯的起點。如果Wire自2012年1月以來進行了更正,則可能需要將其添加到I2C。
>編寫I2C的Wire庫的替代方法。 i2c是更容易從頭開始編寫的協議之一。
五 答案:
Nick Gammon
2015-08-22 10:51:40 UTC
view on stackexchange narkive permalink

我不反對使用 DSS Circuits I2C主庫

它可能已經有幾年沒有更新了,但是如果可以,則不會不必是。並不是說微控制器的庫必須支持新的打印機驅動程序,視頻驅動程序等。

如果可以,那就可以。

芯片沒有變,並且這些天更新的唯一真實原因是IDE的更改(或編譯器的更改)是否會導致編譯錯誤。這樣的事情是最近發生的,例如PROGMEM規則更嚴格。

該庫看起來非常有前途,但請注意,它僅支持AVR目標。由於Arduino內核已經針對多種架構開發,因此該庫不適用於任何Arduino兼容板。例如,它與Adafruit的基於STM32F405的羽毛“不兼容”
Mikael Patel
2015-12-20 16:18:30 UTC
view on stackexchange narkive permalink

Cosa TWI類是支持I2C設備驅動程序的非常不同的方法。它根本不使用任何額外的SRAM作為緩衝區。如果設備驅動程序處於非阻塞狀態,則它必須處理必要的緩衝。同樣,Cosa TWI類支持與I2C設備的典型交互,例如使用多線程時的主/從,“寫寄存器讀取數據”模式以及事務。

有一個軟件和硬件 Arduino-TWI庫。它使用Arduino-GPIO庫,並且可以在基於AVR和SAM的板上使用。

一些示例: TWI掃描器 DS3231實時時鐘/日曆具有PCF8574的I2C LCD適配器

Flanker
2016-03-19 21:17:54 UTC
view on stackexchange narkive permalink

Procyon AVR庫也值得檢查。現在有點老了,但是非常專業而且有點簡約。沒有太多的依賴性,僅使用I2C模塊應該很好。從那以後,AVR I2C部分幾乎沒有任何新內容。

SMFSW
2017-03-15 21:58:54 UTC
view on stackexchange narkive permalink

我自己做了2個庫,以便於使用和一致調用:

一個用於AVR目標:
cI2C

另一個使用相同的功能其他所有目標(基本上是Wire庫的包裝):
WireWrapper

IDE庫管理器中都提供了這兩種方法。
它們都可以作為主對象使用無需使用中斷,並在具有不同從設備的不同目標上進行了測試:
-UNO,用於cI2C的Nano
-用於WireWrapper的歸零& ESP8266

Damago
2017-11-22 04:35:41 UTC
view on stackexchange narkive permalink

您可以使用完全不同的方法來回答最重要的問題。在詢問替代方案時,您已經給出了原因:擺脫二進製文件中未使用的代碼。您無需實際使用替代庫就可以刪除未使用的代碼。請記住,您可以指示編譯器和鏈接器從編譯的二進製文件中排除未使用的代碼。只需使用編譯標誌:

  CFLAGS + = -Wl,-staticCFLAGS + = -ffunction-sectionsCFLAGS + = -Wl,-gc-sections  

Rach函數將在其自己的部分中。

  LDFLAGS + = -Wl,-gc-sections  

這告訴GCC將-gc-sections標誌發送給鏈接器,該鏈接器將刪除未使用的部分。瞧!未使用的部分將被刪除。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...