RS232 vs USB CDC kualitas layanan / haruskah pesan mengandung checksum?

13

Apakah USB memiliki jaminan kualitas layanan untuk data yang dikirim antara perangkat USB-CDC saya dan host USB?

Saya tahu dengan RS232 tradisional dalam situasi bising (mis. Port diagnostik otomotif) bit-bit buruk cukup sering terjadi sehingga checksum penting bagi protokol. Jika saya mengadaptasi protokol seperti itu ke aplikasi USB murni, dapatkah saya dengan aman menghilangkan checksum dan rutinitas penanganan kesalahan terkait?

Sebagai referensi, saya menggunakan AT91SAM7S256 dengan kerangka kerja USB-CDC yang disediakan oleh Atmel.

Memperbarui:

Saya menggunakan Google-Fu saya sedikit lebih lama untuk masalah ini dan menemukan artikel ini yang menjelaskan subkelas CDC untuk emulasi Ethernet dan menyatakan:

Melalui kabel USB, frame Ethernet yang dienkapsulasi mengalir mulai dengan alamat MAC tujuan dan berakhir tepat sebelum frame checksum. (Frame checksum tidak diperlukan karena USB adalah transportasi yang andal.)

Mereka mungkin berarti USB-CDC adalah transportasi yang andal, bukan USB pada umumnya, karena beberapa kelas perangkat yang ditujukan untuk data bursty throughput tinggi (webcam?) Mungkin tidak ingin mengisi buffer jika suatu program tidak dapat mengumpulkan data dengan cukup cepat.

Saya masih ingin konfirmasi tambahan tentang ini.

Steven T. Snyder
sumber

Jawaban:

12

Ini tergantung pada jenis titik akhir yang digunakan perangkat Anda.

Singkatnya, ringkasan singkat dari USB :

Transfer Interupsi

  • Latency Dijamin
  • Pipa Stream - Searah
  • Deteksi kesalahan dan coba lagi periode berikutnya.

Transfer Isokron

  • Transfer Isochronous memberikan akses Dijamin ke bandwidth USB.
  • Latensi terbatas.
  • Pipa Stream - Searah
  • Deteksi kesalahan melalui CRC, tetapi tidak ada coba lagi atau jaminan pengiriman.
  • Hanya mode kecepatan penuh & tinggi.
  • Tidak ada pengubahan data.

Transfer Massal

  • Digunakan untuk mentransfer data meledak besar.
  • Deteksi kesalahan melalui CRC, dengan jaminan pengiriman.
  • Tidak ada jaminan bandwidth atau latensi minimum.
  • Stream Pipe - Unidirectional Mode penuh & kecepatan tinggi saja.

Untuk menjawab pertanyaan Anda dengan benar, Anda perlu mengetahui mode transfer apa yang digunakan di bawahnya untuk mengimplementasikan perangkat CDC. Spesifikasi kelas perangkat CDC mungkin merupakan titik awal. Jika Anda memiliki kode sumber untuk perangkat maka itu akan lebih baik. Saya tidak terbiasa dengan kelas CDC jadi saya tidak bisa mengomentari standar implementasinya, tetapi pada pandangan pertama pada beberapa dokumen dan google, tampaknya ada beberapa fleksibilitas dalam implementasi.

EDIT

Setelah membaca dokumen Atmel yang Anda tautkan, tampaknya itu terserah Anda!

Model Kontrol Abstrak membutuhkan dua antarmuka, satu Antarmuka Kelas Komunikasi dan satu Antarmuka Kelas Data. Masing-masing harus memiliki dua titik akhir terkait. Yang pertama harus memiliki satu titik akhir yang didedikasikan untuk manajemen perangkat (titik akhir Kontrol default 0) dan satu untuk pemberitahuan acara (titik akhir IN Interupsi tambahan).

Antarmuka Kelas Data membutuhkan dua titik akhir untuk membawa data ke dan dari host. Bergantung pada aplikasinya, titik akhir ini dapat berupa Massal atau Isoron. Dalam kasus konverter USB ke serial, menggunakan titik akhir Massal mungkin lebih tepat, karena keandalan transmisi penting dan transfer data tidak kritis terhadap waktu.

Jadi dalam implementasi Anda, pastikan untuk menggunakan transfer massal pada antarmuka Kelas Data Anda untuk memastikan transportasi yang andal.

Jon L
sumber
Jawaban yang bagus Ringkasan jenis endpoint sangat berguna. Kode Atmel untuk proyek seri CDC yang dijelaskan dalam pdf yang ditautkan diatur untuk bertindak sebagai adaptor USB ke serial, sehingga sudah dikonfigurasi untuk menggunakan titik akhir massal. Luar biasa!
Steven T. Snyder
3

USB mungkin merupakan protokol yang relatif andal, tetapi tidak semua perangkat dan driver yang menggunakan CDC dapat diandalkan. Saya telah melihat beberapa perangkat berbeda yang memiliki kebiasaan yang agak mengganggu yaitu melewatkan byte data yang dikirim oleh PC. Mengamati data pada ruang lingkup menunjukkan bahwa masalahnya bukan pada perangkat penerima yang dibanjiri - beberapa byte data hilang begitu saja (saya bisa menangkap seluruh paket pada ruang lingkup; header dan footer keduanya ada, tetapi beberapa dari byte di antara mereka yang hilang). Saya tidak yakin apa yang salah menyebabkan perilaku itu, tetapi mencoba mengirim data terlalu cepat tampaknya menjadi faktor penyebabnya.

supercat
sumber