Bagaimana Raspberry Pi membedakan antara beberapa papan ekspansi?


8

Saya baru memulai dengan menggunakan GPIO pada Raspberry Pi untuk berbagai proyek. Ada banyak papan breakout untuk RPi dan banyak dari mereka yang memiliki pin untuk menumpuk papan di atas satu sama lain. Sepertinya pin GPIO langsung masuk dan semua papan memiliki pin yang sama. Bagi saya ini berarti bahwa semua papan dalam tumpukan menerima sinyal yang sama persis dari RPi dan harus berperilaku sesuai. Sepertinya ini dapat menghasilkan banyak kesalahan dengan perintah yang ditujukan untuk satu papan yang memengaruhi cara papan lain beroperasi, tetapi tampaknya ini tidak terjadi.

Jadi, bagaimana Raspberry Pi mengetahui papan mana yang mendapatkan perintah tertentu? Apakah ada semacam perintah inisialisasi yang hanya dikenali oleh papan tertentu dan kemudian mulai menerima perintah lainnya?


Ini juga sesuatu yang saya lihat dengan arduino shieldable yang dapat ditumpuk dan berbagai platform komputasi lainnya.
cspirou

Jawaban yang saya khawatirkan adalah tidak ada cara standar untuk satu papan untuk mendeteksi yang lain dan mengkonfigurasi ulang sendiri. Anda harus memeriksa rincian masing-masing papan sebelum membeli dan menentukan sendiri kemampuan di sana untuk bekerja satu sama lain.
joan

Jawaban:


5

Komputer menggunakan sistem yang disebut busing untuk menghubungkan beberapa perangkat periferal ke CPU melalui set kabel yang sama. I2C dan SPI adalah contoh sistem busing yang digunakan dengan pin GPIO pi, yang memungkinkan beberapa perangkat pada pin fisik yang sama (dikelola oleh bus internal) tetapi menggunakan alamat yang berbeda . Mengalamatkan adalah abstraksi yang dibuat oleh protokol sistem bus. Ini sedikit seperti bagaimana Anda dapat memiliki beberapa aplikasi jaringan menggunakan koneksi fisik yang sama ke internet, semua berjalan secara bersamaan.

Misalnya, melihat RTC Pi Plus , salah satu papan yang dapat ditumpuk dari tautan contoh Anda:

masukkan deskripsi gambar di sini

Perhatikan di sisi dekat lima koneksi dalam sebuah kotak. Ini sesuai dengan pin di sisi lain. Mereka diberi label:

  • 5V = Daya, dapat dibagikan dengan perangkat lain.
  • GND = Ground, juga umum.
  • Pin bus SDA dan SCL = I2C; pada pi yang pin 3 dan 5. Anda dapat memiliki cukup banyak perangkat di bus I2C semua menggunakan dua pin yang sama ini untuk komunikasi.
  • SQW = Saya percaya ini adalah singkatan dari "gelombang persegi" dan mungkin salah satu anggota kami yang lebih berpengetahuan elektronik akan meninggalkan komentar yang bagus menjelaskan tujuannya.

Dengan kata lain, sebagian besar pin tidak digunakan oleh papan ini sama sekali. Mereka hanya di sana untuk memungkinkan penumpukan. Yang digunakan semua (atau sebagian besar, masih tidak tahu tentang SQW) dapat dibagikan secara bersamaan dengan perangkat lain.

Batas nyata untuk menumpuk dengan cara ini adalah jumlah daya yang dapat disuplai vs apa yang dikonsumsi, bukan jumlah pin yang terlibat. Mungkin itu akan menjadi batasan jika Anda memasukkan catu daya tambahan, tapi saya pikir sebelumnya Anda harus memindahkan tumpukan ke luar dan mulai menggunakan tangga untuk mengerjakannya. ;)


3

Anda hanya dapat memiliki satu papan HAT sehingga tidak ada masalah seperti itu. Ada beberapa papan tempat Anda dapat menghubungkan lebih dari satu tetapi itu bukan papan HAT.


1
TOPI mungkin bukan hal yang tepat untuk dikatakan, tetapi saya berbicara tentang papan yang terhubung ke pin GPIO. Situs berikut menunjukkan tumpukan tinggi papan tersebut. abelectronics.co.uk Saya dapat mengubah pertanyaan untuk menghapus 'HATs'
cspirou

1

Jadi, bagaimana Raspberry Pi mengetahui papan mana yang mendapatkan perintah tertentu?

Pi tidak bisa tahu. Anda harus memastikan.

Masalahnya adalah, jika Anda menghubungkan beberapa papan ekstensi, Anda harus berhati-hati agar jalur sinyal tidak digunakan lebih dari sekali atau menerapkan skema busing yang dapat bekerja dengan beberapa perangkat yang berbagi beberapa jalur (seperti yang sudah disarankan @goldilocks). Untuk merasakan bagaimana ini bisa dilakukan, saya akan merekomendasikan untuk membaca di bus ISA lama . Sesuatu yang bisa diimplementasikan menggunakan GPIO sebagai data dan garis alamat (dan jika ada yang kesakitan).

Apakah ada semacam perintah inisialisasi yang hanya dikenali oleh papan tertentu dan kemudian mulai menerima perintah lainnya?

Sementara HAT tidak termasuk dalam pertanyaan, skema identifikasi yang mereka gunakan layak untuk dilihat. Perhatikan bahwa tidak ada HAT bertumpuk * (per Blog Raspberry Pi : HAT Stackable ditampilkan dalam diskusi spesifikasi - tetapi akhirnya dibuang karena peningkatan besar dalam kompleksitas autoconfig dan potensi kesalahan pengguna. ). Jadi pada waktu tertentu hanya satu HAT akan terhubung, minta EEPROM-nya dibacakan, dan buat informasinya tersedia di bagan perangkat.


* Dimungkinkan untuk membuat topi yang dapat ditumpuk jika mereka memiliki tipe yang sama dan karenanya tidak memerlukan identifikasi ganda dan berbeda, mis. Adafruit 16-Channel PWM / Servo HAT untuk Raspberry Pi .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.