Làm thế nào để tạo một giao thức truyền thông UART an toàn?


8

Tôi đã tự hỏi làm thế nào để tạo một giao thức truyền thông UART / USB an toàn. Tôi cần nó để liên lạc giữa vi điều khiển và PC. Tôi có ~ 10 lệnh và nghĩ rằng tôi sẽ sử dụng 10 lệnh xác nhận riêng biệt cho mỗi lệnh.

Việc trao đổi sẽ diễn ra như thế này:

  • PC gửi lệnh đánh thức qua UART
  • PhaC nhận ra rằng PC được kết nối và gửi lệnh của mình tới PC, vd. 0x01
  • PC thực hiện những gì nó được yêu cầu (một số nội dung phần cứng) và trả lời ~0x01khi hoàn thành (tôi phủ định số để tạo "khoảng cách" lớn hơn giữa hai số)
  • Tổ ong biết rằng nó đã gửi 0x01và đang mong đợi ~0x01từ PC. Nếu có thứ gì đó không ~0x01quay trở lại, thìCraftC sẽ biết rằng đã xảy ra lỗi và sẽ gửi yêu cầu mới hoặc thông báo lỗi

Trường hợp mà LOCC gửi 0x01, PC hiểu 0x02và gửi ~0x02lại, nhưng LOCC đọc ~0x01do một số tiếng ồn sẽ khá tệ.

Làm thế nào an toàn là về mặt truyền tải, hoặc làm thế nào tôi có thể làm cho điều này an toàn hơn?


1
Bạn có thể muốn xem lại câu hỏi liên quan của tôi và câu trả lời rất hay cho nó.
Eugene Sh.

1
Bằng cách "an toàn hơn" tôi cho rằng bạn có nghĩa là ít bị lỗi truyền hơn, không thêm tiền điện tử, v.v. để chống nghe lén và những gì không. Thậm chí đó chỉ là một lĩnh vực khá rộng lớn: en.wikipedia.org/wiki/Error_detection_and_correction
Fizz

2
Bạn có thể muốn tìm kiếm mã hóa Hamming . Nó sẽ mất tới 16 lệnh (4 bit) và mở rộng chúng theo cách có hệ thống thành 7 bit (có thể được truyền qua UART tiêu chuẩn). Bạn có thể chọn sửa bất kỳ lỗi bit đơn nào hoặc phát hiện xem có bất kỳ hai bit nào bị nhận sai hay không.
Neil_UK

2
1) 7 bit + một bit chẵn lẻ là một cách và nó đơn giản. Nó sẽ không bắt được tất cả các lỗi có thể nhưng sẽ bắt được nhiều. 2) Một phương thức mạnh mẽ hơn là gửi hai byte, đầu tiên là với lệnh thực tế và thứ hai với 'không' của lệnh đầu tiên. 3) Thậm chí tốt hơn là gửi một byte 'lệnh đến', theo sau là lệnh, theo sau là lời khen của lệnh, theo sau là 'cuối byte lệnh. Nên chọn các byte 'lệnh đến' và 'kết thúc lệnh' để không chồng
lấp

1
Nếu bạn chỉ cần 10 lệnh, bạn có thể điều chỉnh hai bản sao trong mỗi byte (để dự phòng), cộng với các bit chẵn lẻ. Hoặc vì bạn có không gian ký hiệu gồm 256 ký hiệu và chỉ cần 10 ký hiệu, bạn chỉ cần chọn các ký hiệu khác nhau tối đa (tất cả các ký hiệu khác nhau bởi nhiều bit) hoặc chỉ chọn các ký hiệu có số chẵn và số không. Bạn chắc chắn không phải lo lắng về các lỗi bit đơn.
mkeith

Câu trả lời:


1

Tôi nghĩ bạn nên xác định các lệnh dài hơn bao gồm cả tổng kiểm tra hoặc CRC và chờ điều kiện ACK / NACK hoặc lỗi.

Bạn có thể lấy ví dụ từ các giao thức dễ dàng như TFTP ( RFC 1350 )


1

Để giao tiếp an toàn, bạn nên xem xét tất cả các chủ đề có thể đến đường dây liên lạc của bạn. Do đó, bạn cần xác định, nếu hệ thống có thể truy cập từ bên ngoài (hệ thống bên thứ ba, ví dụ như không dây)

Nói chung, bạn phải suy nghĩ về các chủ đề sau:

  • sự lặp lại
  • vết thương
  • sắp xếp lại
  • Thao tác
  • sự chậm trễ
  • chèn
  • tham nhũng

Các biện pháp tiêu chuẩn chống lại chủ đề là:

  • Trình tự hoặc dấu thời gian
  • giám sát thời gian
  • mã nguồn và đích duy nhất
  • phản ứng
  • tiền lệ nhận dạng
  • một số loại tổng kiểm tra, mã băm ...
  • kỹ thuật cryprogpson một số trong số này bạn đã thực hiện với protocoll đơn giản của bạn.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.