Hangi I2C adresini seçmeliyim?


16

Artık I2C adresinin kendinize ayrılmış olması için I2C çalışanlarına biraz para ödemeniz gerektiğini biliyorum. Ama bunu yapmak istemiyorum.

Projemdeki köle ve ana MCU'larım için hangi adresi seçmem gerektiği konusunda tavsiye istiyorum. Ayrıca tahtada bir EEPROM olacak. Bu yüzden EEPROM adresini kullanmaktan kaçınacağım. Ustanın jiroskoplar ve ivmeölçerler ve belki de ek bellek cihazları dahil olmak üzere çok çeşitli sensörlere bağlanmasını planlıyorum. Uzak durmam gereken herhangi bir adres bloğu var mı? Sadece master için 0x00 ve slave için 0x01 kullanmayı düşünüyordum, çünkü bunlar nadiren kullanılıyor gibi görünüyor.

Başka bir soru: 10-bit aygıtları ve 7-bit aygıtları aynı veriyolunda karıştırmak kötü bir fikir olur mu? MCU'larımın 10 bit adresleme ile iletişim kurma olasılığını düşünüyordum, ancak sensörler için sadece 7 bit adresleri kullanıyordum.


1
W5VO @. Evet, SD kartın hemen yanında sadece 3.000 dolar isteyen insanlar.
Thomas O

1
@ThomasO, bir adres ayrılmış bir adres almak için onlara ödeme yapmanız gerekmez, tanımlayıcı gibi, bir cihaz yapmak için bunu ödemek zorunda değilsiniz, bir hizmet satıyorlar. SDcard, fikri mülkiyetlerini güçlendiriyorlar, bunu yapmanızı veya farklı bir teknoloji seçmenizi söyleyebilirler.
Kortuk

1
@ThomasO, bu durumda ödediğiniz bir şey olduğunu belirtiyordum. Ayrıca, iki bin gerçek bir üründe fazla değildir.
Kortuk

1
@ Thomas O $ 3.000 aslında ürünler için çok makul. Bu, ürün üreten herhangi bir şirket için kovada bir düşüş.
Kellenjb

2
@reemrevnivek, ancak patent sahibi bunu tercih etmeyi ve açık donanımın kullanıma izin verememesini ve bu ücretin ödenmesini gerektirmesini seçti. patent sahibi olarak bu hakka sahiptirler. Kanunlar değişene kadar bunun açık olduğundan emin olacağım. Patent ve telif hakkı elden geçirilmesini istiyorum, ancak iyi fikirlere sahip mühendisler bu şekilde korunuyor ve ödüllendiriliyor.
Kortuk

Yanıtlar:


13

İlk olarak, 0x00 ve 0x01 kullanmayın, bunlar saklıdır! I2C Veri Yolu Spesifikasyonu'nun Tablo 3'te ayrılmış adresler (ve bunun nedenleri) listelenmektedir:

Slave addr R / W Açıklama
 0000 000 0 Genel arama adresi
 0000 000 1 START bayt
 0000 001 X CBUS adresi
 0000 010 X Farklı veri yolu formatları için ayrılmıştır
 0000 011 X İleride kullanılmak üzere ayrılmıştır
 0000 1XX X Hs-modu ana kodu
 1111 1XX 1 Cihaz Kimliği
 1111 0XX X 10 bit bağımlı adresleme

Kenar geçişleri olmadığından ve bir hata koşulu olabileceğinden (ve hata ayıklamak zor olduğundan), 0x00'den de uzak durmalısınız.

Bunun dışında "Sadece yapılandırılabilir yap" derdim. Çok çeşitli sensörleri takabilmek istiyorsanız, bir adres için NXP ödeyebilir veya ayarlanabilir adresler verebilirsiniz. Kaynak kodunu dağıtmak istiyorsanız yazılım değişiklikleri açık olmalıdır. Seçtiğiniz adresin bir veya iki bitini (dijital pimlerdeki lehim atlama telleri) değiştirmek için bir donanım seçeneği ucuz ve kolaydır veya bir A / D pimine bağlı atlama telleri olan bir merdiven merdiveni donanımı size tam kontrol verebilir.


1
Yapılandırılabilir adres için +1. Bunu aynı otobüste aynı şeylerden birkaçına sahip olacak kölelerde gördüm.
Kellenjb

Evet, yapılandırılabilir adresleri düşünüyordum. Menü sistemindeki ayarlar değiştirilerek güncellenebilir. Önemli bir şey, birinin adresini değiştirmesini ve ana MCU'nun slave ile iletişimini kaybetmesini önlemek için korumaların eklenmesi gerektiğinden, adresleri sıfırlayan bir tür protokolün kurulması gerekir (örneğin 5 saniye sonra hiçbir iletişim olmaz, böylece adresi sıfırlayın .)
Thomas O

16

Tasarımınızda olumlu bir şekilde kullanmayacağınız bir cihaz seçin ve I2C adresini kullanın. Örneğin, bir RTC'ye ihtiyacınız olmayacaksa, NXP PCF8563 (ve muhtemelen diğer RTC'ler) tarafından kullanılan 0xA2 ve 0xA3'ü kullanabilirsiniz.


Bunu beğendim, çok zeki.
NickHalden

Ne yazık ki hala bazı cihazlar hala çatışıyor, örneğin ST STCN75 ve TI DAC8571 veya Microchip 24AA025E48 ve TI ADC121C027 .
Xcodo

10

1999 itibariyle tahsis edilen adreslerin listesi: http://www.nxp.com/acrobat_download2/selectionguides/SELGUIDE.PDF

Bu muhakemeyle tam bir liste yayınlamıyorlar:

S: Bugüne kadar kullanılan tüm I²C bağımlı adreslerinin bir listesini almak mümkün müdür?

Y: Hayır. NXP Yarı İletkenleri, önceden atanmış tüm bağımlı adreslerin bu listesini yayınlamaz, çünkü listenin güncel kalmasını ve atanan her adresin benzersiz olduğunu garanti etmenin tek yolu budur. Bu liste hazır hale getirilirse, I²C-bus lisans sahipleri köle adreslerini kendileri seçmeye başlayacak ve merkezi liste yakında tamamlanmayacak ve bu da adres çakışmalarına yol açabilir. İyi çalıştığı kanıtlanan ilke, her lisans sahibinin NXP Yarı İletkenleri içindeki tek bir kişiye bir bağımlı adres isteği göndermesi ve daha sonra bağımlı adresi tek bir ana listeye göre tahsis etmesidir.

Gönderen http://www.nxp.com/products/interface_control/i2c/faq/

Şimdi, her şey projenizde dahili olacaksa, bağlantı kurmayı planladığınız herhangi bir şeyle çelişmediği sürece, istediğiniz herhangi bir adresi seçemezsiniz.


Garip akıl yürütme: hiçbir liste olmadan listenin güncel kalmasını sağlarlar: - /
Federico Russo

Basit akıl yürütme: kimlikler tahsis eden herkesin gerçekten güncel bir listeye sahip olmasını sağlamak isterler; listenin güncel olmayan kopyalarının olması bu hedefi baltalayacaktır.
supercat

1
@Federico Bir listesi var, sadece yayınlamıyorlar, böylece insanlar listenin güncel olduğundan emin olmak için onları gözden geçirmek zorunda kalıyorlar. Liste yayınlanmış olsaydı, kullanılmayan adres seçen tonlarca insan olurdu, o zaman birisi bu adresi düzgün bir şekilde ayırdığında ne olur?
Kellenjb

FWIW: SELGUIDE.PDF İnternet Arşivi bağlantısında
HiTechHiTouch

1

Kellenjb'in dediği gibi, bağımlı cihaz adreslerinin tam bir listesini alamazsınız.

Ancak kullanamayacağınız birkaç ayrılmış adres vardır (örneğin, 0x00, genel arama adresidir).

Liste burada

10 bit ve 7 bit adresleme, 7 bit slave'ler I2C standardına uyduğu ve 10 bit adresleri yoksaydığı sürece iyidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.