Mendesain Bus saya sendiri

8

Pertanyaan ini lebih jauh ke pertanyaan saya sebelumnya: Alternatif untuk SPI karena EMI . Saya mempermainkan ide merancang bus komunikasi saya sendiri. Saya akan bersyukur jika seseorang dapat mengawasi desain awal saya, dan memberi tahu saya di mana saya gila ...

Saat ini saya menggunakan 2MHz SPI yang membawa lebih dari 10cm kabel panjang ke tujuh ADC pada PCB terpisah (CS bersama, tetapi setiap ADC memiliki garis MISO sendiri. Bit-banged), tetapi ingin menggantinya dengan sesuatu yang berbeda untuk mengurangi EMI. Masalahnya adalah tidak ada banyak ADC dengan bus diferensial, jadi saya ingin tahu apakah mungkin untuk merancang bus sendiri. Setidaknya lapisan fisik, dan mungkin protokol juga.

Tujuan desain bus baru:

  • gunakan komponen kecil secara fisik
  • EMI rendah
  • tidak lebih dari 4 kabel data (dua pasang)
  • bandwidth> 300 kbps dari masing-masing ADC. (> Total 2.1mbps)

Sebelum Anda menulis saya gila karena memikirkan hal ini, pertimbangkan bahwa mungkin tidak terlalu sulit untuk dilakukan pada PSoC5 . Pada chip itu saya pasti dapat merancang protokol saya sendiri di Verilog dan menerapkannya dalam perangkat keras. Dan sampai batas tertentu, saya mungkin dapat memasukkan komponen lapisan fisik juga. Terlebih lagi, saya mungkin dapat memiliki tujuh dari hal-hal ini pada saat yang sama, semua berjalan secara paralel di master, satu untuk setiap slave sehingga saya bisa mendapatkan bandwidth keseluruhan yang baik.

Dan inilah ide awal saya:

masukkan deskripsi gambar di sini

Itu akan didasarkan pada I2C, sedikit dimodifikasi untuk membantunya terhubung ke komponen lapisan fisik. Garis SDA dan SCL sekarang merupakan pasangan diferensial. Pasangan SDA memiliki properti OR-ing. Ini dicapai dengan menggunakan satu pin yang hanya bisa drive tinggi, dan satu yang hanya bisa drive rendah. Pasangan SCL didorong secara eksklusif oleh master. Kecepatan data akan dinaikkan hingga minimal 1mbps.

Master akan menjadi PSoC5 dengan 7 modul master. Para budak juga akan menjadi PSoC5s, dengan satu modul slave, dan akan menggunakan ADC integral.

Pikiran:

  • Tidak terlalu yakin apa cara terbaik untuk menerapkan resistor pull up dan komponen pembatas laju perubahan tegangan.
  • Saya menganggap saya tidak perlu pemutusan hubungan kerja. Jika saya membatasi laju perubahan tegangan menjadi sekitar 80ns, itu seharusnya bagus untuk kabel sepanjang 10cm.
  • Itu jelas bukan transceiver diferensial yang tepat. Apakah saya membuang-buang waktu untuk mencoba keluar dari gerbang?
  • Gerbang Bukan Itu menyebabkan kemiringan. Apakah ini mungkin menjadi masalah?
Roket
sumber
Mungkin LVDS layak dilihat jika Anda ingin pensinyalan diferensial?
Saad
Saya tidak berpikir saya telah melihat perangkat budak gaya I2C dengan input dan output SDA terpisah. Juga, jika Anda menggunakan budak I2C berbasis mikroprosesor, Anda harus mengizinkan budak menahan SCK sedemikian rupa sehingga master akan dapat melihatnya (master kemudian akan menunda mengirim bit berikutnya sampai budak itu melepaskan SCK). Kalau tidak, jika master mengirim data tanpa menunggu budak siap, semuanya akan gagal parah. Atau, Anda bisa menggunakan SPI, dan hanya menggunakan nilai byte tertentu untuk mengirim data (sehingga setiap byte data "nyata" akan dikirim sebagai dua byte). Jika Anda melakukan itu ...
supercat
... karena sebagian besar implementasi SPI akan menjatuhkan kelipatan seluruh byte dalam kasus data overrun / underrun, Anda dapat memiliki master mendeteksi ketika budak tidak dapat mengikuti dan mentransmisikan ulang masing-masing byte sampai budak mampu mengenalinya.
supercat

Jawaban:

4

Nah, jika Anda ingin memiliki PSoC5, saya baru saja membaca tentang IEEE 1355 . Varian tautan sinyal DS-SE-02 dapat melakukan apa yang Anda inginkan. Ini membutuhkan 4 saluran sinyal: jalur data dan jalur strobo di setiap arah. Satu-satunya perangkat keras khusus yang saya dapat temukan bahwa mengimplementasikan 1355 adalah gear Spacewire yang dikeraskan dengan rad , tetapi presentasi IEEE ini mengklaim bahwa ia dapat diimplementasikan pada FPGA dengan 1/3 gerbang UART dan beroperasi dengan kecepatan 100 kali lebih cepat daripada UART .

Salinan umum dari standar lengkap tersedia atas nama CERN jika Anda ingin membaca dengan sedikit cahaya. Saya belum punya kesempatan untuk duduk dengan hal-hal penuh, jadi saya tidak bisa berbicara untuk kinerja EMI-nya. Melihat bagian DS-SE, sepertinya Anda harus mengontrol impedansi di saluran transmisi dan berhenti di ujung penerima.

Joe Baker
sumber
Terima kasih atas ide ini. Kedengarannya menarik. Apa pun yang disebut Spacewire tidak masalah bagi saya. Saya akan memeriksanya sekarang ...
Rocketmagnet
4

Sudahkah Anda mempertimbangkan untuk menggunakan RS485?

Sudah ada banyak komponen yang dirancang untuk bekerja di bus RS485.

Bruno Ferreira
sumber
Ya saya sudah memikirkannya. Ini tentu saja pilihan. Saya tidak berpikir mereka melakukan OR-ing, tetapi master dapat mentransmisikan secara asinkron pada satu pasangan, sementara budak bergantian pada pasangan lainnya. Satu-satunya masalah adalah saya tidak dapat menemukan transceiver yang sangat kecil. Apakah saya menyebutkan bahwa saya sangat kekurangan ruang.
Rocketmagnet
2
Apakah SOIC 8 terlalu besar untuk kebutuhan Anda? Saya baru-baru ini mempertimbangkan untuk menggunakan Intersil ISL83485IBZ atau transceiver Texas Instruments SN65HVD11D pada salah satu proyek saya. Keduanya memiliki paket SOIC 8.
Bruno Ferreira
@ Bruno - SOIC-8, apa kau bercanda? :-) PCB-nya 11 mm x 13 mm .
stevenvh
@stevenvh Tidak memperhatikan dimensi pada pertanyaan lain. Saya kira paket MSOP tidak menyelesaikan masalah Anda. Jika ya, mungkin Anda bisa menggunakan ADM1485
Bruno Ferreira