Apa jenis transfer USB terbaik (bulk, interrupt, Isochronous Transfer) yang akan digunakan untuk mengimplementasikan osiloskop USB?

20

Saya ingin membuat osiloskop USB. Saya membaca tentang berbagai jenis transfer USB . Jenis transfer mana yang terbaik untuk mentransfer sampel ADC yang dikumpulkan dari osiloskop USB ke PC?

Berikut adalah beberapa temuan saya. Harap perbaiki saya dan juga akan lebih baik jika ada yang menyarankan jenis transfer yang baik.

  1. Transfer isochronous - Kemungkinan hilangnya data. Tidak bagus untuk osiloskop karena setiap item data berharga. Berapa banyak data yang bisa hilang?
  2. Mode interupsi - Saya tidak tahu apakah itu akan membanjiri koneksi USB
  3. Mode massal - Tampaknya yang terbaik bagi saya karena tidak ada kehilangan data
  4. Kontrol transfer - tidak cocok karena tidak dimaksudkan untuk mentransfer data
robomon
sumber
2
Dari apa yang saya baca, sebagian besar lingkup dengan usb menggunakan mode curah untuk mengirim tangkapan layar dari ruang lingkup.
Pejalan kaki
Agaknya jika Anda pergi dengan mode isochronous Anda dapat memesan sedikit bandwidth tambahan untuk koreksi kesalahan.
user253751
Atau untuk jumlah berlebihan, PCIe DMA menggelitik kesukaanku.
Mitch

Jawaban:

28

Transfer massal tidak kehilangan data, tetapi mereka tidak memiliki bandwidth minimum yang dijamin. (Di sisi lain, mereka dapat mencapai kecepatan yang lebih tinggi, karena mereka dapat menggunakan semua bandwidth yang sebenarnya tidak digunakan oleh transfer lain.)

Apa yang terjadi ketika transfer data osiloskop Anda tertunda (baik karena kesalahan, atau karena perangkat lain), dan data baru menumpuk? Apakah Anda menghentikan perangkat sampai data lama ditransmisikan, atau apakah Anda membuang data lama untuk dapat mengirimkan data saat ini?

Transfer isochronous dirancang untuk data 'real-time'. Anda tidak punya pilihan tentang penanganan kesalahan, tetapi bandwidth Anda dicadangkan di bus.

  • Jika Anda ingin menampilkan data yang direkam secara real time, Anda harus menggunakan transfer isochronous.
  • Jika Anda ingin mentransfer data yang direkam ke PC setelah pengukuran selesai, Anda harus menggunakan transfer massal.
CL.
sumber
10

Pertanyaannya hampir sepenuhnya independen dari penggunaan Anda sebagai osiloskop, dan sepenuhnya diatur oleh jenis komunikasi yang Anda minta USB lakukan. Sebagai contoh:

  • Osiloskop yang memiliki buffer (multi-megabita) besar secara internal dan dirancang untuk menjalankan tes singkat terlebih dahulu, kemudian mengunggah data, akan menggunakan transfer yang seluruhnya massal. Tidak perlu untuk bandwidth yang dijamin, sehingga volume tinggi dengan pengecekan kesalahan transfer massal akan menjadi yang terbaik.
  • Sebuah osiloskop yang dirancang untuk dihubungkan secara terus-menerus ke sirkuit yang diuji secara terus-menerus dan harus beroperasi dalam "waktu nyata" (baca: jangka waktu deterministik) akan memilih isochronus. Massal tidak menawarkan jaminan runtime deterministik, dan Anda tidak dapat mengatur pipa Anda untuk memiliki bandwidth yang dipesan. Anda harus melakukan koreksi kesalahan sendiri, tetapi setidaknya itu bisa dilakukan secara deterministik.
  • Sebuah osiloskop dengan umpan "langsung" untuk dilihat manusia ditambah penangkapan kecepatan tinggi pada pemicu dapat mengatur dua titik akhir, satu isochronus untuk mengimbangi umpan langsung dan transfer massal untuk data yang dipicu. Untuk konsumsi manusia, kehilangan satu atau dua bingkai bukanlah masalah besar, jadi tidak ada alasan untuk khawatir tentang kurangnya pengecekan kesalahan pada isochronus. Namun, ketika datang ke data aktual, Anda mentransfernya secara massal untuk koreksi kesalahan.
  • Orang mungkin menggunakan sirkuit ini sebagai bagian dari sistem live. Mungkin tidak hanya osiloskop tetapi juga perlindungan terhadap sinyal yang menunjukkan sirkuit meninggalkan rentang operasi dan perlu dimatikan oleh komputer. Dalam hal ini, Anda dapat menambahkan titik akhir interupsi ke sistem, untuk mendapatkan latensi yang dijamin (dan beberapa penanganan kesalahan yang terdefinisi dengan baik) untuk memastikan masalah diperbaiki sebelum rusak sirkuit.

Setelah Anda tahu jenis data apa yang Anda transmisikan, dan Kualitas Layanan (QoS) menyatakan bahwa data harus sampai di bawah, maka Anda dapat memutuskan mekanisme transfer USB mana yang harus dilakukan. Anda akan tahu bahwa Anda siap untuk membuat keputusan ini ketika kata "osiloskop" tidak lagi diperlukan untuk menggambarkan data dan QoS yang Anda butuhkan. Maka Anda tahu itu dalam kata-kata yang cukup objektif untuk mulai mengatasi masalah ini.

Cort Ammon - Pulihkan Monica
sumber
4

Untuk osiloskop, bandwidth transfer adalah parameter yang ingin Anda maksimalkan. Transfer massal dirancang khusus untuk bandwidth tinggi, sehingga merupakan pilihan yang tepat. Sementara transfer isochronous dan interrupt memberi batasan pada latensi, mereka hanya ditujukan untuk aliran data bandwidth rendah hingga menengah.

Dave Tweed
sumber
3

Cukup gunakan transfer massal. Osiloskop sebenarnya bukan perangkat kecepatan data tinggi. Kecuali Anda berencana membuat desain tipe fosfor digital, osiloskop sebenarnya hanyalah jendela ke bagian gelombang yang sangat kecil. Sebagai contoh, katakanlah Anda ingin menampilkan 1000 piksel horizontal dan menyegarkan tampilan sekitar 30Hz. Jika sampel masing-masing 8-bit (ini khas) dan ada dua saluran, Anda hanya melihat 60.000 byte / detik. USB kecepatan penuh dapat melakukan sekitar 1.000.000 byte / detik, sehingga Anda menggunakan kurang dari 6% kapasitas throughput bus. Itu memberi banyak waktu untuk membiarkan mode transfer massal melakukan tugasnya (memperbaiki kesalahan, mengatasi lalu lintas bus lain), dan sepertinya Anda tidak akan pernah menemukan konfigurasi bus kehidupan nyata yang tidak akan dapat mengalokasikan Anda cukup bandwidth untuk data sebanyak itu.

Jon
sumber