ทำไมต้องรำคาญกับความเท่าเทียม


12

ฉันกำลังใช้อุปกรณ์ต่อพ่วง SPI ในแอปพลิเคชันของฉัน อุปกรณ์ต่อพ่วงส่งคืนแพ็คเก็ตที่มีบิตข้อมูล 15 บิตบวกบิตคู่สำหรับการตรวจจับข้อผิดพลาด

พาริตีบนอุปกรณ์ต่อพ่วง SPI

ดังนั้นศูนย์ทั้งหมดและทุกคนผ่านการตรวจสอบความเท่าเทียมกัน

ซึ่งหมายความว่าไมโครคอนโทรลเลอร์ของฉันไม่สามารถตรวจพบข้อผิดพลาดประเภทที่พบบ่อยที่สุด: อุปกรณ์ต่อพ่วงถูกตัดการเชื่อมต่อ! ในกรณีนี้บิตที่ได้รับจะเป็นศูนย์ทั้งหมดซึ่งผ่านการตรวจสอบพาริตี้

ทะนงว่ามันจะได้รับเพียงเป็นเรื่องง่ายสำหรับผู้ผลิตอุปกรณ์ต่อพ่วงที่จะใช้แปลกเท่าเทียมกันคำถามของฉันคือ: ทำไมพวกเขาจะได้เลือกที่จะใช้ความเท่าเทียมกันแม้ในกรณีนี้ ? มีข้อได้เปรียบอื่น ๆ ของ Even Parity ในกรณีนี้เพื่อชดเชยข้อเท็จจริงที่ว่ามันไม่สามารถตรวจพบข้อผิดพลาดประเภทที่พบบ่อยที่สุดได้หรือไม่?


6
โปรดทราบว่า "ความเท่าเทียมกัน" หรือแม้กระทั่งแปลกเป็นเทคโนโลยีไดโนเสาร์ไม่ควรใช้ในระบบมืออาชีพที่ทันสมัย มีความน่าจะเป็นน้อยกว่า 50% ของการจับข้อผิดพลาดบิตเดียวและยังแย่กว่าสำหรับข้อผิดพลาดแบบหลายบิต เพียงแค่ลืมเกี่ยวกับการใช้ความเท่าเทียมกันการใช้มันเป็นความคิดที่มีศีลธรรมแม้ย้อนกลับไปในปี 1960 หากคุณต้องการตรวจสอบสายข้อมูล SPI คุณควรดูแลข้อมูลในเลเยอร์ที่ต่ำกว่าโดยใช้ตัวจับเวลาการจับภาพอินพุตหรือคล้ายกัน ตรวจสอบการตั้งค่าสถานะ SPI สำหรับ overrruns บัฟเฟอร์ ฯลฯ
Lundin

39
@Lundin "มันมีโอกาสน้อยกว่า 50% ของการจับข้อผิดพลาดบิตเดียวและยังแย่กว่าสำหรับข้อผิดพลาดแบบหลายบิต" - หากบิตผิดพาริตีจะผิด พาริตีง่ายมีโอกาส 100% ที่จะพบข้อผิดพลาดบิตเดียวไม่ใช่ "น้อยกว่า 50%" (ในทำนองเดียวกันมีโอกาส 0% ที่จะตรวจจับข้อผิดพลาด 2 บิตและ 100% อีกครั้งที่ตรวจจับข้อผิดพลาด 3 บิต)
marcelm

7
@Lundin - โปรดระบุความคิดเห็นของคุณต่อผู้สร้าง AMS ซึ่งเป็นผู้สร้างชิปเหล่านี้
Rocketmagnet

26
@Lundin หากบิตพาริตีพลิกการตรวจสอบพาริตียังคงล้มเหลว
Adam Haun

4
สิ่งนี้ยังคงไร้ประโยชน์ส่วนใหญ่ในสถานการณ์ส่วนใหญ่ ⁽ᶜᶦᵗᵃᵗᶦᵒᶰᶰᵉᵉᵈᵉᵈ⁾
dasdingonesin ใน

คำตอบ:


14

บิตพาริตีเดี่ยวสามารถตรวจสอบว่ามีข้อผิดพลาดเพียงบิตเดียวหรือจำนวนคี่ดังนั้นจึงคาดว่าจะตรวจพบเมื่ออุปกรณ์ต่อพ่วงถูกตัดการเชื่อมต่ออาจคาดหวังมากเกินไป

อย่างไรก็ตามระบบจำนวนมากจะผลิตอนุกรมอย่างต่อเนื่องเป็น 1 เมื่อไม่มีอุปกรณ์ต่อพ่วงและสามารถทำได้ด้วยตัวต้านทานแบบดึงขึ้นอย่างง่ายบนสายข้อมูลที่ส่งคืน หากมีข้อมูล 8 บิตที่แท้จริงถูกส่งคืนโดยอุปกรณ์ต่อพ่วงที่เชื่อมต่อบิตของพาริตีจะเป็นศูนย์สำหรับ 255 ทศนิยมที่ส่ง ดังนั้นแม้ความเท่าเทียมกันก็สามารถตรวจพบได้เมื่ออุปกรณ์ต่อพ่วงถูกตัดการเชื่อมต่อภายใต้สถานการณ์เหล่านี้

หากใช้พาริตีคี่คี่ 8 บิตสูง (ทศนิยม 255) จะส่งผลให้บิตพาริตีสูงดังนั้นการเรนเดอร์คี่ที่ไม่ได้ผลจึงเป็นวิธีการตรวจจับการสูญเสียชิปต่อพ่วง

ม้าสำหรับหลักสูตร


2
Silly ฉันฉันควรได้กล่าวว่าโปรแกรมนี้โดยเฉพาะมี 15 บิตข้อมูลและหนึ่งบิตเท่าเทียมกัน ถูกต้องแล้ว แต่ฉันก็ยังคิดว่ามันสมเหตุสมผลที่จะคาดหวังการตรวจสอบพาริตี้เพื่อตรวจสอบอุปกรณ์ต่อพ่วงที่ไม่ได้เชื่อมต่ออย่างสมบูรณ์ มันค่อนข้างจะอยู่ในความสามารถของมันและจริงๆแล้วเป็นการตรวจสอบที่มีประโยชน์ที่สุดที่คุณสามารถทำได้
Rocketmagnet

1
@Rocketmagnet เช่นกันตารางที่คุณเพิ่มลงในคำถามของคุณดูเหมือนจะเป็นรูปแบบของข้อมูลที่ส่งไปยังอุปกรณ์ต่อพ่วง - โปรดสังเกตคำว่า "ต้องเป็น 0" สำหรับบิตที่ 14 - บางทีคุณควรเชื่อมโยงไปยังแผ่นข้อมูลอุปกรณ์ ?
แอนดี้อาคา

3
ตารางที่แก้ไขแสดงบิต 14 เป็นค่าสถานะข้อผิดพลาดและคำแนะนำของฉันคือการใช้ pull-up บนข้อมูลการส่งคืนแบบอนุกรมเพื่อทำให้ข้อมูลทั้งหมด 1 เมื่ออุปกรณ์ถูกตัดการเชื่อมต่อเนื่องจากการถอดรหัสบิต 14 จะบ่งบอกถึงปัญหา
แอนดี้อาคา

1
@Trevor_G อุ๊ปส์ใช่ กำลังดำเนินการแก้ไข
แอนดี้อาคา

1
ความคาดหวังที่เหมาะสมคือซอฟต์แวร์ที่ใช้คอนโทรลเลอร์ spi ควรตรวจสอบข้อมูลที่กลับมาหากมีความเสี่ยง หากคุณไม่สามารถควบคุมฝ่ายใดฝ่ายหนึ่งได้คุณจำเป็นต้องทำสิ่งนี้ในซอฟต์แวร์ระดับสูงกว่า ครั้งเดียวที่คุณสามารถปล่อยมันไปได้คือถ้าคุณควบคุมทั้งสองด้านของการออกแบบ spi และทำให้มันเป็นไปตามข้อกำหนดข้อผิดพลาดบิตของคุณซึ่งฟังดูในกรณีนี้ว่าคุณไม่สามารถ ดังนั้นซอฟต์แวร์ของคุณควรตรวจสอบศูนย์ทั้งหมดและทุกตัวไม่ใช่งานของคอนโทรลเลอร์ spi หรือพาริตี้ที่มีประโยชน์ จำกัด ...
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 บิตซึ่งเนื่องจากเครื่องจักรน้อยมากหรือแม้แต่ ALUs ในปัจจุบันนั้น 1sC ส่วนใหญ่จะใช้งานโดยการเพิ่มที่ไม่ได้ลงนามและการพกพา
dave_thompson_085

ประเด็นก็คือพาริตี้สามารถตรวจจับความล้มเหลวของเส้นได้อย่างง่ายดาย ถ้าฉันกลับทั้งหมด 1 วินาทีหรือ 0 ทั้งหมดนั่นน่าจะเป็นความล้มเหลว
Rocketmagnet

4

ไม่มีประโยชน์ชัดเจนแม้แต่ความเท่าเทียมกันมากกว่าคี่ ในแผนการสื่อสารและหน่วยเก็บข้อมูลควรเลือกขั้วพาริตี้ (คี่หรือคู่) เพื่อดักจับโหมดความล้มเหลวที่น่าจะเกิดขึ้นหรือเกิดขึ้นมากที่สุด

อย่างที่คุณพูดเป้าหมายที่ไม่ตอบสนองหรือการรับข้อมูลที่ขาดสายอาจส่งผลให้สาย MISO ติดค้างสูงหรือต่ำ

เมื่อทำการสื่อสารถึงจำนวนบิตเช่นไบต์บน SPI บิตพาริตีคี่จะตรวจพบข้อผิดพลาดในข้อมูลของ all-1 หรือ all-0 แต่ความเท่าเทียมกันจะไม่เกิดขึ้น

อย่างไรก็ตามไม่มีผู้ชนะที่ชัดเจนดังกล่าวเมื่อทำการสื่อสารบิตจำนวนคี่เช่นในแอปพลิเคชันของคุณด้วย 15 บิตผ่าน SPI แม้แต่พาริตี้จะตรวจพบข้อผิดพลาดในเคสของ all-1 แต่พลาดเคสของ all-0 ในทางกลับกันพาริตีคี่จะตรวจจับความผิดในกรณีของ all-0 แต่พลาดกรณีของ all-1


ที่จริงแล้วใช่มีอยู่อย่างชัดเจนในกรณีนี้ ตามที่ฉันอธิบายในคำถามพาริตี้คี่จะสามารถตรวจจับได้: ชิปที่ขาดการเชื่อมต่อขาดหายไปและความผิดพลาดของสายเคเบิล
Rocketmagnet

0

มีความแตกต่างเล็กน้อยในผลประโยชน์เมื่อมีความเท่าเทียมกันหรือคี่ สามารถแปลงหนึ่งไปยังอีกด้วยประตู invert เดียว วัตถุประสงค์หลักของพาริตี้บิตคือการตรวจสอบเพียง 15 บิตในค่านั้น มันไม่ได้มีวัตถุประสงค์เพื่อทำสิ่งอื่นใด หนึ่งหรืออื่น ๆ ที่สามารถตรวจพบชิปที่หายไปผิดพลาดหรือขาดการเชื่อมต่อไม่ได้พิจารณา คุณพูดถึงว่าการตัดการเชื่อมต่อเป็นข้อผิดพลาดที่พบบ่อยที่สุดในเคสของคุณ ไม่เป็นไร. พาริตี้บิตไม่ได้อยู่ที่นั่นเพื่อตรวจจับข้อผิดพลาดประเภทนั้น


0

คุณมีสิทธิ์ที่จะถามคำถามนี้ฉันมีการวิจารณ์ที่เท่าเทียมกันแม้กระทั่ง ด้วยบิตข้อมูลจำนวนคี่ก่อนเพิ่มบิตพาริตี้ตามตัวอย่างของคุณและเป็นเรื่องธรรมดาแม้แพริตีจะอนุญาต 0s และ 1s ทั้งหมดเป็นคำที่ส่งที่ถูกต้องซึ่งไม่มีประโยชน์ในการตรวจจับลิงก์ตายหรือชิปที่ตายแล้ว คำตอบก่อนหน้านี้โดย Tony M ผิดในเรื่องนี้ ดูตารางตัวอย่างข้อมูล 7 บิตที่นี่เพื่อพิสูจน์: - https://en.wikipedia.org/wiki/Parity_bit

คี่ความผิดปกติจะแทรกบิตสถานะตรงข้ามในกรณีทั้งหมด 0 หรือ 1 ดังนั้นพิสูจน์ว่าลิงค์และชิปยังมีชีวิตอยู่และจะเป็นตัวเลือกที่ดีกว่าในกรณีนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.