Karena komunikasi serial asinkron tersebar luas di antara perangkat elektronik, bahkan saat ini, saya yakin banyak dari kita telah mengalami pertanyaan seperti itu dari waktu ke waktu. Pertimbangkan perangkat elektronik D
dan komputer PC
yang terhubung dengan jalur serial (RS-232 atau serupa) dan diperlukan untuk pertukaran informasi secara terus-menerus . Yaitu PC
masing-masing mengirimkan kerangka perintah X ms
, dan masing-masing D
membalas dengan laporan status / bingkai telemetri Y ms
(Laporan dapat dikirim sebagai respons terhadap permintaan atau secara mandiri - tidak masalah di sini). Frame komunikasi dapat berisi data biner sembarang . Dengan asumsi frame komunikasi adalah paket dengan panjang tetap.
Masalah:
Karena protokol ini kontinu, sisi penerima mungkin kehilangan sinkronisasi atau hanya "bergabung" di tengah frame yang sedang dikirim, sehingga tidak akan tahu di mana awal frame (SOF) berada. Jika data memiliki arti yang berbeda berdasarkan posisinya relatif terhadap SOF, data yang diterima akan rusak, berpotensi selamanya.
Solusi yang dibutuhkan
Skema pembatas / sinkronisasi yang andal untuk mendeteksi SOF dengan waktu pemulihan yang singkat (artinya tidak perlu lebih dari, katakan 1 frame untuk mensinkronisasi ulang).
Teknik-teknik yang ada saya sadari (dan menggunakan beberapa) dari:
1) Header / checksum - SOF sebagai nilai byte yang telah ditentukan. Checksum di ujung bingkai.
- Pro: Sederhana.
- Cons: Tidak dapat diandalkan. Waktu pemulihan tidak diketahui.
2) Byte isian:
- Kelebihan: Andal, pemulihan cepat, dapat digunakan dengan perangkat keras apa pun
- Cons: Tidak cocok untuk komunikasi berbasis bingkai ukuran tetap
3) Penandaan bit 9 - tambahkan setiap byte dengan bit tambahan, sementara SOF ditandai dengan 1
dan byte data ditandai dengan 0
:
- Kelebihan: Andal, pemulihan cepat
- Cons: Membutuhkan dukungan perangkat keras. Tidak didukung langsung oleh sebagian besar
PC
perangkat keras dan perangkat lunak.
4) penandaan bit ke-8 - jenis emulasi di atas, saat menggunakan bit ke-8 dan bukan ke-9, yang hanya menyisakan 7 bit untuk setiap kata data.
- Kelebihan: Andal, pemulihan cepat, dapat digunakan dengan perangkat keras apa pun.
- Cons: Membutuhkan skema pengkodean / decoding dari / ke representasi 8-bit konvensional ke / dari representasi 7-bit. Agak boros.
5) Berbasis waktu habis - menganggap SOF sebagai byte pertama yang datang setelah waktu idle tertentu.
- Pro: Tidak ada data overhead, sederhana.
- Cons: Tidak bisa diandalkan. Tidak akan bekerja dengan baik dengan sistem pengaturan waktu yang buruk seperti, katakanlah, PC Windows. Potensi overhead throughput.
Pertanyaan: Apa teknik / solusi lain yang ada untuk mengatasi masalah? Bisakah Anda menunjukkan kontra di daftar di atas yang dapat dengan mudah ditangani, sehingga menghapusnya? Bagaimana Anda (atau akan) merancang protokol sistem Anda?