Asenkron seri iletişim bugünlerde bile elektronik cihazlar arasında yaygın bir şekilde yayıldığı için, zaman zaman çoğumuzun böyle bir soru ile karşılaştığına inanıyorum. Bir elektronik cihaz D
ve PC
seri hatla bağlı (RS-232 veya benzeri) bir bilgisayarı ve sürekli bilgi alışverişi için gerekli olanları düşünün . Yani PC
, her biri bir komut çerçevesi gönderiyor X ms
ve her biri D
durum raporu / telemetri çerçevesiyle Y ms
yanıt veriyor (Rapor isteklere yanıt olarak veya bağımsız olarak gönderilebilir - burada gerçekten önemli değil). İletişim çerçeveleri herhangi bir isteğe bağlı ikili veri içerebilir . İletişim çerçevelerinin sabit uzunlukta paketler olduğunu varsayalım.
Sorun:
Protokol sürekli olduğu için, alıcı taraf senkronizasyonu kaybedebilir veya devam etmekte olan bir çerçevenin ortasında sadece "birleştirme" yapabilir, bu nedenle sadece çerçevenin başlangıcının (SOF) nerede olduğunu bilemez. Bir veri, SOF'a göre pozisyonuna bağlı olarak farklı anlamlara sahipse, alınan veriler potansiyel olarak sonsuza dek bozulacaktır.
Gerekli çözüm
SOF'u kısa kurtarma süresiyle tespit etmek için güvenilir sınırlandırma / senkronizasyon şeması (yani, senkronizasyon için 1 kare den daha uzun sürmemelidir).
Şu an bildiğim teknikler (ve bazılarını kullanıyorum):
1) Başlık / sağlama toplamı - önceden tanımlanmış bayt değeri olarak SOF. Çerçeve sonunda sağlama toplamı.
- Artıları: Basit.
- Eksileri: Güvenilir değil. Bilinmeyen iyileşme süresi.
2) Bayt doldurma:
- Artıları: Güvenilir, hızlı kurtarma, herhangi bir donanım ile birlikte kullanılabilir
- Eksileri: Sabit boyutlu çerçeve tabanlı iletişim için uygun değil
3) 9. bit işaretlemesi - her bir baytı ek bit ile hazırlayın, SOF ile işaretli 1
ve veri baytları ile işaretlenir 0
:
- Artıları: Güvenilir, hızlı kurtarma
- Eksileri: Donanım desteği gerektirir.
PC
Donanım ve yazılımın çoğu tarafından doğrudan desteklenmez .
4) 8. bit işaretleme - yukarıdakilerin emülasyonu, 9. yerine 8. biti kullanırken, her veri sözcüğü için yalnızca 7 bit bırakıyor.
- Artıları: Güvenilir, hızlı kurtarma, herhangi bir donanım ile birlikte kullanılabilir.
- Eksileri: 7 bitlik gösterime / konvansiyonel 8-bit gösterime / den bir kodlama / kod çözme şeması gerektirir. Biraz savurgan.
5) Zaman aşımı tabanlı - SOF'u belirli bir boşta kalma süresinden sonra gelen ilk bayt olarak kabul edin.
- Artıları: Genel veri yok, basit.
- Eksileri: Bu güvenilir değil. Windows PC gibi zayıf zamanlama sistemleri ile iyi çalışmaz. Potansiyel verimlilik ek yükü.
Soru: Sorunu çözmek için diğer olası teknikler / çözümler nelerdir? Kolayca çalışılabilen yukarıdaki listedeki eksileri işaret edebilir misiniz ? Sistem protokolünüzü nasıl (veya siz) tasarlarsınız?