Vì giao tiếp nối tiếp không đồng bộ được lan truyền rộng rãi giữa các thiết bị điện tử ngay cả ngày nay, tôi tin rằng nhiều người trong chúng ta thỉnh thoảng gặp phải một câu hỏi như vậy. Xem xét một thiết bị điện tử D
và máy tính PC
được kết nối với đường nối tiếp (RS-232 hoặc tương tự) và được yêu cầu trao đổi thông tin liên tục . Tức PC
là đang gửi từng khung lệnh X ms
và D
đang trả lời từng khung báo cáo trạng thái / từ xa Y ms
(Báo cáo có thể được gửi dưới dạng phản hồi cho các yêu cầu hoặc độc lập - không thực sự quan trọng ở đây). Các khung giao tiếp có thể chứa bất kỳ dữ liệu nhị phân tùy ý . Giả sử các khung giao tiếp là các gói có độ dài cố định.
Vấn đề:
Vì giao thức là liên tục, phía nhận có thể mất đồng bộ hóa hoặc chỉ "tham gia" ở giữa khung được gửi liên tục, do đó, nó sẽ không biết bắt đầu của khung (SOF) ở đâu. Dữ liệu có ý nghĩa khác nhau dựa trên vị trí của nó tương đối với SOF, dữ liệu nhận được sẽ bị hỏng, có khả năng là mãi mãi.
Các giải pháp cần thiết
Lược đồ phân định / đồng bộ hóa đáng tin cậy để phát hiện SOF với thời gian phục hồi ngắn (nghĩa là không nên mất nhiều hơn, giả sử 1 khung để đồng bộ hóa lại).
Các kỹ thuật hiện có mà tôi biết (và sử dụng một số) về:
1) Tiêu đề / tổng kiểm tra - SOF là giá trị byte được xác định trước. Tổng kiểm tra vào cuối khung.
- Ưu điểm: Đơn giản.
- Nhược điểm: Không đáng tin cậy. Thời gian phục hồi không xác định.
2) Byte nhồi:
- Ưu điểm: Đáng tin cậy, phục hồi nhanh, có thể được sử dụng với bất kỳ phần cứng nào
- Nhược điểm: Không phù hợp với giao tiếp dựa trên khung có kích thước cố định
3) Đánh dấu bit thứ 9 - thêm vào mỗi byte bằng bit bổ sung, trong khi SOF được đánh dấu 1
và các byte dữ liệu được đánh dấu bằng 0
:
- Ưu điểm: Đáng tin cậy, phục hồi nhanh
- Nhược điểm: Yêu cầu hỗ trợ phần cứng. Không được hỗ trợ trực tiếp bởi hầu hết các
PC
phần cứng và phần mềm.
4) Đánh dấu bit thứ 8 - loại mô phỏng ở trên, trong khi sử dụng bit thứ 8 thay vì thứ 9, chỉ để lại 7 bit cho mỗi từ dữ liệu.
- Ưu điểm: Đáng tin cậy, phục hồi nhanh, có thể được sử dụng với bất kỳ phần cứng nào.
- Nhược điểm: Yêu cầu sơ đồ mã hóa / giải mã từ / đến biểu diễn 8 bit thông thường đến / từ biểu diễn 7 bit. Hơi lãng phí.
5) Dựa trên thời gian chờ - giả sử SOF là byte đầu tiên đến sau một số thời gian nhàn rỗi được xác định.
- Ưu điểm: Không có dữ liệu trên đầu, đơn giản.
- Nhược điểm: Không đáng tin cậy. Sẽ không hoạt động tốt với các hệ thống thời gian kém như Windows PC. Chi phí thông lượng tiềm năng.
Câu hỏi: Các kỹ thuật / giải pháp khả thi khác tồn tại để giải quyết vấn đề là gì? Bạn có thể chỉ ra những nhược điểm trong danh sách trên có thể dễ dàng làm việc xung quanh, do đó loại bỏ chúng? Làm thế nào để bạn (hoặc bạn sẽ) thiết kế giao thức hệ thống của bạn?