Satu atau dua bit stop UART?

15

UARTs sering membiarkan Anda memilih antara 1, 1,5 dan 2 stop bit. Dengan payload efisiensi 1 stop bit adalah 80% (8/10), dengan 2 stop bit yang turun menjadi 72,7% (8/11). Jadi, apa keunggulan bit stop kedua?

Federico Russo
sumber

Jawaban:

19

Bit penghenti ekstra dapat menjadi cara yang berguna untuk menambahkan sedikit waktu pemrosesan penerimaan tambahan, terutama pada kecepatan baud yang tinggi dan / atau menggunakan UART lunak, di mana waktu diperlukan untuk memproses byte yang diterima.

Di mana kecepatannya ketat, dan UART Anda hanya menawarkan rasio pembagian dalam kekuatan 2, menambahkan stopbit tambahan bisa menjadi opsi untuk memberikan pengurangan kecepatan yang tidak terlalu drastis daripada baudrate terendah berikutnya.

Saya percaya ini adalah salah satu alasan standar DMX512 menetapkan 2 stopbits.

Situasi lain di mana mereka dapat berguna adalah jika Anda memiliki perangkat meneruskan aliran data tanpa buffering atau paket - perbedaan kecil dalam laju clock antara node dan granularity sampling terbatas dapat menyebabkan kesalahan terjadi karena data diterima dan dikirim kembali oleh sejumlah node di rantai, tetapi jika data dikirim dengan 2 stopbits dan penerima diatur ke satu stopbit, itu menambah margin yang cukup untuk mengakomodasi kesalahan ini dan meninggalkan setidaknya satu periode stopbit yang valid untuk node jauh di bawah rantai untuk menerima secara andal.

Saya juga mengalami situasi di mana kabel yang sangat panjang menyebabkan asimetri pada naik dan turunnya waktu, mengakibatkan panjang stopbit yang tidak memadai - mengirimkan 2 stopbits dan membuat penerima hanya perlu memperbaiki satu ini.

mikeselectricstuff
sumber
6

Dalam beberapa hari, printer yang sudah lama hilang (hampir) merupakan konstruksi mekanis. Baudrate agak terstandarisasi bahkan saat itu, jadi menambahkan bit stop tambahan akan memberi printer waktu ekstra untuk mencetak karakter. Aspek waktu lebih terlihat saat itu. Untuk printer pertama saya, http://en.wikipedia.org/wiki/Teletype_Model_33 yang berisik , saya harus memasukkan jeda dua karakter setelah mengirim Carriage Return.

Wouter van Ooijen
sumber
Model 33 yang disesuaikan dengan benar hanya membutuhkan satu karakter setelah Carriage Return. Saat itulah Anda seharusnya mengirim Linefeed! Saya lupa bahwa mereka membutuhkan 2 stop bit, tetapi Anda benar dan apa yang saya katakan di bawah ini jawaban Russel berlaku (tetapi bit 1,5 stop itu untuk perangkat keras Baudot). Bit stop ekstra (10ms) tidak membantu keterlambatan pengembalian kereta.
Gbarry
4

Dua bit stop tidak mungkin jauh lebih berguna daripada satu pada sistem yang memiliki proporsi waktu berhenti yang signifikan dan yang bekerja di lingkungan dengan noise rendah (BER rendah) seperti internal ke peralatan atau dalam antarmuka periferal dengan beberapa meter kabel dan / atau tanpa tahap modem-modem.

Bit 2 stop memberi Anda waktu sinkronisasi yang lebih besar, lebih banyak waktu untuk memproses antar karakter dan mungkin, tergantung pada perangkat keras dan algoritma, peluang yang lebih baik untuk mendapatkan atau mendapatkan kembali sinkronisasi selama aliran data yang berkelanjutan. Waktu Intercharacter jauh lebih sedikit nilainya pada sistem modern daripada ketika kecepatan clock rendah dan throughput prosesor lebih rendah.

Jika pada dasarnya Anda memiliki aliran data kontinu, maka jika tidak disinkronkan, bit tinggi apa pun akan tampak seperti bit stop. Setiap transisi rendah tinggi akan terlihat seperti batas byte. Jika penerima Anda mulai pada batas 10 dan itu bukan batas awal yang benar maka ini hanya akan ditemukan 50% dari waktu) (yaitu jika "stop bit" terakhir ditemukan benar-benar menjadi bit data rendah dan Anda juga akan telah melewati batas stop / start asli di sepanjang jalan. Rata-rata Anda memiliki 1/4 prospek batas byte menjadi 1/0 dan keliru tampak seperti pasangan stop / start. Di atas menunjukkan bahwa jika Anda memilih stop- false false mulai berpasangan maka kemungkinan ada sekitar 50% bahwa Anda akan memilih yang lain pada upaya berikut.

Jika Anda menggunakan 2 stop bit (11) maka urutan stop start yang valid adalah 110 yang memiliki peluang 1/8 terjadi dalam lalu lintas data acak. Pencampuran bit stop dan start asli dalam aliran yang tidak disinkronkan mengubah sats sedikit tetapi tampaknya relatif tidak mungkin bahwa jika Anda mendapatkan urutan 110 stop / start palsu pada satu siklus yang Anda akan menekan yang lain mencoba berikutnya sebelum tersandung pada yang asli 110 urutan yang selanjutnya terjadi.

Seperti yang Anda perhatikan, 1 stop bit menghasilkan 8/10 = throughput maks 80% dan 2 stop bit menghasilkan 8/11 = efisiensi 72%. Perbedaan dalam throughput pada batas mengucapkan adalah 80% / 72% = ~ 11% lebih. ini adalah keuntungan yang berguna dalam keadaan ekstrim tetapi tidak luas dan jika sirkuit idle lebih dari sekitar 10% dari waktu itu bernilai minimal. Jika sirkuit Anda berisik dan rentan kehilangan sinkronisasi sesekali, bit stop ekstra mungkin banyak membantu. TETAPI jika Anda sangat peduli dengan throughput Anda sering dapat meningkatkan baud rate (tidak selalu) atau mengubah ke operasi sepenuhnya sinkron.

Russell McMahon
sumber
Saya tidak tahu ada UART yang dapat dikonfigurasi untuk mengabaikan bit mulai yang jelas yang tidak didahului dengan lebih dari waktu penandaan bit penuh (memang, sebagian besar akan menerima bit awal yang didahului oleh setengah waktu bit menandai, dan tidak dapat dikonfigurasi untuk melakukan sebaliknya). Fitur seperti itu bisa berguna.
supercat
Anda agak tersandung ke jawaban yang benar, jika kami dapat menerima bahwa latihan ini kembali ke hari-hari mekanis. Saat itu, mekanisme penerima membutuhkan sekitar 1 bit waktu untuk berhenti agar siap untuk bit awal berikutnya. Jadi pemancar dibangun untuk memiliki sedikit waktu berhenti 1,5 bit. Itu memiliki efek yang Anda gambarkan. Jika sinkronisasi hilang, mungkin ada beberapa karakter sampah hingga Anda mendapatkan kembali sinkronisasi. Ketika kami sampai pada implementasi elektronik, penerima dapat mulai menunggu bit awal berikutnya segera setelah melihat transisi ke level stop - tidak perlu padding
gbarry
@gbarry - methinks thousen tidak sengaja menemukan komentar Anda.
Russell McMahon
Sebenarnya saya kehabisan karakter :) Ada yang salah?
Gbarry
3

Untuk memperkuat poin mikeselectricstuff tentang menerima waktu dengan "UART lunak", aplikasi penerimaan yang akan selalu tahu kapan menerima data dan melakukannya berdasarkan polling sering dapat menangani laju baud yang lebih cepat daripada yang praktis dengan UART lunak yang digerakkan oleh interupsi. Aplikasi seperti itu, bagaimanapun, hanya dapat memproses data yang masuk selama waktu antara awal bit stop satu byte dan bit awal byte berikutnya; waktu yang diperlukan untuk memproses setiap byte akhirnya menjadi faktor pembatas untuk kecepatan komunikasi. Memproses data pada 115.200-N-8-2 tidak jauh lebih berat daripada memprosesnya di 57.600-N-8-1, tetapi lebih cepat dari 80%.

Kadang-kadang seseorang dapat mendorong lebih jauh dengan menggunakan format data yang tampaknya kurang efisien. Sebagai contoh, seseorang dapat mengirim setiap byte dalam dua bagian, satu dengan tujuh bit dan satu dengan satu (MSB dari bagian satu-bit sudah diatur). Jika seseorang melakukan itu, bahkan dengan hanya satu bit stop, akan ada delapan kali penandaan antara akhir satu byte-pasangan dan awal berikutnya, sehingga memungkinkan seseorang untuk mendorong bit rate empat kali lebih tinggi dari apa yang satu bisa lakukan dengan hanya dua bit stop (dan delapan kali lebih tinggi dari apa yang bisa dilakukan dengan satu). Meskipun harus mengirim dua kali lebih banyak byte, peningkatan kecepatan data empat kali lipat akan menjadi kemenangan besar. Selain itu, meskipun setiap pasangan byte yang ditransmisikan dapat digunakan untuk mengirim delapan bit data, hanya 130 dari 256 nilai byte yang mungkin akan digunakan oleh pengkodean,

supercat
sumber
Anda juga dapat soft-UART baudrate tinggi (250K dan lebih tinggi) dengan menghasilkan interupsi pada tepi startbit dan tetap berada di dalam kode interupsi untuk seluruh byte - stopbit tambahan dapat sangat berguna di sini.
mikeselectricstuff
@ mikeselectricstuff: Bit stop ekstra bisa sangat berguna, karena hanya dapat menggunakan beberapa bit dalam setiap byte (mengharuskan LSB setiap byte diatur dapat berguna karena seseorang dapat memperoleh waktu dari tepi naik bit itu, bahkan jika mungkin ada sedikit kesalahan ketika interupsi terjadi). Kendala utama dari pendekatan bit-interrupt-triggered-on-start-bit, adalah bahwa tidak ada cara yang baik untuk mengirim data sementara data yang masuk mungkin tiba. Baik data yang dikirim atau data yang diterima (atau keduanya) akan hilang.
supercat
2

Alkisah ada monster elektromekanis yang disebut teletype. Sebagian besar berlari pada motor AC yang sinkron dengan frekuensi saluran listrik. Dengan demikian selalu ada kemungkinan bahwa dua mesin yang berkomunikasi mungkin tidak disinkronkan ke jaringan listrik yang sama atau bahkan berjalan pada arus bolak-balik menggunakan frekuensi yang berbeda dalam hal ini.

Dengan demikian, untuk memungkinkan mesin yang lebih lambat untuk mengejar ketinggalan dan tidak hanyut dari selaras, dua bit stop dikirim.

Untuk keperluan lain seperti memungkinkan print carriage untuk kembali ke awal baris baru, CR, LF ditambah dua rubrakan dikirim (semua lubang pada pita 8 level).

Itu adalah kebiasaan untuk sirkuit yang berjalan pada kecepatan 110 Baud dan lebih lambat.

Jacques Orsali
sumber
1

Kelambatan perangkat mekanik penerima adalah alasan di balik menambahkan bit stop tambahan, namun perangkat saat ini cukup cepat dan bekerja pada tingkat baud yang lebih tinggi tanpa perlu bit stop tambahan

ArunMumar
sumber