USART, UART, RS232, USB, SPI, I2C, TTL, dll. Apa semua ini dan bagaimana hubungannya satu sama lain?

166

Sebagai penggemar elektronik pemula, saya telah mendengar istilah-istilah ini dan lebih banyak dilemparkan ke mana-mana. Pada dasarnya, saya mengerti bahwa mereka semua didasarkan pada komunikasi antara perangkat, komputer, periferal, dll.

Saya memiliki pemahaman dasar tentang bagaimana mereka semua bekerja, tetapi saya menjadi bingung ketika saya melihat begitu banyak dari mereka dan saya mengalami kesulitan memahami bagaimana mereka berhubungan satu sama lain. Misalnya, apakah UART adalah subset dari USART? Apa perbedaan antara RS232 dan Serial? Apa perbedaan inti antara semua metode komunikasi ini: keandalan, biaya, aplikasi, kecepatan, persyaratan perangkat keras?

Jika Anda dapat membayangkan, saya memiliki semua istilah ini tertulis di kartu, tersebar di meja kopi, dan saya butuh seseorang untuk membantu saya mengatur pemahaman saya. Maafkan saya jika pertanyaan ini sedikit kabur, tetapi saya benar-benar merasa bahwa sifat dari pertanyaan ini bersama-sama.

capcom
sumber
pertanyaan terkait: Perbedaan antara UART dan RS232?
Nick Alexeev

Jawaban:

253

Serial adalah kata utama untuk semua itu "Time Division Multiplexed", untuk menggunakan istilah yang mahal. Ini berarti bahwa data dikirim tersebar dari waktu ke waktu, paling sering satu demi satu bit. Semua protokol yang Anda namai adalah protokol serial.

UART, untuk Universal Asynchronous Receiver Transmitter, adalah salah satu protokol serial yang paling banyak digunakan. Ini hampir setua saya, dan sangat sederhana. Sebagian besar pengontrol memiliki UART perangkat keras di papan. Ini menggunakan jalur data tunggal untuk mentransmisikan dan satu untuk menerima data. Paling sering data 8-bit ditransfer, sebagai berikut: 1 bit awal (level rendah), 8 bit data, dan 1 stop bit (level tinggi). Bit mulai level rendah dan bit stop level tinggi berarti selalu ada transisi tinggi ke rendah untuk memulai komunikasi. Itulah yang menggambarkan UART. Tidak ada level tegangan, jadi Anda bisa memilikinya di 3,3 V atau 5 V, mana pun yang digunakan mikrokontroler Anda. Perhatikan bahwa mikrokontroler yang ingin berkomunikasi melalui UART harus menyetujui kecepatan transmisi, bit-rate, karena mereka hanya memiliki bit mulai jatuh untuk disinkronkan. Itu disebut komunikasi asinkron.

Untuk komunikasi jarak jauh (Itu tidak harus ratusan meter) UART 5 V tidak terlalu dapat diandalkan, itu sebabnya ia dikonversi ke tegangan yang lebih tinggi, biasanya +12 V untuk "0" dan -12 V untuk " 1 ". Format data tetap sama. Maka Anda memiliki RS-232 (yang sebenarnya harus Anda hubungi EIA-232, tetapi tidak ada yang melakukannya.)

Ketergantungan waktu adalah salah satu kelemahan besar dari UART, dan solusinya adalah USART , untuk Universal Synchronous / Asynchronous Receiver Transmitter. Ini bisa dilakukan UART, tetapi juga protokol sinkron. Secara sinkron tidak hanya data, tetapi juga jam yang dikirimkan. Dengan setiap bit, pulsa jam memberi tahu penerima bahwa ia harus mengunci bit itu. Protokol sinkron membutuhkan bandwidth yang lebih tinggi, seperti dalam kasus pengkodean Manchester, atau kabel tambahan untuk jam tersebut, seperti SPI dan I2C.

SPI (Serial Peripheral Interface) adalah protokol serial yang sangat sederhana. Seorang master mengirimkan sinyal jam, dan pada setiap jam pulsa itu bergeser satu bit ke budak, dan satu bit masuk, datang dari budak. Karenanya, nama sinyal adalah SCK untuk jam, MOSI untuk Master Out Slave In, dan MISO untuk Master In Slave Out. Dengan menggunakan sinyal SS (Slave Select), master dapat mengontrol lebih dari satu budak di bus. Ada dua cara untuk menghubungkan beberapa perangkat slave ke satu master, satu disebutkan di atas yaitu menggunakan slave select, dan lainnya adalah daisy chaining, ia menggunakan lebih sedikit pin hardware (jalur pilih), tetapi software menjadi rumit.

I2C(Inter-Integrated Circuit, dilafalkan "I kuadrat C") juga merupakan protokol sinkron, dan ini adalah yang pertama kali kita lihat yang memiliki beberapa "kecerdasan" di dalamnya; yang lain menggeser bit masuk dan keluar, dan itu saja. I2C hanya menggunakan 2 kabel, satu untuk clock (SCL) dan satu untuk data (SDA). Itu berarti bahwa master dan slave mengirim data melalui kabel yang sama, sekali lagi dikendalikan oleh master yang menciptakan sinyal clock. I2C tidak menggunakan Pilihan Slave terpisah untuk memilih perangkat tertentu, tetapi memiliki pengalamatan. Byte pertama yang dikirim oleh master memegang alamat 7 bit (sehingga Anda dapat menggunakan 127 perangkat di bus) dan bit baca / tulis, menunjukkan apakah byte berikutnya juga akan berasal dari master atau harus berasal dari budak. Setelah setiap byte, penerima harus mengirim "0" untuk mengakui penerimaan byte, yang master latch dengan pulsa jam ke-9. Jika master ingin menulis byte, proses yang sama berulang: master meletakkan bit demi bit di bus dan setiap kali memberikan pulsa jam untuk memberi sinyal bahwa data siap dibaca. Jika master ingin menerima data, itu hanya menghasilkan pulsa clock. Budak harus berhati-hati bahwa bit berikutnya siap ketika pulsa clock diberikan. Protokol ini dipatenkan oleh NXP (sebelumnya Phillips), untuk menghemat biaya lisensi, Atmel menggunakan kata TWI (antarmuka 2-kawat) yang persis sama dengan I2C, jadi setiap perangkat AVR tidak akan memiliki I2C tetapi akan memiliki TWI. Jika master ingin menerima data, itu hanya menghasilkan pulsa clock. Budak harus berhati-hati bahwa bit berikutnya siap ketika pulsa clock diberikan. Protokol ini dipatenkan oleh NXP (sebelumnya Phillips), untuk menghemat biaya lisensi, Atmel menggunakan kata TWI (antarmuka 2-kawat) yang persis sama dengan I2C, jadi setiap perangkat AVR tidak akan memiliki I2C tetapi akan memiliki TWI. Jika master ingin menerima data, itu hanya menghasilkan pulsa clock. Budak harus berhati-hati bahwa bit berikutnya siap ketika pulsa clock diberikan. Protokol ini dipatenkan oleh NXP (sebelumnya Phillips), untuk menghemat biaya lisensi, Atmel menggunakan kata TWI (antarmuka 2-kawat) yang persis sama dengan I2C, jadi setiap perangkat AVR tidak akan memiliki I2C tetapi akan memiliki TWI.

Dua atau lebih sinyal pada kabel yang sama dapat menyebabkan konflik, dan Anda akan memiliki masalah jika satu perangkat mengirim "1" sementara yang lain mengirim "0". Oleh karena itu bus terhubung dengan kabel-ATAU: dua resistor menarik bus ke level tinggi, dan perangkat hanya mengirim level rendah. Jika mereka ingin mengirim level tinggi, mereka cukup melepaskan bus.

TTL (Transistor Transistor Logic) bukan protokol. Ini adalah teknologi yang lebih tua untuk logika digital, tetapi namanya sering digunakan untuk merujuk pada tegangan suplai 5 V, sering secara tidak tepat merujuk pada apa yang seharusnya disebut UART.


Tentang masing-masing ini Anda dapat menulis buku, dan sepertinya saya baik-baik saja dalam perjalanan. Ini hanya gambaran singkat, beri tahu kami jika ada beberapa hal yang perlu diklarifikasi.

stevenvh
sumber
+1 hanya di TTL, saya menduga bahwa OP berarti Serial TTL yang menurut pengalaman saya menjelaskan sinyal UART sebelum transceiver / sopir bus RS232.
kenny
4
@ Kenny - tapi tidak ada yang namanya "serial TTL". Itu UART. Bagaimana jika tegangannya 3,3 V? TTL hanya mengacu pada 5 V.
stevenvh
itulah yang saya bicarakan, I / O UART sering disebut dalam pengalaman saya TTL Serial.
kenny
Respon luar biasa! Saya akan membacanya beberapa kali lagi, dan memberi tahu Anda jika saya memiliki pertanyaan. Terima kasih, Steven.
capcom
8
Taruhan yang lebih baik adalah menangkap ikan untuk usia Uart :-)
Vaibhav Garg
11

Ini sangat dekat dengan wilayah di mana Anda akan lebih baik membaca artikel daripada mengajukan pertanyaan untuk tanggapan khusus, tetapi untuk mengatasi satu poin utama yang kadang kabur oleh pabrikan:

Ada dua jenis dasar antarmuka serial: sinkron dan asinkron.

Antarmuka sinkron memiliki data yang dikirim dengan pengaturan waktu relatif terhadap jam eksplisit, yang juga disediakan. Contoh klasik dari ini adalah SPI, tetapi ada juga bentuk-bentuk khusus seperti I2S untuk konverter audio, JTAG, antarmuka konfigurasi FPGA, dll. Banyak saluran komunikasi paralel hanya ide ini diperluas untuk memindahkan lebih banyak bit sekaligus. Seringkali tetapi tidak selalu ini mengirimkan bit yang paling signifikan terlebih dahulu.

Antarmuka asinkron memiliki waktu yang disandikan dalam aliran data itu sendiri. Untuk "port serial" dan standar terkait seperti RS232, waktu kata relatif terhadap bit mulai, dan penerima hanya sampel garis pada interval yang tepat sesudahnya. Antarmuka lain bisa sedikit lebih rumit dan membutuhkan pemulihan jam yang lebih bagus menggunakan loop dan algoritma fase terkunci. UART adalah "Universal Asynchronous Receiver Transmitter" - benar-benar nama untuk blok fungsional yang sering digunakan untuk mengimplementasikan "port serial" dengan beberapa fleksibilitas untuk panjang kata, kecepatan, dan kondisi awal / akhir. Hal-hal seperti RS232, RS422, dll adalah standar untuk pensinyalan listrik off-board dari data yang akan Anda peroleh dari ini - tegangan, ujung tunggal atau diferensial, jika angka 1 tinggi atau rendah, dll.

"USART" dapat menjadi sumber kebingungan yang sah, karena merupakan semacam perangkat hibrid, "Pemancar Penerima Sinkron / Asinkron yang Tidak Berbalik" Pada dasarnya, ini dan paling umum digunakan sebagai UART, tetapi juga dapat dikonfigurasi untuk menghasilkan (atau mempertimbangkan) jam terpisah yang disinkronkan ke data, dan mungkin dapat membalik urutan bit. Biasanya dapat dikonfigurasi untuk beroperasi dengan SPI, tetapi mungkin tidak dapat menghapus waktu yang didedikasikan untuk memulai / menghentikan bit sehingga mungkin tidak dapat beroperasi dengan sesuatu seperti I2S yang dapat berharap memiliki data yang mengalir terus menerus tanpa kesenjangan antara kata-kata.

Chris Stratton
sumber
Penjelasan yang sangat bagus (Y) Mencintai singkatnya. Terima kasih @chris
Avi Mehenwal
8

RS-232 adalah protokol serial yang sangat sederhana yang pada awalnya digunakan untuk modem dan teletype. Ini adalah apa yang biasa disebut port serial (atau port COM di MS-Windows). Pada garis itu secara nominal menggunakan tingkat ± 12V, tetapi mereka dapat sangat bervariasi karena deteksi ditentukan pada ± 3V. Selalu ada driver garis (saat ini biasanya dari keluarga MAX232) yang mengubah level-level ini ke dan dari level sinyal digital internal komputer atau mikrokontroler.

TTL berarti Transistor-Transistor-Logic dan memiliki level untuk nol logis dekat 0V dan untuk yang logis dekat 5V. Seringkali setiap logika 5V disebut TTL, meskipun sebagian besar sirkuit saat ini dibangun sebagai CMOS. Saat ini ada juga banyak sirkuit yang bekerja di 3.3V, yang tidak lagi TTL.

Sehubungan dengan tingkat internal tingkat pada garis RS-232 terbalik, + 12V sesuai dengan logis rendah dan -12V sesuai dengan logis tinggi, yang dapat membingungkan.

Untuk menggambarkan format data, biasanya ditunjukkan sinyal logis. Ketika garis siaga, tinggi. Transmisi dimulai dengan bit awal yang rendah, bit data dengan bit yang paling tidak signifikan terlebih dahulu, bit paritas opsional dan bit stop satu atau dua (logis 1). Ini disebut transmisi asinkron, karena bit start dan stop menyinkronkan data untuk setiap byte secara terpisah.

UART (Universal Asynchronous Receiver Transmitter) adalah perangkat di komputer atau mikrokontroler yang melakukan komunikasi asinkron semacam ini.

USART (Universal Asynchronous Receiver Synchronous Receiver) adalah perangkat yang selain dapat melakukan beberapa jenis transmisi sinkron, maka S. tambahan yang jenisnya bervariasi, Anda perlu mencarinya di lembar data.

SPI, I²C, dan USB berbeda (dan dalam hal USB sangat panjang) cerita.

starblue
sumber
1

Saya setuju dengan apa yang telah disebutkan tentang protokol SPI dan CAN. Untuk meningkatkan kinerja yang lebih baik, protokol CAN telah dirancang. Dalam konsep Arbitrase ini digunakan di mana dua perangkat siap untuk berkomunikasi, kemudian tergantung pada prioritasnya pengiriman atau penerimaan berlangsung. CAN banyak digunakan di banyak industri.

pengguna19166
sumber