Saya menggunakan perangkat SPI dalam aplikasi saya. Paket periferal mengembalikan yang berisi 15 bit data, ditambah bit Even Parity untuk deteksi kesalahan.
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?
Jawaban:
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber