Apa alamat I2C yang harus saya pilih?

16

Sekarang saya tahu untuk memiliki alamat I2C yang disediakan untuk diri sendiri, Anda harus membayar sejumlah uang kepada orang-orang I2C. Tetapi saya tidak ingin melakukan ini.

Saya meminta saran tentang alamat apa yang harus saya pilih untuk budak dan MCU master saya pada proyek saya. Juga akan ada EEPROM di papan tulis. Jadi saya akan menghindari menggunakan alamat EEPROM. Saya berencana agar master terhubung ke berbagai sensor, termasuk gyro dan akselerometer, dan mungkin perangkat memori tambahan. Apakah ada blok alamat yang harus saya hindari? Saya berpikir untuk hanya menggunakan 0x00 untuk master dan 0x01 untuk slave, karena itu sepertinya jarang digunakan.

Pertanyaan lain: apakah itu ide yang buruk untuk mencampur perangkat 10-bit dan perangkat 7-bit di bus yang sama? Saya sedang mempertimbangkan kemungkinan MCU saya berkomunikasi dengan pengalamatan 10-bit, tetapi hanya menggunakan alamat 7-bit untuk sensor.

Thomas O
sumber
1
@ W5VO. Yap, tepat di sebelah kartu SD orang hanya menginginkan $ 3.000.
Thomas O
1
@ Thomas, Anda tidak perlu membayar mereka untuk mendapatkan alamat yang dipesan, seperti pengenal, Anda tidak perlu membayar ini untuk membuat perangkat, mereka menjual layanan. SDcard mereka menegakkan kekayaan intelektual mereka, mereka dapat memberitahu Anda untuk melakukannya atau memilih teknologi yang berbeda.
Kortuk
1
@ Thomas, saya menegaskan bahwa ada sesuatu yang Anda bayar dalam kasus ini. Juga, dua ribu tidak banyak dalam produk nyata.
Kortuk
1
@ Thomas O $ 3.000 sebenarnya sangat masuk akal untuk produk. Ini adalah setetes air untuk perusahaan mana pun yang membuat produk.
Kellenjb
2
@reemrevnivek, tetapi pemegang paten memilih bahwa mereka lebih suka mengharuskannya dan menyebabkan perangkat keras terbuka tidak dapat mengizinkan penggunaan, dan mengharuskan membayar biaya ini. sebagai pemegang paten, mereka memiliki hak itu. Saya, sampai hukum berubah, akan memastikan ini jelas. Saya ingin perombakan paten dan hak cipta, tetapi sampai sekarang, inilah bagaimana para insinyur yang memiliki ide bagus dilindungi dan diberi penghargaan.
Kortuk

Jawaban:

13

Pertama, jangan gunakan 0x00 dan 0x01, itu sudah dipesan! Tabel 3 dari Spesifikasi Bus I2C mencantumkan alamat yang dipesan (dan alasannya):

Slave addr R / W Keterangan
 0000 000 0 Alamat panggilan umum
 0000 000 1 MULAI byte
 0000 001 X alamat CBUS
 0000 010 X Dicadangkan untuk berbagai format bus
 0000 011 X Dicadangkan untuk keperluan masa depan
 0000 1XX X Kode master mode Hs
 1111 1XX 1 Device ID
 1111 0XX X 10-bit slave addressing

Anda juga harus menghindari 0x00 karena tidak memiliki transisi tepi, dan mungkin merupakan kondisi kesalahan (dan sulit untuk di-debug).

Selain itu, saya akan mengatakan "Buat saja itu dapat dikonfigurasi." Jika Anda ingin dapat menyambungkan berbagai sensor, maka Anda dapat membayar NXP untuk suatu alamat, atau memberikannya alamat yang bisa disesuaikan. Modifikasi perangkat lunak harus jelas jika Anda ingin mendistribusikan kode sumber. Opsi perangkat keras untuk beralih satu atau dua bit dari alamat yang Anda pilih (jumper solder pada pin digital) murah dan mudah, atau jaringan tangga resistor dengan jumper yang terhubung ke pin A / D dapat memberi Anda kontrol penuh pada perangkat keras.

Kevin Vermeer
sumber
1
+1 untuk alamat yang dapat dikonfigurasi. Saya telah melihat ini pada budak yang akan memiliki beberapa hal yang sama di bus yang sama.
Kellenjb
Ya saya sedang memikirkan alamat yang bisa dikonfigurasi. Itu dapat diperbarui dengan mengubah pengaturan dari sistem menu. Satu hal penting adalah bahwa perlindungan perlu ditambahkan untuk mencegah seseorang mengubah alamat dan MCU master kehilangan komunikasi dengan budak, sehingga beberapa jenis protokol perlu dibuat yang mengatur ulang alamat (misalnya setelah 5 detik tidak ada komunikasi sehingga atur ulang alamat .)
Thomas O
16

Pilih perangkat yang Anda yakin tidak akan digunakan dalam desain Anda dan gunakan alamat I2C itu. Misalnya, jika Anda tidak membutuhkan RTC, Anda dapat menggunakan 0xA2 dan 0xA3, yang digunakan oleh NXP PCF8563 (dan mungkin RTC lainnya).

stevenvh
sumber
Saya suka ini, sangat pintar.
NickHalden
Sayangnya beberapa perangkat masih berselisih, misalnya ST STCN75 dan TI DAC8571 atau Microchip 24AA025E48 dan TI ADC121C027 .
Xcodo
10

Berikut adalah daftar alamat yang dialokasikan pada tahun 1999: http://www.nxp.com/acrobat_download2/selectionguides/SELGUIDE.PDF

Mereka tidak merilis daftar lengkap dengan alasan ini:

T: Apakah mungkin untuk menerima daftar semua alamat I²C-slave yang digunakan sampai saat ini?

J: Tidak. NXP Semikonduktor tidak mengeluarkan daftar ini dari semua alamat budak yang sebelumnya ditetapkan, karena ini adalah satu-satunya cara kami dapat menjamin daftar tetap up to date dan setiap alamat yang ditugaskan adalah unik. Jika daftar ini tersedia, pemegang lisensi I²C-bus akan mulai memilih sendiri alamat slave dan daftar pusat akan segera menjadi tidak lengkap, yang dapat menyebabkan konflik alamat. Prinsip yang ditetapkan, terbukti berfungsi dengan baik, adalah bahwa setiap pemegang lisensi mengirimkan permintaan alamat slave ke satu kontak dalam NXP Semiconductors, yang kemudian mengalokasikan alamat slave berdasarkan daftar master tunggal.

Dari http://www.nxp.com/products/interface_control/i2c/faq/

Sekarang, jika semuanya akan menjadi internal untuk proyek Anda, tidak ada alasan Anda tidak bisa hanya memilih alamat yang Anda inginkan asalkan tidak bertentangan dengan apa pun yang Anda rencanakan untuk terhubung.

Kellenjb
sumber
Alasan yang aneh: dengan tidak memiliki daftar mereka memastikan untuk menjaga daftar tetap up to date ...: - /
Federico Russo
Alasan sederhana: mereka ingin memastikan bahwa siapa pun yang mengalokasikan ID akan memiliki daftar yang benar-benar terkini; memiliki salinan daftar usang yang beredar akan merusak tujuan itu.
supercat
1
@Federico Mereka memiliki daftar, mereka hanya tidak mempublikasikannya sehingga orang-orang dipaksa untuk melewatinya untuk memastikan bahwa daftar itu mutakhir. Jika daftar itu diterbitkan akan ada banyak orang yang memilih alamat yang tidak digunakan, lalu apa yang terjadi ketika seseorang benar-benar menyimpan alamat itu?
Kellenjb
FWIW: SELGUIDE.PDF adalah di Internet Archive Link
HiTechHiTouch
1

Seperti yang dikatakan Kellenjb, Anda tidak akan mendapatkan daftar lengkap alamat perangkat slave.

Namun ada beberapa alamat yang dipesan yang tidak dapat Anda gunakan (0x00 misalnya adalah alamat panggilan umum).

Daftarnya ada di sini

Mencampur 10 dan 7 bit menangani baik-baik saja selama 7bit budak mematuhi standar I2C dan mengabaikan 10 bit alamat.

Menandai
sumber