왜 평등을 고집합니까?


12

응용 프로그램에서 SPI 주변 장치를 사용하고 있습니다. 주변 장치는 15 개의 데이터 비트와 오류 감지를위한 짝수 패리티 비트를 포함하는 패킷을 반환합니다.

SPI 주변 장치의 패리티

따라서 모두 0과 모두 1이 패리티 검사를 통과합니다.

이것은 내 마이크로 컨트롤러가 가장 일반적인 유형의 오류를 감지 할 수 없음을 의미합니다. 이 경우 수신 된 비트는 모두 0이며 패리티 검사를 통과합니다.

주변 장치 제조업체가 홀수 패리티를 구현하는 것이 쉬울 것이라고 가정하면 내 질문은 다음 과 같습니다 . 이 경우 짝수 패리티가 가장 일반적인 유형의 오류를 잡을 수 없다는 사실을 보완하기 위해 짝수 패리티의 다른 이점이 있습니까?


6
짝수 또는 홀수 인 "패리티"는 공룡 기술이므로 현대적이고 전문적인 시스템에는 사용해서는 안됩니다. 단일 비트 오류를 ​​잡을 확률은 50 % 미만이며 다중 비트 오류의 경우 여전히 더 나쁩니다. 패리티를 사용하는 것을 잊어 버려, 1960 년대에도 도덕적 아이디어를 사용했습니다. SPI 데이터 라인의 유효성을 검증해야하는 경우 입력 캡처 타이머 등을 사용하여 하위 계층의 데이터를 감독해야합니다. 버퍼 오버런 등에 대한 SPI 플래그도 확인하십시오.
Lundin

39
@Lundin "단일 비트 오류를 ​​잡을 확률이 50 % 미만이며 다중 비트 오류의 경우 여전히 더 나쁩니다." -단일 비트가 잘못되면 패리티가 잘못됩니다. 단순 패리티는 "50 % 미만"이 아닌 단일 비트 오류를 ​​잡을 확률이 100 %입니다. 유사하게 2 비트 오류를 ​​잡을 확률은 0 %이고 3 비트 오류를 ​​잡을 때는 100 %입니다.
marcelm

7
@Lundin-이 칩을 만드는 AMS 제조사에게 의견을 보내주십시오.
Rocketmagnet

26
@Lundin 패리티 비트가 뒤집어지면 패리티 검사가 여전히 실패합니다.
Adam Haun

4
이것은 대부분의 상황에서 여전히 쓸모가 없습니다. ⁽ᶜᶦᵗᵃᵗᶦᵒᶰ ᶰᵉᵉᵈᵉᵈ⁾
dasdingonesin

답변:


14

단일 패리티 비트는 오류가있는 단일 또는 홀수 비트의 존재 만 검사 할 수 있으므로 주변 장치의 연결이 끊어졌을 때이를 감지하는 것이 너무 많은 것으로 예상됩니다.

그러나 많은 시스템은 주변 장치가 없을 때 연속적인 일련의 1을 생성하며 이는 리턴 데이터 라인의 간단한 풀업 저항으로 달성 할 수 있습니다. 연결된 주변 장치에서 실제 8 비트 데이터가 반환되면 10 진수 255가 전송 될 때 패리티 비트가 0이됩니다. 따라서 이러한 상황에서 패리티조차도 주변 장치의 연결이 끊어진시기를 감지 할 수 있습니다.

홀수 패리티가 사용 된 경우 8 개의 높은 비트 (10 진수 255)는 높은 패리티 비트를 초래하므로 주변 칩의 손실을 감지하는 수단으로 홀수 패리티를 사용할 수 없게됩니다.

코스 말.


2
어리석은 나는이 특정 응용 프로그램에 15 개의 데이터 비트와 하나의 패리티 비트가 있다고 언급 했어야합니다. 지금 수정되었습니다. 그러나 여전히 완전히 분리 된 주변 장치를 감지하는 패리티 검사를 기대하는 것이 합리적이라고 생각합니다. 그것은 그 능력 안에 있으며 실제로 당신이 할 수있는 가장 유용한 점검입니다.
Rocketmagnet

1
@Rocketmagnet, 또한 질문에 추가 한 표는 주변 장치로 전송되는 데이터 형식에 대한 것으로 보입니다-14 비트에 대해 "0이 있어야합니다"라는 용어에 유의하십시오-아마도 장치 데이터 시트에 링크해야합니다 ?
Andy 일명

3
수정 된 테이블은 오류 플래그로 비트 14를 표시하며 내 조언은 직렬 리턴 데이터에서 풀업을 사용하여 장치 연결이 끊어졌을 때 데이터를 모두 1로 만드는 것입니다. 그러면 디코딩 된 비트 14가 문제를 나타냅니다.
Andy 일명

1
@Trevor_G 죄송합니다. 진행 중입니다.
Andy 일명

1
spi 컨트롤러를 사용하는 소프트웨어는 위험이있는 경우 다시 오는 데이터의 유효성을 검사해야합니다. 한쪽 또는 다른 쪽을 제어 할 수없는 경우 상위 레벨 소프트웨어에서이를 수행해야합니다. 당신이 할 수있는 유일한 시간은 spi 디자인의 양면을 제어하고 비트 오류 요구 사항을 충족시키는 것입니다.이 경우에는 소리가 나지 않습니다. 따라서 소프트웨어는 spi 컨트롤러의 작업이 아니라 유용성이 제한된 패리티가 아닌 모든 0과 모든 0을 검사해야합니다.
old_timer

5

패리티 또는 모든 블록 오류 감지는 데이터 전송 자체 내의 오류를 감지하기위한 것입니다. 패리티가되어 있지 데이터 전송이 일어나고 있는지 여부를 감지하도록 설계.

전송 라인이 주어지면 몇 가지 다른 종류의 우려가 있습니다. 여기서 관련된 두 가지는 : 1) 회선 자체의 명백한 고장 및 2) 특정 전송 내의 데이터 오류를 차단합니다. 덜 적절한 다른 것들은 예를 들어, 잘못된 라인 전압, 프로토콜 오류 또는 보안 오류입니다. 패리티는 2가 아닌 1에 도움이됩니다. 전송 회선의 한쪽 끝에있는 서브 시스템이 1 (직접 연결 실패)에 대처하려면 다른 프로토콜 기능이 필요합니다.

단일 패리티 비트의 오류 탐지 속도는 종종 50 %보다 높습니다. 이 속도가 정확히 무엇인지는 프로토콜에서 데이터 세그먼트의 추론에 따라 다릅니다. 패킷 (MSB) 1011010111011110이 있고 마지막으로 전송 된 비트에 단일 비트 오류가 있다고 가정하면 패리티 검사가 실패하고 패킷을 올바르게 거부합니다. 마찬가지로 첫 번째 비트 (패리티 비트)에 데이터 오류가 있으면 패킷이 거부됩니다.

하드웨어에서이 검사를 수행하는 것은 매우 간단하며 복잡한 처리가 필요하지 않습니다. 비트 오류율이 비교적 낮은 애플리케이션에서 가비지 수집 소프트웨어 스택을 실행하는 프로세서에서 생성 된 클럭 스큐 또는 클럭 신호와 같은 것을 제거하는 데 유용합니다.

SPI는 단일 비트 오류율이 회선 손실에 크게 의존하지 않는 짧은 전기 연결 회선을 위해 설계된 물리적 링크 프로토콜입니다. 손실이 많은 라인에서 무언가를 실행하는 경우 패리티보다 더 강력한 것이 필요합니다. 이것은 실제로 SPI가하는 일이 아닙니다.

장치가 여전히 연결되어 있는지 확인하려면 스택에서 더 높은 것을 시도하십시오. 이에 비해 TCP / IP (특히 IP)는 많은 802.x 이더넷 사양에 패리티 비트를 지정하지 않습니다. 반면에 IP는 복잡한 "당신이 있습니까?" 실험 계획안. SPI에서 무엇을 실행하고 있습니까? 데이터 링크 관리에 대한 답이있을 것입니다.


1
802.3과 .11은 CRC32를 사용한다; IP 및 TCP 및 (선택적으로) UDP는 16 비트 1의 보수 합계를 사용합니다. 이는 현재 거의 기계 또는 ALU가 거의 없기 때문에 1sC는 대부분 부호없는 덧셈 + 캐리에 의해 구현됩니다.
dave_thompson_085

요점은 패리티 회선 자체의 명백한 실패를 쉽게 감지 수 있다는 것입니다. 1 또는 0을 모두 다시 가져 오면 실패해야합니다.
Rocketmagnet

4

홀수보다 패리티의 명백한 이점은 없습니다. 통신 및 저장 방식에서 패리티 극성 (홀수 또는 짝수)을 선택하여 가장 가능성이 높거나 가장 높은 실패 모드를 포착해야합니다.

당신이 말한 것처럼, 응답하지 않는 대상 또는 깨진 데이터 수신 와이어는 MISO 라인이 높거나 낮게 고정 될 수 있습니다.

SPI를 통한 바이트와 같은 짝수의 비트를 통신 할 때 홀수 패리티 비트는이 all-1 또는 all-0의 데이터에서 결함을 감지하지만 패리티는 그렇지 않습니다.

그러나 SPI를 통해 15 비트를 사용하는 응용 프로그램에서와 같이 홀수 비트를 통신 할 때 확실한 승자는 없습니다. 패리티조차도 all-1의 경우 결함을 감지하지만 all-0의 경우는 누락됩니다. 반대로 홀수 패리티는 all-0의 경우 결함을 감지하지만 all-1의 경우는 누락됩니다.


실제로, 이 경우 에는 분명히 있습니다. 이 질문에서 설명했듯이 홀수 패리티는 누락, 연결이 끊긴 칩 및 케이블 오류를 감지 할 수 있지만 패리티조차도 감지 할 수 없습니다.
Rocketmagnet

0

짝수 또는 홀수 패리티의 이점에는 거의 차이가 없습니다. 하나의 인버트 게이트를 사용하여 하나를 다른 것으로 변환 할 수 있습니다. 패리티 비트의 주요 목적은 해당 값에서 15 비트 만 확인하는 것입니다. 다른 일을하는 것이 목적이 아닙니다. 칩이 없거나 결함이 있거나 연결이 끊어진 것을 감지 할 수는 없습니다. 연결 해제가 가장 일반적인 유형의 오류라고 언급했습니다. 그것은 중요하지 않습니다. 패리티 비트는 해당 유형의 오류를 감지 할 수 없습니다.


0

당신은 이것에 대해 의문을 가질 권리가 있습니다. 나는 평등에 대한 동일한 비판을 가지고 있습니다. 예에서와 같이 패리티 비트를 추가하기 전에 홀수 개의 데이터 비트를 사용하는 경우와 마찬가지로 패리티조차도 0과 1을 모두 유효한 전송 단어로 허용하므로 데드 링크 또는 데드 칩을 감지하는 데 쓸모가 없습니다. Tony M의 이전 답변은 이와 관련하여 잘못되었습니다. 증거는 여기 7 비트 데이터 예제 표를 참조하십시오 .- https://en.wikipedia.org/wiki/Parity_bit

그러나 홀수 패리티는 모든 0 또는 1의 경우에 반대 상태 비트를 삽입하여 링크와 칩이 살아 있음을 증명하므로이 경우 훨씬 더 나은 선택이됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.