Pertimbangan Pengakhiran Bus SPI


22

Jadi, dalam pertanyaan saya sebelumnya saya bertanya tentang menggunakan bus SPI jarak pendek untuk komunikasi board to board. Saya direkomendasikan untuk mencoba resistor terminasi. Saya meletakkan sebuah resistor di dekat tujuan (tapi tidak persis di sana, ada jarak 1 cm) dan menghubungkannya [karena ini adalah papan tanpa tapak penghentian resistor, saya harus berimprovisasi. Saya tidak bisa menyolder resistor ke perangkat karena TQFP dan memiliki pin yang halus.]

Dari beberapa pengujian dasar, saya menemukan bahwa resistor 1K hampir tidak mengurangi overshoot. 470 Ohms dan 180 Ohms bekerja lebih baik. Semakin rendah saya pergi, semakin baik kerjanya. Dengan 180 Ohm, overshoot sekitar satu volt atau sedikit lebih rendah. Sekarang, sayangnya, saya tidak bisa turun lebih dari itu karena saat ini lebih dari yang bisa ditangani MCU saya. Saya memang memperbaiki masalah, pada revisi papan saat ini, dengan menggunakan resistansi 330 Ohm secara seri. Ini membawa overshoot ke 3,7 V dan waktu naik adalah 10 atau 11 ns. Tetapi saya benar-benar ingin solusi yang 'tepat' pada revisi berikutnya. Persyaratan frekuensi saya tetap sama: 2 MHz tetapi lebih suka 4 MHz.

Jadi saya merasa saya harus bertanya di sini: pada revisi papan berikutnya, haruskah saya menempatkan buffer gemuk di garis? Menemukan buffer sebenarnya bukan masalah, tetapi undian saat ini akan meningkat secara signifikan - Saya memiliki 8 perangkat di SPI yang membutuhkan terminasi dan 3 baris yang selalu aktif buka masing-masing. Contoh, SCK masuk ke 8 perangkat. Setiap perangkat akan memiliki, katakanlah, resistor terminasi 100 Ohm. Jadi itu adalah undian 12 * 3.3 / 100 = 390 mA saat ini!

Jadi apa jalan terbaik di sini? Haruskah saya menggunakan 'penghentian aktif' dengan menggunakan dioda Schottky sebagai klem?

EDIT: Mengenai impedansi saluran: Seperti yang saya sebutkan sebelumnya, tujuannya adalah untuk menghubungkan 4 papan eksternal. Pad ke pad jarak adalah sama untuk semua (12 inci). Namun, ada juga perangkat di papan yang sama dengan MCU - tetapi ini tidak perlu penghentian - panjangnya sekitar satu inci (atau kurang) dan ada sedikit overshoot (300 atau mV). Jejak yang masuk ke papan eksternal memiliki panjang dan lebar yang sama. Lapisan ke-2 di papan saya adalah bidang tanah yang tidak terputus.


Metode yang umum adalah menempatkan resistor seri yang cocok dengan impedansi saluran. Coba sesuatu seperti penghentian serial 50ohm. Akan membantu jika Anda mendesain jejak dan koneksi Anda menjadi impedansi tetap. Coba penghentian serial yang lebih rendah dan lihat apa yang Anda temukan. Dia menyarankan penghentian ke tanah 32 ohm, Anda benar-benar dapat melakukan ini kekuatan yang jauh lebih rendah, baik daya 3dB lebih sedikit, dengan menempatkan 64 ohm ke power rail dan 64ohm ke ground rail.
Kortuk

@Kortuk A 32 Ohm resistor, sayangnya, tidak mengurangi overshoot secara signifikan. Namun, jejaknya juga di tempat yang salah (tidak pernah dimaksudkan untuk menjadi terminator) dan bukan pada sumbernya, jadi mungkin saja itu saya tidak yakin. Mengenai impedansi saluran, semua saluran memiliki, kira-kira, panjang dan lebar yang sama. Mereka semua menabrak tanah lengkap pesawat, yang ada di lapisan ke-2.
Saad

1
Pemutusan seri ada pada sumbernya, jika Anda menempatkannya pada beban, ia tidak melakukan apa-apa. Coba letakkan 50ohm tepat di sumber Anda secara seri untuk melihat pengaruhnya.
Kortuk

Anda dapat menganggapnya sebagai stevenvh yang dijelaskan, ada seluruh garis yang bertindak sebagai kapasitor dan resistor bertindak sebagai R dengan itu untuk lulus rendah, jika Anda menganggapnya sebagai model yang disatukan. Sebuah resistor yang cocok di sana jika Anda melihat model saluran transmisi berarti Anda memiliki separuh perjalanan gelombang amplitudo dan kemudian ketika menyentuh ujung yang lain dan memantulkannya menabrak nilai penuh.
Kortuk

Jawaban:


32

Berbicara tentang terminasi sinyal seperti membuka sekaleng cacing. Ini adalah subjek BESAR yang sulit untuk diringkas hanya dalam beberapa ratus kata. Karena itu, saya tidak akan melakukannya. Saya akan meninggalkan banyak hal dari jawaban ini. Tapi saya juga akan memberi Anda peringatan besar: Ada banyak informasi yang salah tentang penghentian resistor di internet. Bahkan, saya akan mengatakan bahwa sebagian besar yang ditemukan di internet salah atau menyesatkan. Suatu hari saya akan menulis sesuatu yang besar dan mempostingnya ke blog saya, tetapi tidak hari ini.

Hal pertama yang perlu diperhatikan adalah nilai resistor yang digunakan untuk terminasi Anda harus terkait dengan impedansi jejak Anda. Sebagian besar waktu nilai resistor sama dengan impedansi jejak Anda. Jika Anda tidak tahu apa impedansi jejaknya maka Anda harus mengetahuinya. Ada banyak kalkulator impedansi online yang tersedia. Pencarian Google akan memunculkan puluhan lebih.

Kebanyakan jejak PCB memiliki impedansi 40 hingga 120 ohm, itulah sebabnya Anda menemukan bahwa resistor terminasi 1k hampir tidak menghasilkan apa-apa dan resistor ohm 100-ish jauh lebih baik.

Ada banyak jenis penghentian, tetapi kita dapat secara kasar memasukkannya ke dalam dua kategori: Pengakhiran Sumber dan Akhir. Pemutusan sumber ada di driver, end termination ada di ujung. Dalam setiap kategori, ada banyak jenis penghentian. Setiap jenis terbaik untuk penggunaan yang berbeda, tanpa satu jenis yang baik untuk semuanya.

Pengakhiran Anda, sebuah resistor tunggal ke ground di ujung, sebenarnya tidak terlalu bagus. Padahal, itu salah. Orang-orang melakukannya, tetapi itu tidak ideal. Idealnya resistor akan menuju ke power rail yang berbeda di setengah power rail Anda. Jadi jika tegangan I / O adalah 3.3v maka resistor itu tidak akan pergi ke GND, tetapi power rail lain di setengah dari 3.3v (alias 1.65v). Regulator tegangan untuk rel ini harus istimewa karena perlu untuk sumber DAN arus tenggelam, di mana sebagian besar regulator hanya sumber arus. Regulator yang berfungsi untuk penggunaan ini akan menyebutkan sesuatu tentang penghentian di halaman pertama datasheet.

Masalah besar dengan sebagian besar penghentian akhir adalah mereka mengkonsumsi banyak arus. Ada alasan untuk ini, tetapi saya tidak akan membahasnya. Untuk penggunaan saat ini yang rendah, kita harus melihat penghentian sumber. Bentuk terminasi sumber yang paling mudah dan paling umum adalah resistor seri sederhana pada output driver. Nilai dari resistor ini sama dengan impedansi jejak.

Pemutusan sumber bekerja berbeda dari penghentian akhir, tetapi efek bersihnya sama. Ini bekerja dengan mengendalikan pantulan sinyal, bukan mencegah pantulan di tempat pertama. Karena itu, ini hanya berfungsi jika output driver memberi makan satu beban. Jika ada banyak beban maka hal lain harus dilakukan (seperti menggunakan terminasi akhir atau beberapa sumber terminasi resistor). Manfaat besar pemutusan sumber adalah tidak memuat driver Anda seperti halnya pemutusan akhir.

Saya katakan sebelumnya bahwa resistor seri Anda untuk penghentian sumber harus terletak di driver, dan itu harus memiliki nilai yang sama dengan jejak impedansi Anda. Itu penyederhanaan yang berlebihan. Ada satu detail penting yang perlu diketahui tentang ini. Sebagian besar driver memiliki beberapa hambatan pada outputnya. Resistansi itu biasanya dalam kisaran 10-30 ohm. Jumlah resistansi keluaran dan resistor Anda harus sama dengan impedansi jejak Anda. Katakanlah jejak Anda adalah 50 ohm, dan pengemudi Anda memiliki 20 ohm. Dalam hal ini resistor Anda akan menjadi 30 ohm sejak 30 + 20 = 50. Jika lembar data tidak mengatakan apa impedansi keluaran / resistansi driver maka Anda dapat menganggapnya sebagai 20 ohm - kemudian lihat sinyal pada PCB dan lihat apakah perlu disesuaikan.

Hal penting lain: ketika Anda melihat sinyal-sinyal ini pada o-scope Anda HARUS menyelidiki pada penerima. Menyelidiki di tempat lain kemungkinan akan memberi Anda bentuk gelombang terdistorsi dan menipu Anda untuk berpikir bahwa segalanya lebih buruk daripada yang sebenarnya. Pastikan juga klip ground Anda sesingkat mungkin.

Kesimpulan: Beralih ke terminasi sumber dengan resistor 33 hingga 50 ohm dan Anda akan baik-baik saja. Peringatan biasa berlaku.


David, terima kasih banyak atas jawaban yang lengkap. Semua itu masuk akal tetapi saya pikir ada satu lagi komplikasi dalam sistem saya - garis SPI berpindah dari satu papan ke papan lainnya. Jadi, memperkirakan impedansi garis mungkin sulit - jalur sinyal untuk sekitar 3 "di papan utama, melewati kabel pita 6" dan kemudian berjalan di sepanjang jejak 3 "lagi sampai mencapai tujuannya. Kabel kabel pita adalah alternatif ground (seperti SCK, GND, MOSI, GND dll.) Apakah rekomendasi 30-20 Ohm Anda masih berlaku?
Saad

@ Saad Apa yang telah saya lakukan dalam kasus-kasus seperti itu (dan saya sudah sering melakukan ini) adalah menggunakan resistor tunggal pada driver dan menyesuaikan nilainya begitu prototipe dibuat. Ini kompromi, tetapi berhasil. Saya sebenarnya memiliki beberapa sistem sekarang yang menjalankan SPI lebih dari 1 kaki kabel dengan jejak 3-6 inci pada setiap PCB. Beberapa dari mereka berjalan pada 30 MHz! Ya, mulailah dengan 33 atau 47 ohm dan atur dari sana.

3
+1 sudah, tetapi diagram yang menunjukkan bagaimana menghubungkan penghentian sumber (yaitu, secara seri, bukan dari garis ke tanah) akan sangat membantu.
The Photon

16

Karena Anda akan melakukan jarak pendek, saya tidak berpikir resistor terminasi adalah ide yang baik. Seperti yang Anda temukan, mereka harus cukup rendah untuk melakukan pekerjaan itu, dan kemudian saluran menarik banyak arus dan tegangan dilemahkan oleh 2 jika Anda juga menggerakkan saluran dengan impedansi yang sama.

Kecepatan clock Anda tidak terlalu tinggi, sehingga frekuensi yang Anda butuhkan untuk mendukung bahkan kecepatan bit 4 MHz bukanlah yang menyebabkan masalah. Masalahnya adalah Anda memiliki tepi cepat mengemudi garis, yang memiliki harmonik di 100-an MHz, yang memang menyebabkan masalah. Pada frekuensi yang Anda inginkan, Anda memiliki sistem lumped, bukan saluran transmisi. Ini membuat segalanya jauh lebih mudah.

Solusinya karena itu untuk menipiskan frekuensi tinggi yang Anda tidak benar-benar butuhkan tetapi menyebabkan masalah. Ini dapat dilakukan dengan filter low pass RC sederhana segera setelah apa pun yang menggerakkan garis. Ini adalah bagian dari apa yang dilakukan resistor 330 now sekarang. Mereka membentuk filter low pass dengan kapasitansi parasit garis. Tampaknya itu tidak cukup dan / atau tidak cukup dapat diprediksi. Ini dapat diperbaiki dengan beberapa kapasitansi yang disengaja pada setiap baris.

Anda ingin menjalankan bus pada 4 MHz, yang berarti sinyal tercepat yang perlu didukung adalah gelombang persegi 4 MHz. Itu berarti panjang setiap level adalah 125 ns. Katakanlah kita ingin itu menjadi setidaknya 4 konstanta waktu, yang menyiratkan 98% waktu penyelesaian. Itu berarti konstanta waktu maksimum yang ingin kami izinkan adalah 31 ns. 31ns / 330Ω = 94 pF. Itu adalah total beban pada resistor seri 330 you yang Anda butuhkan untuk mendapatkan konstanta waktu 31 ns. Akan selalu ada beberapa kapasitansi parasit yang tidak dapat Anda prediksi, jadi saya akan melihat bagaimana keadaan dengan 47 pF. Itu menyisakan ruang untuk 10-20 pF kapasitansi tersembunyi sementara tidak melebihi batas waktu maksimum yang diizinkan.

Resistor seri harus sedekat mungkin dengan semua pin yang menggerakkan bus. Ini mengasumsikan bahwa semua pin lain pada bus akan menjadi input CMOS ketika seseorang mengemudi. Untuk garis yang hanya didorong oleh pin tunggal (seperti garis jam, yang hanya digerakkan oleh master), letakkan 47 pF sedekat mungkin setelah resistor. Untuk jalur yang dapat digerakkan oleh pin yang berbeda di waktu yang berbeda (seperti MISO), letakkan 47 pF di suatu tempat dekat tengah semua driver. Setiap baris hanya mendapat kapasitor 47 pF tunggal tidak peduli berapa banyak driver, tetapi ada satu resistor untuk setiap driver.

Perhitungan di atas dimaksudkan sebagai panduan yang baik untuk memulai. Beberapa parameter tidak dapat diketahui dan karena itu diperhitungkan di muka. Mulailah dengan seri 330 Ω dan 47 pF ke tanah, tetapi jangan takut untuk mengubah hal-hal berdasarkan hasil nyata yang diamati.


2

Dengan tidak adanya terminasi, ketika sinyal dikirim dari sumber impedansi sangat rendah ke penerima impedansi sangat tinggi, sinyal akan terpental bolak-balik berulang kali; fase sinyal akan diputar 180 derajat pada setiap perjalanan pulang-pergi.

Jika seseorang tidak ingin sinyal dipantulkan ketika mereka mencapai tujuan, ia dapat menggunakan terminasi akhir. Ini akan menyebabkan sinyal diserap secara bersih di tujuan tanpa tercermin, tetapi banyak implementasi umum akan menyebabkan sumber untuk melihat beban DC yang signifikan.

Dalam banyak kasus, seseorang dapat mencapai hasil yang praktis berguna jika seseorang memasukkan resistor seri pada sumber sinyal. Jika tidak ada penerima di ujung garis, sinyal akan dipantulkan ketika sampai di sana, tetapi setiap refleksi tersebut akan diserap oleh sumber daripada dipantulkan kembali. Perhatikan juga bahwa pemutusan sumber tidak memaksakan beban DC pada perangkat yang menggerakkan saluran.

Dengan tidak adanya pemutusan, jika saluran didorong oleh impedansi rendah dan diterima dengan impedansi tinggi, perangkat penerima mungkin melihat tegangan lebih tinggi dari tegangan mengemudi (secara teori, hingga dua kali tegangan, jika impedansi mengemudi sumber adalah nol dan impedansi penerima tidak terbatas). Jika salah satu sumber atau penerima diakhiri dengan benar, tegangan yang diterima akan hampir sama dengan tegangan drive (jika sumber nol-impedansi menggerakkan penerima impedansi-benar, atau sumber impedansi yang tepat menggerakkan penerima impedansi tak terbatas, tegangan yang diterima akan sama dengan tegangan drive). Jika keduanya diakhiri dengan benar, tegangan terima akan menjadi setengah dari tegangan drive.

Simulasi di sini menunjukkan ini. Ini termasuk generator pulsa yang menghasilkan rantai pulsa kira-kira 49 kali per detik, dua garis penundaan 5 ms secara seri (waktu bolak-balik 1/50 detik), dan resistor terminasi yang dapat dialihkan di kedua ujungnya.

Rangkaian ini mencakup tiga sakelar SPDT; klik satu untuk mengubah negaranya. Dua sakelar bawah mengontrol pemutusan sumber dan tujuan. Bagi mereka, "naik" mewakili penghentian yang baik dan "turun" mewakili buruk. Saklar atas mengontrol apakah saluran harus digerakkan oleh generator pulsa otomatis, atau oleh input logika manual. Untuk mengirim pulsa ke saluran secara manual, alihkan sakelar atas "ke bawah", lalu beri tanda "L" di sebelahnya.

Sinyal mencapai tujuan akan bersih jika baik sumber atau tujuan diakhiri dengan benar. Jika keduanya diakhiri dengan benar, tegangan sinyal yang diterima akan menjadi setengah dari tegangan drive. Jika salah satu dihentikan dengan benar tetapi yang lain tidak, tegangan yang diterima akan menjadi sekitar 91% dari tegangan drive (resistor "buruk" adalah "salah" dengan faktor sepuluh, dan dengan demikian gagal menyerap sekitar (10/11) energi). Jika tidak ada yang dihentikan, tegangan yang diterima pada awalnya akan sekitar 1,656 kali tegangan drive, tetapi refleksi aneh akan muncul setiap 20 ms.


1

Coba terminasi AC (misalnya kapasitor 470 pF secara seri dengan resistor 110 Ohm) dan hubungkan kombinasi seri ini mulai dari output tujuan Clock SPI ke ground. Pengakhiran akan menarik sekitar 30 mA untuk panjang waktu tepi sesuatu yang dapat dengan mudah dilakukan, tetapi nol saat ini sebaliknya. Untuk jalur data dua arah itu menjadi sedikit lebih rumit. Saya menempatkan 470 pF, 220 Ohm AC terminasi pada master dan slave pada jalur data SPI dan berfungsi, yaitu overshoot dan undershoot yang dapat diterima.

Saya menyambut komentar tentang ini.


0

Tidak masuk terlalu dalam ke detail karena posting sebelumnya mengenai kepala. Itu turun ke SPI menjadi garis tidak seimbang. Sekalipun Anda memiliki frekuensi clock rendah, fast edge ns clock perlu dihormati. Dalam kasus saya menemukan resistor 470 ohm secara seri dengan garis SPI CLK di sisi Master. Menghapus resistor itu dan mengimplementasikan solusi yang direkomendasikan untuk jalur tidak seimbang dari Lattice dan saran yang diposting di atas (saya hanya bisa menerapkan setengah solusi dari sisi Slave, men-tweak tutup filter sesuai dengan itu) Saya dapat memperpanjang panjang kabel pita pita SPI saya dari 10cm hingga 160cm tanpa kesalahan komunikasi:

Meningkatkan Imunitas Kebisingan untuk Antarmuka Serial : Buku Putih Semikonduktor Lattice (Juli 2014)

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.