Tại sao phải bận tâm với sự chẵn lẻ?


12

Tôi đang sử dụng một thiết bị ngoại vi SPI trong ứng dụng của mình. Thiết bị ngoại vi trả về các gói chứa 15 bit dữ liệu, cộng với bit chẵn lẻ để phát hiện lỗi.

Chẵn lẻ trên một thiết bị ngoại vi SPI

Do đó, tất cả các số không và tất cả các số đều vượt qua kiểm tra chẵn lẻ.

Điều này có nghĩa là vi điều khiển của tôi không thể phát hiện loại lỗi phổ biến nhất: thiết bị ngoại vi bị ngắt kết nối! Trong trường hợp này, các bit nhận được đều bằng 0, vượt qua kiểm tra chẵn lẻ.

Giả sử rằng nhà sản xuất thiết bị ngoại vi sẽ dễ dàng thực hiện chẵn lẻ lẻ, câu hỏi của tôi là: Tại sao họ lại chọn sử dụng chẵn lẻ trong trường hợp này ? Có một số lợi thế khác của Chẵn lẻ trong trường hợp này để bù cho thực tế là nó không thể bắt được loại lỗi phổ biến nhất?


6
Xin lưu ý rằng "chẵn lẻ", chẵn hoặc lẻ, là công nghệ khủng long, nó không nên được sử dụng trong các hệ thống hiện đại, chuyên nghiệp. Nó có xác suất ít hơn 50% khi bắt lỗi đơn bit, và tệ hơn nữa là lỗi đa bit. Chỉ cần quên đi việc sử dụng chẵn lẻ, sử dụng nó là một ý tưởng tồi tệ ngay cả trong những năm 1960. Nếu bạn cần xác thực một dòng dữ liệu SPI, bạn nên giám sát dữ liệu ở lớp thấp hơn, bằng cách sử dụng bộ đếm thời gian chụp đầu vào hoặc tương tự. Đồng thời kiểm tra cờ SPI để biết lỗi tràn bộ đệm, v.v.
Lundin

39
@Lundin "Nó có xác suất ít hơn 50% khi bắt lỗi đơn bit, và tệ hơn nữa là lỗi đa bit." - Nếu một bit đơn là sai, tính chẵn lẻ sẽ sai. Tính chẵn lẻ đơn giản có 100% cơ hội bắt lỗi một bit, không "dưới 50%". (tương tự, nó có 0% cơ hội bắt lỗi 2 bit và 100% một lần nữa khi bắt lỗi 3 bit).
marcelm

7
@Lundin - Vui lòng gửi ý kiến ​​của bạn cho các nhà sản xuất AMS, những người tạo ra các chip này.
Rocketmagnet

26
@Lundin Nếu bit chẵn lẻ lật, kiểm tra chẵn lẻ vẫn thất bại.
Adam Haun

4
Điều này vẫn chủ yếu là vô dụng trong hầu hết các tình huống. ⁽ᶜᶦᵗᵃᵗᶦᵒᶰ
dasdingonesin

Câu trả lời:


14

Một bit chẵn lẻ duy nhất chỉ có thể kiểm tra sự dự đoán của các số bit đơn hoặc lẻ trong các lỗi do đó mong muốn nó phát hiện khi một thiết bị ngoại vi bị ngắt kết nối có lẽ là quá nhiều.

Tuy nhiên, nhiều hệ thống sẽ tạo ra chuỗi 1 liên tục khi không có thiết bị ngoại vi và điều này có thể đạt được với điện trở kéo lên đơn giản trên đường dữ liệu trả về. Nếu có dữ liệu 8 bit thực tế được trả về bởi một thiết bị ngoại vi được kết nối thì bit chẵn lẻ sẽ bằng 0 cho số thập phân 255 được truyền đi. Vì vậy, ngay cả chẵn lẻ có thể phát hiện khi một thiết bị ngoại vi bị ngắt kết nối trong những trường hợp này.

Nếu sử dụng chẵn lẻ lẻ, 8 bit cao (thập phân 255) sẽ dẫn đến bit chẵn lẻ cao, do đó, việc hiển thị chẵn lẻ vô dụng như một phương tiện để phát hiện mất chip ngoại vi.

Ngựa cho các khóa học.


2
Ngớ ngẩn với tôi, tôi nên đã đề cập rằng ứng dụng cụ thể này có 15 bit dữ liệu và một bit chẵn lẻ. Sửa chữa ngay. Nhưng tôi vẫn nghĩ thật hợp lý khi mong đợi một kiểm tra chẵn lẻ để phát hiện một thiết bị ngoại vi hoàn toàn bị ngắt kết nối. Nó hoàn toàn nằm trong khả năng của nó, và thực sự là kiểm tra hữu ích nhất bạn có thể làm.
Rocketmagnet

1
@Rocketmagnet cũng vậy, bảng bạn đã thêm vào câu hỏi của bạn dường như là định dạng của dữ liệu được gửi đến thiết bị ngoại vi - lưu ý thuật ngữ "Phải là 0" cho bit thứ 14 - có lẽ bạn nên liên kết với bảng dữ liệu của thiết bị ?
Andy aka

3
Bảng đã sửa đổi hiển thị bit 14 là cờ lỗi và lời khuyên của tôi là sử dụng tính năng kéo lên trên dữ liệu trả về nối tiếp để làm cho dữ liệu tất cả 1 khi thiết bị bị ngắt kết nối vì sau đó bit 14 được giải mã sẽ chỉ ra sự cố.
Andy aka

1
@Trevor_G rất tiếc. Sửa đổi trong tiến trình.
Andy aka

1
Kỳ vọng thích hợp là phần mềm sử dụng bộ điều khiển spi sẽ xác nhận dữ liệu quay trở lại, nếu có rủi ro. Nếu bạn không có quyền kiểm soát một hoặc các mặt khác, thì bạn chắc chắn cần phải làm điều này trong phần mềm cấp cao hơn. Thời gian duy nhất bạn có thể để nó đi là nếu bạn kiểm soát cả hai mặt của thiết kế spi và làm cho nó đáp ứng các yêu cầu lỗi bit của bạn, điều này nghe có vẻ trong trường hợp này mà bạn không thể. Vì vậy, phần mềm của bạn nên kiểm tra tất cả các số không và tất cả các số 0, không phải công việc của bộ điều khiển spi, cũng như tính chẵn lẻ có tính hữu dụng hạn chế ...
old_timer

5

Tính chẵn lẻ hoặc bất kỳ phát hiện lỗi khối nào được dự định để phát hiện lỗi trong chính việc truyền dữ liệu. Tính chẵn lẻ không được thiết kế để phát hiện xem việc truyền dữ liệu có đang diễn ra hay không.

Cho một đường truyền, có một số loại mối quan tâm khác nhau. Hai cái có liên quan ở đây là: 1) lỗi hoàn toàn của chính đường truyền và, 2) chặn lỗi dữ liệu trong một lần truyền cụ thể. Những thứ khác ít liên quan hơn, ví dụ, điện áp đường dây không chính xác, lỗi giao thức hoặc lỗi bảo mật. Parity giúp với 2 nhưng không phải 1. Đối với một hệ thống con ở hai đầu của đường truyền để đối phó với 1 (lỗi hoàn toàn của kết nối), cần có một tính năng giao thức khác.

Tỷ lệ phát hiện lỗi của một bit chẵn lẻ thường cao hơn 50%. Chính xác thì tỷ lệ đó phụ thuộc vào các heuristic của phân đoạn dữ liệu trong giao thức. Giả sử bạn có một gói, (MSB) 1011010111011110 và có một lỗi bit duy nhất trong bit được truyền cuối cùng, kiểm tra chẵn lẻ sẽ thất bại và từ chối chính xác gói đó. Tương tự, nếu bạn gặp lỗi dữ liệu ở bit đầu tiên (bit chẵn lẻ), gói sẽ bị từ chối.

Thực hiện kiểm tra phần cứng này là cực kỳ đơn giản và không yêu cầu xử lý phức tạp. Nó rất hữu ích trong các ứng dụng có tỷ lệ lỗi bit tương đối thấp để loại bỏ những thứ như lệch đồng hồ hoặc tín hiệu đồng hồ được tạo bởi bộ xử lý chạy ngăn xếp phần mềm thu gom rác.

SPI là một giao thức liên kết vật lý được thiết kế cho các đường kết nối điện ngắn trong đó tỷ lệ lỗi một bit không phụ thuộc nhiều vào sự mất dòng. Nếu bạn đang chạy một thứ gì đó trên một dòng mất mát, bạn sẽ cần một thứ gì đó mạnh mẽ hơn so với tính chẵn lẻ. Đây không thực sự là những gì SPI làm.

Để kiểm tra xem một thiết bị có còn được kết nối hay không, hãy thử thứ gì đó cao hơn trong ngăn xếp. Khi so sánh, TCP / IP (IP, cụ thể) không chỉ định các bit chẵn lẻ trong khi nhiều thông số kỹ thuật Ethernet 802.x làm. IP, mặt khác, có một phức tạp, "bạn có ở đó không?" giao thức. Bạn đang chạy gì trên SPI? Câu trả lời cho quản lý liên kết dữ liệu có lẽ là có.


1
802.3 và .11 sử dụng CRC32; IP và TCP và (tùy chọn) UDP sử dụng tổng cộng 16 bit của một người, do thực tế rất ít máy hoặc thậm chí ALU ngày nay là 1sC được thực hiện chủ yếu bằng phép cộng không dấu cộng với mang theo.
dave_thndry_085

Vấn đề là sự tương đương có thể dễ dàng phát hiện ra sự thất bại hoàn toàn của chính dòng. Nếu tôi lấy lại tất cả 1 hoặc tất cả 0, đó sẽ là một thất bại.
Rocketmagnet

4

Không có lợi ích rõ ràng của sự chẵn lẻ so với lẻ. Trong các sơ đồ truyền thông và lưu trữ, phân cực chẵn lẻ (lẻ hoặc chẵn) nên được chọn để bẫy các chế độ thất bại có khả năng xảy ra hoặc có khả năng cao nhất.

Như bạn nói, một dây nhận dữ liệu bị hỏng hoặc mục tiêu không phản hồi cũng có thể dẫn đến đường MISO bị kẹt cao hoặc thấp.

Khi giao tiếp số bit chẵn, chẳng hạn như byte qua SPI, một bit chẵn lẻ lẻ sẽ phát hiện ra lỗi trong dữ liệu all-1 hoặc all-0 này nhưng thậm chí là chẵn lẻ sẽ không.

Tuy nhiên, không có người chiến thắng rõ ràng như vậy khi giao tiếp một số bit lẻ, chẳng hạn như trong ứng dụng của bạn có 15 bit qua SPI. Ngay cả tính chẵn lẻ cũng sẽ phát hiện ra lỗi trong trường hợp của tất cả 1 nhưng bỏ lỡ trường hợp của tất cả 0. Ngược lại, tính chẵn lẻ sẽ phát hiện ra lỗi trong trường hợp của tất cả 0 nhưng bỏ lỡ trường hợp của tất cả 1.


Trên thực tế, có, rõ ràng là trong trường hợp này . Như tôi đã giải thích trong câu hỏi, chẵn lẻ lẻ sẽ có thể phát hiện: thiếu chip, lỗi ngắt kết nối và lỗi cáp, trong khi ngay cả chẵn lẻ cũng không thể.
Rocketmagnet

0

Có rất ít sự khác biệt về lợi ích với tính chẵn lẻ hoặc chẵn. Một cái có thể được chuyển đổi sang cái khác với một cổng đảo ngược duy nhất. Mục đích chính của bit chẵn lẻ là chỉ kiểm tra 15 bit trong giá trị đó. Nó không phải là mục đích của nó để làm bất kỳ điều gì khác. Việc cái này hay cái kia có thể phát hiện ra một con chip bị thiếu, bị lỗi hoặc bị ngắt kết nối không phải là một điều đáng cân nhắc. Bạn đề cập rằng bị ngắt kết nối là loại lỗi phổ biến nhất trong trường hợp của bạn. Không quan trọng. Bit chẵn lẻ không có để phát hiện loại lỗi đó.


0

Bạn có quyền đặt câu hỏi này, tôi có cùng lời chỉ trích về sự ngang nhau. Với số bit dữ liệu lẻ trước khi thêm bit chẵn lẻ, như trong ví dụ của bạn và như thường thấy, thậm chí tính chẵn lẻ cho phép tất cả 0 và tất cả 1 là các từ được truyền hợp lệ, vô dụng trong việc phát hiện liên kết chết hoặc chip chết. Câu trả lời trước của Tony M là sai về vấn đề này. Xem bảng ví dụ dữ liệu 7 bit ở đây để biết bằng chứng: - https://en.wikipedia.org/wiki/Parity_bit

Tuy nhiên, tính chẵn lẻ sẽ chèn một bit trạng thái ngược lại trong tất cả các trường hợp 0 ​​hoặc tất cả 1 giây, do đó chứng minh rằng liên kết và chip còn sống và sẽ là lựa chọn tốt hơn nhiều trong trường hợp này.

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.