Teraz wiem, że aby mieć zarezerwowany adres I2C, musisz zapłacić ludziom I2C trochę pieniędzy. Ale nie chcę tego robić.
Proszę o poradę, jaki adres powinienem wybrać dla MCU slave i master w moim projekcie. Na płycie będzie również EEPROM. Uniknę więc używania adresu EEPROM. Planuję, aby mistrz podłączył się do szerokiej gamy czujników, w tym żyroskopów i akcelerometrów, i być może dodatkowych urządzeń pamięci. Czy są jakieś bloki adresów, których powinienem unikać? Myślałem o użyciu 0x00 dla master i 0x01 dla slave, ponieważ te wydają się być rzadko używane.
Kolejne pytanie: czy nie byłoby dobrym pomysłem miksowanie urządzeń 10-bitowych i 7-bitowych na tej samej magistrali? Zastanawiałem się, czy moje MCU mogą komunikować się z adresowaniem 10-bitowym, ale używając czujników tylko 7-bitowych adresów.
Odpowiedzi:
Po pierwsze, nie używaj 0x00 i 0x01, są zastrzeżone! Tabela 3 z specyfikacji magistrali I2C zawiera adresy zarezerwowane (i powody):
Powinieneś również unikać 0x00, ponieważ nie ma on żadnych przejść krawędziowych i może być warunkiem błędu (i jest trudny do debugowania).
Poza tym powiedziałbym „Po prostu skonfiguruj”. Jeśli chcesz mieć możliwość podłączenia wielu różnych czujników, możesz zapłacić NXP za adres lub nadać mu regulowane adresy. Modyfikacje oprogramowania powinny być oczywiste, jeśli chcesz rozpowszechniać kod źródłowy. Opcja sprzętowa przełączania jednego lub dwóch bitów wybranego adresu (zworki lutowane na pinach cyfrowych) jest tania i łatwa, a drabinkowa sieć rezystorów ze zworkami podłączonymi do pinu A / D może dać ci pełną kontrolę nad sprzętem.
źródło
Wybierz urządzenie, którego pozytywnie nie będziesz używać w swoim projekcie, i użyj jego adresu I2C. Na przykład, jeśli nie będziesz potrzebować RTC, możesz użyć 0xA2 i 0xA3, które są używane przez NXP PCF8563 (i prawdopodobnie inne RTC).
źródło
Oto lista przydzielonych adresów z 1999 r .: http://www.nxp.com/acrobat_download2/selectionguides/SELGUIDE.PDF
Nie publikują pełnej listy z następującym uzasadnieniem:
Od http://www.nxp.com/products/interface_control/i2c/faq/
Teraz, jeśli wszystko ma być wewnętrzne dla twojego projektu, nie ma powodu, dla którego nie możesz po prostu wybrać dowolnego adresu, o ile chcesz, o ile nie koliduje on z niczym, co planujesz połączyć.
źródło
Jak mówi Kellenjb, nie otrzymasz pełnej listy adresów urządzeń podrzędnych.
Istnieje jednak kilka zarezerwowanych adresów, których nie można użyć (na przykład 0x00 to ogólny adres wywoławczy).
Lista jest tutaj
Mieszanie adresowania 10-bitowego i 7-bitowego jest w porządku, o ile 7-bitowe urządzenia podrzędne przestrzegają standardu I2C i ignorują adresy 10-bitowe.
źródło