Kecepatan jam penerima UART


14

Saya mencoba memahami dasar-dasar UART. Dapat dipahami bahwa

  • Ini adalah protokol komunikasi yang tidak sinkron dan karenanya jam TX dan RX tidak tergantung satu sama lain
  • Penerimaan data dijamin oleh penggunaan bit mulai dan satu atau beberapa bit stop. Selain itu penerima harus mengetahui kecepatan data sehingga menghasilkan jam yang cocok untuk mengarahkan register SIPO yang digunakan untuk penerimaan.

Pertanyaannya di sini

Disebutkan bahwa biasanya clock 16X bit rate digunakan untuk memulihkan data. Jadi bagaimana mungkin konversi bps ke frekuensi clock ? Tolong berikan saya beberapa referensi untuk mempelajari mekanisme pencatatan jam kerja yang digunakan pada penerima UART.

Jawaban:


18

Jam pemancar dan penerima tidak tergantung satu sama lain, dengan cara yang dihasilkan secara independen, tetapi jam tersebut harus cocok dengan baik untuk memastikan transmisi yang tepat.

T0T0T0×T0adalah ujung jatuh dari bit awal. Meskipun pengambilan sampel bit awal tidak benar-benar diperlukan (Anda tahu itu rendah), penting untuk memastikan bahwa ujung awal bukan lonjakan.

masukkan deskripsi gambar di sini

×

Jika saya ingat dengan benar, 68HC11 mengambil beberapa sampel di awal, di tengah dan di akhir sedikit, yang pertama dan terakhir mungkin untuk melakukan sinkronisasi ulang jika akan ada perubahan level (yang tidak dijamin).

Jam pengambilan sampel tidak berasal dari bit rate, itu sebaliknya. Untuk 9600 bps Anda harus mengatur jam sampling ke 153 600 Hz, yang akan Anda dapatkan melalui prescaler dari frekuensi clock mikrokontroler. Kemudian bit clock diturunkan dari itu oleh divisi lain dengan 16.

jam yang tidak sesuai
Inilah yang akan terjadi jika jam penerima tidak sinkron dengan jam pemancar:

masukkan deskripsi gambar di sini

Jam penerima lambat 6,25%, dan Anda dapat melihat bahwa pengambilan sampel untuk setiap bit berikutnya adalah nanti dan nanti. Transmisi UART yang khas terdiri dari 10 bit: 1 bit awal, payload 8 bit data, dan 1 stop bit. Kemudian jika Anda mencicipi di tengah-tengah sedikit Anda mampu menjadi setengah dari sedikit di bit terakhir, bit berhenti. Setengah bit pada sepuluh bit adalah 5%, jadi dengan deviasi 6,25% kita akan mengalami masalah. Itu menunjukkan dengan jelas dalam gambar: sudah di bit data ketiga kami mengambil sampel di dekat tepi.


Saya menghargai bantuannya. Terima kasih !!. Bukankah bit awal harus dicoba pada T0 + 104us bukan T0 + 52us?
Vivek Maran

1
@ Vivek27 - tidak, karena kami adalah durasi bit awal, dan kemudian Anda akan mengambil sampel di akhir, bukan di tengah. Jika Anda memberi saya beberapa menit, saya akan memperbarui gambar saya. :-)
stevenvh

1
@Vivek: Sebenarnya bit mulai tidak benar-benar "sampel" sama sekali. Seluruh tujuannya adalah untuk menyediakan transisi awal dari baris yang tidak digunakan oleh karakter lainnya. "Nilai" -nya selalu berseberangan dan tidak dengan sendirinya berisi data apa pun.
Olin Lathrop

7
@ Olin - Saya akan mencicipi bit awal, hanya untuk memeriksa bahwa ujung awalnya bukan spike.
stevenvh

1
@ downvoter - Jika Anda memberi tahu kami apa yang salah di sini, saya mungkin dapat memperbaikinya. Tetapi kemudian Anda harus memberi tahu kami sesuatu . (Apakah Anda orang yang sama yang juga
menurunkan

11

Mari kita mundur sedikit dan berbicara tentang protokol pensinyalan tingkat rendah yang digunakan oleh UART. TX dan RX adalah jalur data, bukan jam. Jam hanya di dalam setiap UART, itulah sebabnya harus ada kesepakatan di muka tentang apa baud rate.

Saat tidak mentransmisikan saluran, statusnya dalam keadaan diam Untuk mengirimkan byte (misalnya, lebar data lain dimungkinkan), pemancar pertama-tama mengirimkan bit mulai . Penerima menggunakan waktu tepi terdepan dari bit awal dan laju baud yang diketahui untuk kemudian memecahkan kode karakter lainnya. Katakanlah untuk kesederhanaan bahwa 100 kBaud sedang digunakan. Itu berarti setiap waktu bit adalah 10 μs panjang. Ini termasuk bit awal, bit data, dan bit stop. Oleh karena itu, bagian tengah bit data pertama akan berada pada 15 μs setelah ujung depan bit mulai, yang kedua pada 25 μs, dll.

Selama jam penerima dan pemancar sama, ini bisa berlangsung selamanya. Namun, mereka tidak akan pernah sama persis sehingga tidak bisa berlangsung selamanya. Untuk memungkinkan sinkronisasi ulang jam penerima ke jam pemancar, karakter data berakhir, garis dibiarkan menganggur sebentar, lalu prosesnya diulang. Kesalahan waktu diakumulasikan mulai dari tepi paling atas bit mulai, sehingga penyimpangan maksimum ada di bit terakhir. Setelah karakter itu selesai, penerima ulang akan menunggu bit mulai berikutnya dan proses berulang.

Dengan 8 bit data, kasus terburuk untuk penentuan waktu adalah pengambilan sampel bit terakhir. Itu adalah 8,5 bit kali dari referensi waktu, yang merupakan ujung depan dari bit awal. Jika penerima mati dengan 1/2 bit atau lebih, itu akan mencicipi bit terakhir selama bit yang berbeda. Jelas itu buruk. Ini terjadi pada ketidakcocokan frekuensi clock 1/2 bit dalam 8 1/2 bit, atau 5,9%. Itulah ketidakcocokan yang dijamin gagal. Untuk keandalan, Anda biasanya ingin memastikan penerima cocok dengan pemancar dalam setengah dari itu, atau 2,9%. Itu mewakili kesalahan waktu 1/4 bit pada bit terakhir.

Namun, itu tidak sesederhana itu. Dalam skenario yang dijelaskan di atas, penerima pada dasarnya memulai stopwatch di ujung depan bit mulai. Secara teori itu bisa dilakukan dalam elektronik analog, tetapi itu akan rumit dan mahal dan tidak mudah diintegrasikan ke dalam chip digital. Sebaliknya, sebagian besar implementasi UART digital memiliki jam internal yang beroperasi pada 16x kecepatan bit yang diharapkan. "Stopwatch" kemudian menghitung siklus 16x ini. Itu berarti ada kemungkinan kesalahan tambahan 1/16 bit ditambahkan ke semua kali pengambilan sampel bit, yang seperti 0,7% clock mismatch pada bit terakhir.

Mudah-mudahan ini memperjelas apa stop bit itu, bagaimana timing bit bekerja, dan apa artinya clock 16x. Saya sebagian besar melewatkan bit stop, tapi mungkin Anda bisa melihat sendiri sekarang mengapa setidaknya satu bit stop diperlukan. Pada dasarnya bit stop adalah waktu idle garis minimum yang diberlakukan antara karakter. Ini adalah waktu di mana penerima telah selesai menerima karakter dan siap untuk tepi terdepan berikutnya dari bit awal. Jika tidak ada bit stop, maka bit data terakhir bisa menjadi polaritas yang sama dengan bit start dan penerima tidak memiliki keunggulan untuk memulai stopwatch-nya.

Dahulu protokol ini diterjemahkan oleh kamera, tuas, dan roda pemintal. Dua bit stop sering digunakan untuk memungkinkan mekanisme untuk mengatur ulang. Saat ini, semuanya dilakukan dalam logika digital dan 1 stop bit digunakan cukup banyak secara universal. Anda sering melihat protokol tingkat rendah yang ditulis sebagai 8-N-1, yang berarti 8 bit data, tidak ada bit paritas (lupakan ini, mereka jarang digunakan hari ini), dan 1 stop bit. Bit mulai tersirat karena tidak ada opsi di sana.

Menggunakan 8-N-1, data 8 bit byte sebenarnya membutuhkan waktu 10 bit untuk dikirim. Ini adalah salah satu alasan ada perbedaan antara "bit rate" dan "baud rate". Baud rate mengacu pada waktu pensinyalan bit individual, termasuk bit start dan stop. Pada 100 kBaud, setiap bit yang ditransmisikan membutuhkan 10 μs, termasuk bit start dan stop. Seluruh karakter karena itu membutuhkan 100 μs, tetapi hanya 8 bit data nyata yang ditransfer. Baud rate adalah 100 k, tetapi laju bit transfer data dari sudut pandang level yang lebih tinggi hanya 80 kBits / s.


5

Bit rate untuk transmisi adalah clock rate dibagi dengan (seperti yang Anda katakan, biasanya) 16. Anda juga memiliki beberapa bit non-data untuk bit framing (start, parity, stop). Jadi untuk clock 16000Hz Anda mendapatkan 1000 bit per detik, tetapi setelah framing minimal dimasukkan hanya 800 bit data atau 100 byte per detik.

Untuk menerima, penerima menghitung dari tengah bit mulai 16 jam dan sampel garis panggilan apa yang dilihatnya "bit data pertama". mengulangi hitungan ini dan sampel cukup waktu untuk membaca seluruh simbol, kemudian mengkonfirmasi keberadaan bit berhenti dan mulai menunggu bit mulai berikutnya.

Selama jam penerima dekat dengan laju jam pemancar, pengambilan sampel akan mengenai bagian yang benar dari sinyal yang ditransmisikan.

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.