Kenapa repot-repot dengan paritas?


12

Saya menggunakan perangkat SPI dalam aplikasi saya. Paket periferal mengembalikan yang berisi 15 bit data, ditambah bit Even Parity untuk deteksi kesalahan.

Paritas pada perangkat SPI

Karena itu semua nol, dan semua yang sama lulus pemeriksaan paritas.

Ini berarti mikrokontroler saya tidak dapat mendeteksi jenis kesalahan yang paling umum: perangkat terputus! Dalam hal ini, bit yang diterima semuanya nol, yang melewati pemeriksaan paritas.

Menganggap bahwa akan sama mudahnya bagi produsen perangkat untuk mengimplementasikan paritas Ganjil, pertanyaan saya adalah: Mengapa mereka memilih untuk menggunakan paritas genap dalam kasus ini ? Apakah ada keuntungan lain dari Even Parity dalam kasus ini untuk menebus fakta bahwa itu tidak dapat menangkap jenis kesalahan yang paling umum?


6
Harap dicatat bahwa "paritas", genap atau ganjil, adalah teknologi dinosaurus, tidak boleh digunakan dalam sistem profesional dan modern. Ini memiliki probabilitas kurang dari 50% menangkap kesalahan bit tunggal, dan lebih buruk lagi untuk kesalahan multi-bit. Lupakan tentang menggunakan paritas, menggunakannya adalah ide yang gila bahkan di tahun 1960-an. Jika Anda perlu memvalidasi jalur data SPI, Anda harus mengawasi data pada lapisan bawah, dengan menggunakan penghitung waktu pengambilan input atau yang serupa. Periksa juga flag SPI untuk buffer overrruns dll.
Lundin

39
@Lundin "Ini memiliki probabilitas kurang dari 50% menangkap kesalahan bit tunggal, dan lebih buruk lagi untuk kesalahan multi-bit." - Jika sedikit pun salah, paritasnya akan salah. Paritas sederhana memiliki 100% peluang untuk menangkap kesalahan bit tunggal, tidak "kurang dari 50%". (Demikian pula, ia memiliki peluang 0% menangkap kesalahan 2-bit, dan 100% lagi menangkap kesalahan 3-bit).
marcelm

7
@Lundin - Harap berikan komentar Anda ke pembuat AMS, yang membuat chip ini.
Rocketmagnet

26
@Lundin Jika bit paritasnya terbalik, pemeriksaan paritas masih gagal.
Adam Haun

4
Ini sebagian besar masih tidak berguna dalam kebanyakan situasi. ⁽ᶜᶦᵗᵃᵗᶦᵒᶰ ᶰᵉᵉᵈᵉᵈ⁾
dasdingonesin

Jawaban:


14

Bit paritas tunggal hanya dapat memeriksa keberadaan bit tunggal atau ganjil dalam kesalahan sehingga mengharapkannya mendeteksi ketika periferal terputus mungkin mengharapkan terlalu banyak.

Namun, banyak sistem akan menghasilkan seri berkelanjutan 1 ketika periferal tidak ada dan ini dapat dicapai dengan resistor pull-up sederhana pada saluran data yang kembali. Jika ada data 8 bit aktual dikembalikan oleh perangkat yang terhubung maka bit paritas akan menjadi nol untuk desimal 255 yang dikirim. Jadi, bahkan paritas dapat mendeteksi kapan periferal terputus dalam kondisi ini.

Jika paritas ganjil digunakan, 8 bit tinggi (desimal 255) akan menghasilkan bit paritas tinggi sehingga menjadikan paritas ganjil tidak berguna sebagai cara mendeteksi hilangnya chip periferal.

Kuda untuk kursus.


2
Konyol saya, saya seharusnya menyebutkan bahwa aplikasi khusus ini memiliki 15 bit data, dan satu bit paritas. Diperbaiki sekarang. Tapi saya masih berpikir masuk akal untuk mengharapkan pemeriksaan paritas untuk mendeteksi perangkat yang benar-benar terputus. Ini cukup dalam kemampuannya, dan sebenarnya pemeriksaan paling berguna yang dapat Anda lakukan.
Rocketmagnet

1
@Rocketmagnet juga, tabel yang telah Anda tambahkan ke pertanyaan Anda tampaknya untuk format data yang dikirim ke perangkat - perhatikan istilah "Harus 0" untuk bit ke-14 - mungkin Anda harus menautkan ke lembar data perangkat ?
Andy alias

3
Tabel yang dimodifikasi menunjukkan bit 14 sebagai flag kesalahan dan saran saya adalah menggunakan pull-up pada data pengembalian serial untuk membuat data semua 1 ketika perangkat terputus karena kemudian decoded bit 14 akan menunjukkan masalah.
Andy alias

1
@ Trevor_G oops ya. Amandemen sedang berlangsung.
Andy alias

1
Harapan yang tepat adalah perangkat lunak yang menggunakan spi controller harus memvalidasi data yang kembali, jika ada risiko. Jika Anda tidak memiliki kendali atas satu atau sisi lain, maka Anda pasti perlu melakukan ini di perangkat lunak tingkat yang lebih tinggi. Satu-satunya waktu Anda dapat melepaskannya adalah jika Anda mengontrol kedua sisi desain spi dan membuatnya memenuhi persyaratan kesalahan bit Anda, yang kedengarannya dalam hal ini Anda tidak bisa. Jadi perangkat lunak Anda harus memeriksa semua nol dan semua, bukan pekerjaan pengendali spi, atau paritas yang memiliki kegunaan terbatas ...
old_timer

5

Parity, atau deteksi kesalahan blok apa pun, dimaksudkan untuk mendeteksi kesalahan dalam transmisi data itu sendiri. Parity tidak dirancang untuk mendeteksi apakah transmisi data sedang berlangsung atau tidak.

Diberikan saluran transmisi, ada beberapa jenis kekhawatiran. Dua yang relevan di sini adalah: 1) kegagalan garis itu sendiri, dan, 2) memblokir kesalahan data dalam transmisi tertentu. Lainnya yang kurang relevan adalah, misalnya, voltase saluran yang salah, kesalahan protokol, atau kesalahan keamanan. Parity membantu dengan 2 tetapi tidak 1. Untuk subsistem di kedua ujung saluran transmisi untuk mengatasi 1 (kegagalan koneksi), fitur protokol lain diperlukan.

Tingkat deteksi kesalahan bit paritas tunggal seringkali lebih tinggi dari 50%. Persisnya apa tingkat itu tergantung pada heuristik segmen data dalam protokol. Katakanlah Anda memiliki paket, (MSB) 1011010111011110, dan ada kesalahan bit tunggal dalam bit yang terakhir dikirimkan, pemeriksaan paritas akan gagal dan paket itu ditolak dengan benar. Demikian pula, jika Anda memiliki kesalahan data di bit pertama (bit paritas), paket akan ditolak.

Melakukan pemeriksaan perangkat keras ini sangat sederhana dan tidak memerlukan pemrosesan yang rumit. Ini berguna dalam aplikasi dengan tingkat kesalahan bit yang relatif rendah untuk menghilangkan hal-hal seperti kemiringan jam atau sinyal jam yang dihasilkan oleh prosesor yang menjalankan tumpukan perangkat lunak yang dikumpulkan sampah.

SPI adalah protokol tautan fisik yang dirancang untuk saluran pendek yang terhubung secara elektrik di mana laju kesalahan bit-tunggal tidak banyak bergantung pada hilangnya sambungan. Jika Anda menjalankan sesuatu yang melewati batas, Anda akan membutuhkan sesuatu yang jauh lebih kuat daripada paritas. Ini bukan yang SPI lakukan.

Untuk memeriksa apakah suatu perangkat masih terhubung, coba sesuatu yang lebih tinggi di tumpukan. Sebagai perbandingan, TCP / IP (IP, khususnya) tidak menentukan bit paritas sementara banyak dari spesifikasi 802.x Ethernet melakukannya. IP memang, di sisi lain, memiliki masalah, "apakah Anda di sana?" protokol. Apa yang Anda jalankan di atas SPI? Jawaban untuk manajemen tautan data mungkin ada di sana.


1
802.3 dan .11 menggunakan CRC32; IP dan TCP dan (opsional) UDP menggunakan jumlah komplemen 16-bit, yang karena sangat sedikit mesin atau bahkan ALU saat ini adalah 1sC sebagian besar diimplementasikan oleh penambahan yang tidak ditandatangani ditambah carry-around.
dave_thompson_085

Intinya adalah bahwa paritas dapat dengan mudah mendeteksi kegagalan garis itu sendiri. Jika saya mendapatkan kembali semua angka 1 atau semua angka 0, itu seharusnya merupakan kegagalan.
Rocketmagnet

4

Tidak ada manfaat yang jelas bahkan paritas atas yang aneh. Dalam skema komunikasi dan penyimpanan, polaritas paritas (ganjil atau genap) harus dipilih untuk menjebak mode kegagalan yang paling mungkin atau paling tinggi terjadi.

Seperti yang Anda katakan, target yang tidak responsif atau kawat penerima data yang terputus mungkin menghasilkan garis MISO yang terjebak tinggi atau rendah.

Saat mengomunikasikan jumlah bit genap, seperti byte lebih dari SPI, bit paritas ganjil akan mendeteksi kesalahan pada data all-1 atau all-0 ini tetapi bahkan paritas tidak akan melakukannya.

Namun, tidak ada pemenang yang jelas ketika mengomunikasikan jumlah bit ganjil, seperti dalam aplikasi Anda dengan 15 bit melebihi SPI. Bahkan paritas akan mendeteksi kesalahan pada case all-1 tetapi melewatkan case all-0. Sebaliknya, paritas ganjil akan mendeteksi kesalahan dalam kasus all-0 tetapi melewatkan kasus all-1.


Sebenarnya, ya, jelas ada dalam kasus ini . Seperti yang saya jelaskan dalam pertanyaan, Paritas ganjil akan dapat mendeteksi: hilang, rusaknya chip yang terputus dan kegagalan kabel, sedangkan paritas Bahkan tidak bisa.
Rocketmagnet

0

Ada sedikit perbedaan dalam manfaat dengan paritas genap atau ganjil. Satu dapat dikonversi ke yang lain dengan gerbang invert tunggal. Tujuan utama bit paritas adalah untuk memeriksa hanya 15 bit dalam nilai itu. Bukan tujuannya untuk melakukan hal lain. Bahwa satu atau yang lain dapat mendeteksi chip yang hilang, rusak, atau terputus bukanlah suatu pertimbangan. Anda menyebutkan bahwa terputus adalah jenis kesalahan yang paling umum dalam kasus Anda. Tidak masalah. Bit paritas tidak ada di sana untuk mendeteksi jenis kesalahan itu.


0

Anda benar untuk mempertanyakan ini, saya memiliki kritik yang sama bahkan paritas. Dengan jumlah bit data yang ganjil sebelum penambahan bit paritas, seperti dalam contoh Anda, dan seperti biasa, paritas genap memungkinkan semua 0s dan semua 1s sebagai kata-kata yang ditransmisikan yang valid, yang tidak berguna dalam mendeteksi tautan mati atau chip mati. Jawaban sebelumnya oleh Tony M salah dalam hal ini. Lihat tabel contoh data 7bit di sini untuk bukti: - https://en.wikipedia.org/wiki/Parity_bit

Namun ganjil paritas akan memasukkan bit keadaan berlawanan dalam semua 0s atau semua 1s kasus, sehingga membuktikan bahwa tautan dan chip masih hidup, dan akan menjadi pilihan yang jauh lebih baik dalam kasus ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.