Jaki adres I2C powinienem wybrać?

16

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.

Thomas O
źródło
1
@ W5VO. Tak, tuż obok karty SD ludzie chcą tylko 3000 $.
Thomas O
1
@ThomasO, nie musisz płacić im, aby otrzymać zarezerwowany adres, np. Identyfikator, nie musisz płacić za to, aby zrobić urządzenie, sprzedają usługę. Karty SD egzekwują swoją własność intelektualną, mogą powiedzieć ci, aby to zrobić lub wybrać inną technologię.
Kortuk
1
@ThomasO, stwierdziłem, że w tym przypadku jest coś, za co płacisz. Dwa tysiące to niewiele w prawdziwym produkcie.
Kortuk,
1
@Thomas 3000 USD jest w rzeczywistości bardzo rozsądny dla produktów. To kropla w koszyku dla każdej firmy produkującej produkty.
Kellenjb,
2
@reemrevnivek, ale właściciel patentu zdecydował, że wolałby tego wymagać i spowodować, że otwarty sprzęt nie będzie mógł korzystać z niego, i będzie musiał uiścić tę opłatę. jako posiadacz patentu mają to prawo. Dopóki prawa się nie zmienią, upewnię się, że to jasne. Chciałbym dokonać przeglądu patentów i praw autorskich, ale dopóki nie będą, w ten sposób inżynierowie, którzy mają dobre pomysły, są chronieni i nagradzani.
Kortuk

Odpowiedzi:

13

Po pierwsze, nie używaj 0x00 i 0x01, są zastrzeżone! Tabela 3 z specyfikacji magistrali I2C zawiera adresy zarezerwowane (i powody):

Adres podrzędny R / W Opis
 0000 000 0 Ogólny adres wywoławczy
 0000 000 1 bajt START
 0000 001 X Adres CBUS
 0000 010 X Zarezerwowany dla innego formatu magistrali
 0000 011 X Zarezerwowany do przyszłych celów
 0000 1XX X Kod główny trybu HS
 1111 1XX 1 Identyfikator urządzenia
 1111 0XX X 10-bitowe adresowanie podrzędne

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.

Kevin Vermeer
źródło
1
+1 za konfigurowalny adres. Widziałem to u niewolników, którzy będą mieli kilka takich samych rzeczy w tym samym autobusie.
Kellenjb,
Tak, myślałem o konfigurowalnych adresach. Można go zaktualizować, zmieniając ustawienia z systemu menu. Jedną ważną rzeczą jest to, że należy dodać zabezpieczenia, aby zapobiec zmianie adresu i master MCU utracie komunikacji z urządzeniem slave, dlatego należy ustanowić pewien rodzaj protokołu, który resetuje adresy (np. Po 5 sekundach nie ma komunikacji, więc zresetuj adres .)
Thomas O
16

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).

stevenvh
źródło
lubię to, bardzo sprytnie.
NickHalden
Niestety niektóre urządzenia nadal się kolidują, na przykład ST STCN75 i TI DAC8571 lub Microchip 24AA025E48 i TI ADC121C027 .
Xcodo
10

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:

P: Czy można otrzymać listę wszystkich dotychczas używanych adresów slave I²C?

Odp .: Nie. Półprzewodniki NXP nie wystawiają tej listy wszystkich wcześniej przypisanych adresów urządzeń podrzędnych, ponieważ jest to jedyny sposób, w jaki możemy zagwarantować, że lista jest aktualna, a każdy przypisany adres jest unikalny. Gdyby ta lista była dostępna, licencjobiorcy magistrali I²C zaczęliby samodzielnie wybierać adresy podrzędne, a lista centralna wkrótce stałaby się niekompletna, co mogłoby prowadzić do konfliktów adresów. Ustalona zasada, która sprawdziła się dobrze, polega na tym, że każdy licencjobiorca wysyła żądanie adresu slave do pojedynczego kontaktu w NXP Semiconductors, który następnie przydziela adres slave na podstawie pojedynczej listy master.

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ć.

Kellenjb
źródło
Dziwne rozumowanie: nie mając listy, zapewniają aktualizację listy ...: - /
Federico Russo
Proste rozumowanie: chcą mieć pewność, że każdy, kto przydzieli identyfikatory, będzie miał naprawdę aktualną listę; posiadanie nieaktualnych kopii pływającej listy osłabiłoby ten cel.
supercat
1
@Federico Mają listę, po prostu jej nie publikują, więc ludzie muszą ją przejrzeć, aby upewnić się, że lista jest aktualna. Gdyby lista została opublikowana, byłoby mnóstwo ludzi, którzy wybiorą nieużywany adres, a co się stanie, gdy ktoś odpowiednio zarezerwuje ten adres?
Kellenjb
FWIW: SELGUIDE.PDF znajduje się w łączu do
HiTechHiTouch
1

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.

znak
źródło