Apa penundaan minimum antara dua frame RS232 berturut-turut?

3

Saya telah berupaya membuat UART pada FPGA. Saya dapat berhasil mengirim dan menerima satu karakter yang diketik pada Putty. Namun, ketika saya mengatur FPGA saya untuk terus-menerus menulis urutan besar "A", kadang-kadang saya berakhir dengan urutan "@" atau beberapa karakter lain sampai saya mengatur ulang FPGA beberapa kali.

Saya percaya UART di komputer kehilangan jejak perbedaan antara bit mulai dan nol. Penundaan antara dua "A" adalah ~ 30us (diukur dengan penganalisa logika) dan baud rate 115200 8N1.

Apakah ada penundaan minimum yang harus dipertahankan antara dua frame RS232 berturut-turut?

Tuan Loh.
sumber
Cukup mudah untuk keluar dari sinkronisasi pada transmisi data yang panjang jika hanya menggunakan one stop bit. Semakin buruk saat mentransmisikan data biner yang cenderung semua nol pada waktu (atau semua yang).
Daniel R Hicks
Tetapi Anda mengatakan bahwa Anda harus "mengatur ulang FPGA beberapa kali" untuk menghapus kesalahan. Jika masalahnya ada di pihak penerima, maka hanya perlu menjeda pengiriman (antar karakter) selama satu karakter untuk mencapai pengaturan ulang. Ini membuat orang bertanya-tanya apakah FPGA Anda entah bagaimana keluar dari sinkronisasi secara internal.
Daniel R Hicks
@sawdust - Intinya adalah bahwa transisi antara bit berhenti dan bit mulai adalah satu-satunya titik referensi yang andal dalam aliran data, dan protokolnya tidak sinkron , artinya Anda tidak dapat mengandalkan waktu bit sebelumnya. Gangguan noise tunggal dan protokol "terkunci" ke titik referensi yang salah.
Daniel R Hicks
@DanielRHicks - OK, Anda benar. Saya ingat sekali atau dua kali hot-plugging koneksi serial, dan penerima selaras dengan sedikit bingkai. Itu tidak akan benar sampai ada jeda dalam transmisi.
serbuk gergaji
Oke, saya punya generator baud rate gratis. Mungkin saya harus mencoba untuk mereset penghitung di generator untuk mendeteksi bit start. Tapi ini bukan masalah saya - komputer tidak sinkron, bukan FPGA penerima (belum diuji stres).
Tuan Loh.

Jawaban:

1

Serta kecepatan dan jumlah bit data, saya pikir kedua ujungnya harus menyetujui jumlah bit mulai, bit berhenti dan bit paritas.

Lihat Komunikasi Serial Asinkron

Sinyal RS232

Di atas menunjukkan bagaimana karakter dipisahkan tetapi agak diidealkan naik dan turun kali, saya percaya ruang lingkup akan menunjukkan sesuatu yang lebih seperti apa yang berikut (perhatikan tanda terbalik / sumbu spasi dibandingkan dengan diagram sebelumnya).

masukkan deskripsi gambar di sini

Mungkin Anda harus mengatur kecepatan lebih rendah, mungkin FPGA Anda tidak memancarkan sinyal yang terbentuk dengan baik pada kecepatan yang lebih tinggi.

RS232 juga async, saya percaya itu berarti penerima diharapkan untuk menyinkronkan pengaturan waktunya berdasarkan bit mulai dan berhenti.

  • A adalah biner 01000001
  • @ adalah biner 01000000

Perbedaannya adalah masalah waktu yang akurat. Dengan pengaturan waktu yang tidak akurat, penerima dapat menghitung enam bukannya lima sedangkan +3 ... 15V dinyatakan.

Lihat Pengaturan Waktu Sinyal dan Karakteristik Sinyal

RedGrittyBrick
sumber
Ini membuatnya terlihat mudah untuk keluar dari sinkronisasi jika saya punya satu mulai dan satu stop bit. Secara praktis, stop bit saya sedikit lebih lama sebagai serializer yang memuat byte berikutnya. Saya menggunakan penganalisa logika. Saya tidak punya osiloskop :-( Tetapi FPGA dan board dirancang untuk beroperasi hingga 400 MHz ( digilentinc.com/Products/… )
Lord Loh.
Saya akan mencoba menjalankan pada 9600 N81. Jika OK, gandakan kecepatan & coba lagi. bilas ulangi. Anda melakukan pemuatan byte selama keadaan "idle"? Pada kecepatan rendah, lingkup yang murah dan tidak menyenangkan mungkin berguna.
RedGrittyBrick
Ini adalah revisi pertama saya tentang UART. Saya belum menerapkan FIFO atau apa pun yang mewah. Hanya Serializer dan Deserializer.
Tuan Loh.
Terpikir oleh saya bahwa saya mendapatkan masalah yang sama apakah saya menggunakan pin IO untuk terhubung ke modul USB TTL UART ( ebay.com/itm/… ) atau USB UART onboard. Bisakah saya menghilangkan kegugupan sinyal?
Tuan Loh.
Sebenarnya, kedua ujungnya hanya perlu menyepakati laju data dan jumlah bit data + paritas. Hanya ada satu bit awal, dan UART modern harus dapat menangani bit satu stop. Sedikit lebih dari satu stop hanya tampak seperti "udara mati" antara karakter.
Daniel R Hicks
2

Apakah ada penundaan minimum yang harus dipertahankan antara dua frame RS232 berturut-turut?

Tidak, tidak ada persyaratan seperti itu (tidak ada min dan tidak ada maks) di EIA / RS232C.
Bit Mulai dari karakter berikutnya dapat langsung mengikuti Stop bit karakter.
Perhatikan bahwa baris menganggur pada kondisi Penandaan, yang levelnya sama dengan bit Stop.

Sangat menarik bahwa Anda tidak menyebutkan bit Stop dalam bingkai karakter.

Saya percaya UART di komputer kehilangan jejak perbedaan antara bit mulai dan nol. Penundaan antara dua "A" adalah ~ 30us (diukur dengan penganalisis logika)

Anda menggunakan alat yang salah untuk tugas ini! Anda harus menggunakan ruang lingkup '. Anda tidak dapat menganalisis masalah waktu dengan melihat tayangan analog dan sampel yang disanitasi.
Perbedaan antara bit Mulai dan nol adalah waktu. Bingkai karakter ditransmisikan pada tingkat yang tidak sinkron. Tetapi bit dari frame harus clock pada laju jam yang ditentukan.
Untuk baud rate 115200, itu akan menjadi 8.68usec untuk waktu 1 bit. Untuk 8 bit data plus bit Mulai dan bit Stop, waktu bingkai adalah 86,8 USD.
Pertanyaan Anda menyiratkan bahwa Anda tidak repot-repot melihat spesifikasi EIA / RS232C untuk waktu naik / turun minimum dan ketika sinyal biasanya diambil sampelnya. Metode menarik untuk mengimplementasikan HW.

Mungkin Anda juga harus menggunakan penghitung frekuensi untuk mengukur generator baud rate di setiap ujungnya. Ketidakcocokan beberapa persen biasanya dapat ditoleransi. Ketidakcocokan bisa menghasilkan gejala yang Anda lihat.
Kenapa kesalahan framing tidak dilaporkan oleh penerima? Alih-alih hanya melihat output, mungkin Anda perlu meninjau statistik port serial, yaitu/proc/tty/driver/...

serbuk gergaji
sumber
Menggunakan FPGA, saya memiliki sedikit kendali atas waktu kenaikan atau waktu jatuh. Juga, saya tidak mencoba untuk mengimplementasikan spesifikasi EIA / RS232C. Apa yang saya bisa lakukan dengan FPGA adalah sebuah serdes. Contoh kode yang disediakan oleh vendor berfungsi dengan baik - jadi saya mengesampingkan masalah analog. Meskipun kode contoh tidak membuang karakter tunggal secepat perangkat keras mungkin bisa.
Tuan Loh.
1

Saya menduga bahwa UART masih sangat mirip dengan yang asli. Mereka menggunakan clock rate 16xdata untuk "sampel" data, vs skema analog sebelumnya yang menggunakan osilator yang dipicu oleh edge. Dengan menggunakan pendekatan sampel, UART dapat dengan cukup akurat menempatkan waktu sampelnya di tengah-tengah pulsa, dan bahkan dapat melakukan beberapa sampel agar sedikit lebih toleran terhadap kebisingan.

Deskripsi Anda tidak jelas karena Anda berbicara dalam komentar baru-baru ini tentang "mendeteksi bit awal", tetapi sebelumnya Anda telah menyiratkan bahwa Anda MENYALANKAN dan karenanya tidak akan memiliki "deteksi".

Daniel R Hicks
sumber
Itu benar. Saya mengalami masalah dengan transmisi. Tapi bukan berarti receiver saya sempurna. Saya yakin ada masalah yang belum saya deteksi. Saya tidak tahu jam penerima 16x. Saya telah memikirkan sesuatu yang serupa, tetapi tidak mengimplementasikannya karena akan membutuhkan lebih banyak perangkat keras. Saya mungkin mencoba 4x.
Tuan Loh.
1
Tanpa skema 16x Anda punya masalah membangun osilator yang dapat dipicu yang dapat dipicu oleh bit awal dan kemudian menandai waktu dengan cukup akurat. Ini adalah masalah "analog" sirkuit, dan, seperti kita semua tahu, solusi analog jauh lebih fussier dan kurang tepat daripada solusi digital.
Daniel R Hicks