USART, UART, RS232, USB, SPI, I2C, TTL และอื่น ๆ ทั้งหมดนี้คืออะไรและเกี่ยวข้องกันอย่างไร


165

ในฐานะที่เป็นนักเล่นงานอดิเรกมืออาชีพด้านอิเล็กทรอนิกส์ฉันเคยได้ยินคำศัพท์เหล่านี้และถูกโยนไปทั่วทุกหนแห่งมากขึ้น ที่รากของฉันเข้าใจว่าพวกเขาทั้งหมดขึ้นอยู่กับการสื่อสารระหว่างอุปกรณ์คอมพิวเตอร์อุปกรณ์ต่อพ่วง ฯลฯ

ฉันมีความเข้าใจพื้นฐานเกี่ยวกับวิธีการทำงานของพวกเขาทั้งหมด แต่ฉันสับสนเมื่อเห็นพวกเขาจำนวนมากและมีปัญหาในการทำความเข้าใจว่าพวกเขาเกี่ยวข้องกันอย่างไร ตัวอย่างเช่น UART เป็นชุดย่อยของ USART หรือไม่ ความแตกต่างระหว่าง RS232 และ Serial คืออะไร? อะไรคือความแตกต่างที่สำคัญระหว่างวิธีการสื่อสารเหล่านี้ทั้งหมด: ความน่าเชื่อถือราคาแอปพลิเคชันความเร็วความต้องการด้านฮาร์ดแวร์?

หากคุณสามารถจินตนาการได้ว่าฉันมีคำศัพท์เหล่านี้เขียนบนบัตรกระจายอยู่บนโต๊ะกาแฟและฉันต้องการใครซักคนที่จะช่วยฉันจัดระเบียบความเข้าใจของฉัน ยกโทษให้ฉันถ้าคำถามนี้คลุมเครือเล็กน้อย แต่ฉันรู้สึกว่านั่นเป็นธรรมชาติของคำถามนี้ทั้งหมดเข้าด้วยกัน


คำตอบ:


253

Serialเป็นคำศัพท์สำหรับทุกสิ่งที่เป็น "Time Division Multiplexed" เพื่อใช้คำที่มีราคาแพง หมายความว่ามีการส่งข้อมูลเมื่อเวลาผ่านไปซึ่งส่วนใหญ่จะเป็นบิตเดียวหลังจากนั้นอีกหนึ่งบิต โปรโตคอลทั้งหมดที่คุณตั้งชื่อนั้นเป็นโปรโตคอลอนุกรม

UARTสำหรับ Universal Asynchronous Receiver Transmitter เป็นหนึ่งในโปรโตคอลอนุกรมที่ใช้มากที่สุด มันเกือบจะเก่าแก่เหมือนฉันและเรียบง่ายมาก คอนโทรลเลอร์ส่วนใหญ่มีฮาร์ดแวร์ UART บนเครื่อง มันใช้สายข้อมูลเดียวสำหรับการส่งและหนึ่งสำหรับการรับข้อมูล การถ่ายโอนข้อมูล 8 บิตส่วนใหญ่มักจะเป็นดังนี้: 1 บิตเริ่มต้น (ระดับต่ำ), 8 บิตข้อมูลและ 1 บิตหยุด (ระดับสูง) บิตเริ่มต้นระดับต่ำและบิตหยุดระดับสูงหมายความว่ามีการเปลี่ยนแปลงสูงถึงต่ำเสมอเพื่อเริ่มการสื่อสาร นั่นคือสิ่งที่อธิบาย UART ไม่มีระดับแรงดันไฟฟ้าดังนั้นคุณสามารถรับได้ที่ 3.3 V หรือ 5 V ไม่ว่าจะใช้ไมโครคอนโทรลเลอร์แบบใดก็ตาม โปรดทราบว่าไมโครคอนโทรลเลอร์ที่ต้องการสื่อสารผ่าน UART ต้องยอมรับความเร็วในการส่งข้อมูลซึ่งเป็นอัตราบิตเนื่องจากมีเพียงบิตเริ่มต้นที่ลดลงเพื่อซิงโครไนซ์ นั่นเรียกว่าการสื่อสารแบบอะซิงโครนัส

สำหรับการสื่อสารทางไกล (ที่ไม่ต้องเป็นหลายร้อยเมตร) 5 VART UART ไม่น่าเชื่อถือมากนั่นเป็นสาเหตุที่มันถูกแปลงเป็นแรงดันไฟฟ้าที่สูงกว่าปกติคือ +12 V สำหรับ "0" และ -12 V สำหรับ " 1" รูปแบบข้อมูลยังคงเหมือนเดิม จากนั้นคุณมีRS-232 (ซึ่งคุณควรโทรหา EIA-232 แต่ไม่มีใครทำ)

การพึ่งพาเวลาเป็นหนึ่งในข้อเสียใหญ่ของ UART และการแก้ปัญหาคือUSARTสำหรับ Universal Synchronous / Asynchronous Receiver Transmitter สิ่งนี้สามารถทำ UART แต่ยังเป็นโปรโตคอลแบบซิงโครนัส ในแบบซิงโครนัสไม่เพียงมีข้อมูล แต่ยังส่งสัญญาณนาฬิกาอีกด้วย ในแต่ละบิตสัญญาณนาฬิกาจะบอกผู้รับว่าควรสลักบิตนั้น โปรโตคอลแบบซิงโครนัสอาจต้องการแบนด์วิดท์ที่สูงกว่าเช่นในกรณีของการเข้ารหัสแมนเชสเตอร์หรือสายเพิ่มเติมสำหรับนาฬิกาเช่น SPI และ I2C

SPI (Serial Peripheral Interface) เป็นอีกโปรโตคอลที่ง่ายมาก ต้นแบบส่งสัญญาณนาฬิกาและในแต่ละนาฬิกาพัลส์มันจะเลื่อนหนึ่งบิตออกไปที่ทาสและหนึ่งบิตเข้ามาจากทาส ชื่อสัญญาณจึงเป็น SCK สำหรับนาฬิกา MOSI สำหรับ Master Out Slave In และ MISO สำหรับ Master In Slave Out ด้วยการใช้สัญญาณ SS (Slave Select) สัญญาณหลักจะสามารถควบคุมทาสได้มากกว่าหนึ่งตัวบนรถบัส มีสองวิธีในการเชื่อมต่ออุปกรณ์สลาฟหลายตัวเข้ากับอุปกรณ์หลักหนึ่งตัวดังกล่าวข้างต้นนั่นคือใช้การเลือกทาสและอื่น ๆ คือการเชื่อมต่อเดซี่โดยใช้พินฮาร์ดแวร์น้อยลง (เลือกบรรทัด) แต่ซอฟต์แวร์ซับซ้อน

I2C(Inter-Integrated Circuit, เด่นชัด "I squared C") เป็นโปรโตคอลแบบซิงโครนัสและเป็นครั้งแรกที่เราเห็นว่ามี "ปัญญา" อยู่ในนั้น อีกชิ้นหนึ่งเลื่อนบิตเข้าและออกอย่างงี่เง่าและนั่นก็เป็นเช่นนั้น I2C ใช้สายไฟเพียง 2 เส้นสายหนึ่งสำหรับนาฬิกา (SCL) และอีกสายสำหรับข้อมูล (SDA) นั่นหมายความว่าเจ้านายและทาสส่งข้อมูลผ่านสายเดียวกันควบคุมอีกครั้งโดยต้นแบบที่สร้างสัญญาณนาฬิกา I2C ไม่ได้ใช้ Slave Selects แยกต่างหากเพื่อเลือกอุปกรณ์เฉพาะ แต่มีการกำหนดแอดเดรส ไบต์แรกที่ส่งโดยต้นแบบมีที่อยู่ 7 บิต (เพื่อให้คุณสามารถใช้อุปกรณ์ 127 บนรถบัส) และบิตอ่าน / เขียนระบุว่าไบต์ถัดไปจะมาจากต้นแบบหรือไม่ควรมาจาก ทาส. หลังจากแต่ละไบต์ผู้รับจะต้องส่ง "0" เพื่อรับทราบการรับของไบต์ ซึ่งต้นแบบจะยึดกับพัลส์นาฬิกาที่ 9 หากต้นแบบต้องการเขียนไบต์กระบวนการเดียวกันจะทำซ้ำ: ต้นแบบวางบิตหลังจากบิตบนบัสและแต่ละครั้งจะให้สัญญาณนาฬิกาเพื่อส่งสัญญาณว่าข้อมูลพร้อมที่จะอ่าน หากต้นแบบต้องการรับข้อมูลมันจะสร้างสัญญาณนาฬิกาเท่านั้น ทาสต้องดูแลให้บิตถัดไปพร้อมเมื่อชีพจรนาฬิกาถูกกำหนด โปรโตคอลนี้ได้รับการจดสิทธิบัตรโดย NXP (เดิมคือ Phillips) เพื่อประหยัดค่าใช้จ่ายในการออกใบอนุญาต Atmel ใช้คำว่า TWI (อินเตอร์เฟสแบบ 2 สาย) ซึ่งเหมือนกับ I2C ดังนั้นอุปกรณ์ AVR ใด ๆ จะไม่มี I2C แต่จะมี TWI หากต้นแบบต้องการรับข้อมูลมันจะสร้างสัญญาณนาฬิกาเท่านั้น ทาสต้องดูแลให้บิตถัดไปพร้อมเมื่อชีพจรนาฬิกาถูกกำหนด โปรโตคอลนี้ได้รับการจดสิทธิบัตรโดย NXP (เดิมคือ Phillips) เพื่อประหยัดค่าใช้จ่ายในการออกใบอนุญาต Atmel ใช้คำว่า TWI (อินเตอร์เฟสแบบ 2 สาย) ซึ่งเหมือนกับ I2C ดังนั้นอุปกรณ์ AVR ใด ๆ จะไม่มี I2C แต่จะมี TWI หากต้นแบบต้องการรับข้อมูลมันจะสร้างสัญญาณนาฬิกาเท่านั้น ทาสต้องดูแลให้บิตถัดไปพร้อมเมื่อชีพจรนาฬิกาถูกกำหนด โปรโตคอลนี้ได้รับการจดสิทธิบัตรโดย NXP (เดิมคือ Phillips) เพื่อประหยัดค่าใช้จ่ายในการออกใบอนุญาต Atmel ใช้คำว่า TWI (อินเตอร์เฟสแบบ 2 สาย) ซึ่งเหมือนกับ I2C ดังนั้นอุปกรณ์ AVR ใด ๆ จะไม่มี I2C แต่จะมี TWI

สัญญาณตั้งแต่สองสายขึ้นไปบนสายเดียวกันอาจทำให้เกิดความขัดแย้งและคุณจะมีปัญหาหากอุปกรณ์หนึ่งส่ง "1" ในขณะที่อีกสายหนึ่งส่ง "0" ดังนั้นบัสจึงมีสาย - หรือ: ตัวต้านทานสองตัวดึงบัสไปที่ระดับสูงและอุปกรณ์ส่งระดับต่ำเท่านั้น หากพวกเขาต้องการส่งระดับสูงพวกเขาเพียงแค่ปล่อยรถบัส

TTL (Transistor Transistor Logic) ไม่ใช่โปรโตคอล มันเป็นเทคโนโลยีที่เก่ากว่าสำหรับลอจิกดิจิทัล แต่ชื่อนี้มักใช้เพื่ออ้างถึงแรงดันไฟฟ้า 5 V ซึ่งมักจะอ้างถึงสิ่งที่เรียกว่า UART อย่างไม่ถูกต้อง


คุณสามารถเขียนหนังสือเกี่ยวกับแต่ละเรื่องได้และดูเหมือนว่าฉันกำลังเดินทาง นี่เป็นเพียงภาพรวมโดยย่อแจ้งให้เราทราบหากมีบางสิ่งที่ต้องการการชี้แจง


+1 เฉพาะกับ TTL ฉันเดาว่า OP หมายถึง Serial TTL ซึ่งในประสบการณ์ของฉันอธิบายสัญญาณ UART ก่อนไดรเวอร์ตัวรับส่งสัญญาณ / บัส RS232
เคนนี

4
@ เคนนี่ - แต่ไม่มีสิ่งใดที่ไม่เหมือน "อนุกรม TTL" นั่นคือ UART เกิดอะไรขึ้นถ้าแรงดันไฟฟ้าคือ 3.3 V? TTL หมายถึง 5 V.
stevenvh

นั่นคือสิ่งที่ฉันกำลังพูดถึง I / O ของ UART มักถูกเรียกในประสบการณ์ของฉัน TTL Serial
เคนนี

การตอบสนองที่น่าทึ่ง! ฉันจะอ่านอีกสองสามครั้งและแจ้งให้คุณทราบหากฉันมีข้อสงสัย ขอบคุณสตีเวน
capcom

8
ทางออกที่ดีกว่าคือการหาปลาสำหรับอายุ Uart แล้ว :-)
Vaibhav Garg

11

นี่อยู่ใกล้กับอาณาเขตของบางสิ่งที่คุณควรอ่านบทความได้ดีกว่าการถามคำถามสำหรับคำตอบที่กำหนดเอง แต่เพื่อพูดถึงประเด็นสำคัญข้อหนึ่งซึ่งบางครั้งผู้ผลิตเบลอ:

อินเตอร์เฟสแบบอนุกรมมีสองประเภทพื้นฐาน: แบบซิงโครนัสและแบบอะซิงโครนัส

อินเทอร์เฟซแบบซิงโครนัสมีข้อมูลที่ส่งมาพร้อมกับเวลาที่สัมพันธ์กับนาฬิกาที่ชัดเจนซึ่งมีให้เช่นกัน ตัวอย่างคลาสสิกของ SPI นี้ แต่ก็มีรูปแบบพิเศษเช่น I2S สำหรับตัวแปลงเสียง JTAG อินเตอร์เฟสการกำหนดค่า FPGA และอื่น ๆ อีกมากมายช่องทางการสื่อสารแบบขนานเป็นเพียงความคิดนี้ที่ขยายไปสู่การย้ายบิตมากขึ้นในครั้งเดียว บ่อยครั้งที่สิ่งเหล่านี้ส่งบิตที่สำคัญที่สุดไปก่อนเสมอ

อินเตอร์เฟสแบบอะซิงโครนัสมีการเข้ารหัสเวลาในสตรีมข้อมูลเอง สำหรับ "พอร์ตอนุกรม" และมาตรฐานที่เกี่ยวข้องเช่น RS232 ระยะเวลาของคำนั้นสัมพันธ์กับบิตเริ่มต้นและผู้รับเพียงตัวอย่างบรรทัดในช่วงเวลาที่เหมาะสมหลังจากนั้น อินเทอร์เฟซอื่นอาจซับซ้อนกว่าเล็กน้อยและต้องการการกู้คืนนาฬิกาที่ดีขึ้นโดยใช้ลูปล็อกเฟสและอัลกอริทึม UART คือ "Universal Asynchronous Receiver Transmitter" - จริงๆแล้วชื่อของบล็อกที่ใช้งานได้มักจะใช้ในการ "serial port" ที่มีความยืดหยุ่นบางอย่างกับความยาวของคำ, อัตราและเงื่อนไขเริ่มต้น / สิ้นสุด สิ่งต่าง ๆ เช่น RS232, RS422 ฯลฯ เป็นมาตรฐานสำหรับการส่งสัญญาณไฟฟ้านอกบอร์ดของข้อมูลที่คุณจะได้รับจากแรงดันไฟฟ้าการสิ้นสุดเดี่ยวหรือค่าต่าง ๆ หาก 1 มีค่าสูงหรือต่ำเป็นต้น

"USART" สามารถเป็นแหล่งของความสับสนที่ถูกต้องตามกฎหมายเนื่องจากเป็นอุปกรณ์ไฮบริดซึ่งเป็น "Unversal Synchronous / Asynchronous Receiver Transmitter" เป็นหลักนี่คือและมักใช้เป็น UART แต่ก็สามารถกำหนดค่าให้ สร้าง (หรือพิจารณา) นาฬิกาแยกต่างหากที่ซิงโครไนซ์กับข้อมูลและอาจสามารถกลับลำดับบิตได้ โดยปกติจะสามารถกำหนดค่าให้ทำงานร่วมกับ SPI ได้ แต่อาจไม่สามารถลบเวลาที่กำหนดให้กับบิตเริ่ม / หยุดดังนั้นจึงอาจไม่สามารถทำงานกับ I2S ซึ่งอาจคาดว่าจะมีข้อมูลไหลอย่างต่อเนื่องโดยไม่มีช่องว่างระหว่างคำ


คำอธิบายที่ดีมาก (Y) ชอบความกะทัดรัด Thankyou @chris
Avi Mehenwal

8

RS-232เป็นโปรโตคอลแบบอนุกรมที่ง่ายมากซึ่ง แต่เดิมใช้สำหรับโมเด็มและโทรพิมพ์ มันคือสิ่งที่เรียกว่าพอร์ตอนุกรม (หรือพอร์ต COM ใน MS-Windows) ในบรรทัดนั้นใช้ระดับ± 12V แต่อาจแตกต่างกันอย่างมากเนื่องจากการตรวจจับถูกระบุที่± 3V มีไดรเวอร์ Line อยู่เสมอ (ปัจจุบันมักจะมาจากตระกูล MAX232) ที่แปลงระดับเหล่านี้เป็นและจากระดับสัญญาณดิจิตอลภายในของคอมพิวเตอร์หรือไมโครคอนโทรลเลอร์

TTLหมายถึง Transistor-Transistor-Logic และมีระดับสำหรับศูนย์ตรรกะใกล้ 0V และสำหรับตรรกะหนึ่งใกล้ 5V บ่อยครั้งที่ตรรกะ 5V ใด ๆ เรียกว่า TTL แม้ว่าวงจรส่วนใหญ่ในปัจจุบันจะถูกสร้างเป็น CMOS วันนี้ยังมีวงจรจำนวนมากที่ทำงานที่ 3.3V ซึ่งไม่มี TTL อีกต่อไป

สำหรับระดับภายในนั้นระดับบนบรรทัด RS-232 นั้นกลับด้าน + 12V สอดคล้องกับโลจิคัลต่ำและ -12V สอดคล้องกับโลจิคัลสูงซึ่งอาจสร้างความสับสน

สำหรับการอธิบายรูปแบบข้อมูลมักจะแสดงสัญญาณตรรกะ เมื่อสายไม่ได้ใช้งานจะมีค่าสูง การส่งเริ่มต้นด้วยบิตเริ่มต้นต่ำบิตข้อมูลกับบิตสำคัญน้อยที่สุดก่อนพาริตี้บิตเสริมและบิตหยุดหนึ่งถึงสอง (ตรรกะ 1) สิ่งนี้เรียกว่าการส่งข้อมูลแบบอะซิงโครนัสเนื่องจากบิตเริ่มต้นและหยุดจะซิงโครไนซ์ข้อมูลสำหรับแต่ละไบต์แยกกัน

UART (Universal Asynchronous Receiver Transmitter) เป็นอุปกรณ์ในคอมพิวเตอร์หรือไมโครคอนโทรลเลอร์ที่ทำการสื่อสารแบบอะซิงโครนัสชนิดนี้

USART (Universal Asynchronous Synchronous Receiver Transmitter) เป็นอุปกรณ์ที่สามารถเพิ่มเติมการส่งสัญญาณแบบซิงโครนัสได้ดังนั้นการเพิ่ม S ชนิดอื่น ๆ คุณจำเป็นต้องค้นหาในแผ่นข้อมูล

SPI, I²Cและ USB นั้นแตกต่างกันไป (และในกรณีของ USB ที่ยาวมาก) เรื่องราว


1

ฉันเห็นด้วยกับสิ่งที่ถูกกล่าวถึงเกี่ยวกับโปรโตคอล SPI และ CAN เพื่อปรับปรุงประสิทธิภาพที่ดีขึ้นโปรโตคอล CAN ได้รับการออกแบบ ในแนวคิดอนุญาโตตุลาการนี้จะใช้ในการที่อุปกรณ์ทั้งสองพร้อมที่จะสื่อสารจากนั้นขึ้นอยู่กับลำดับความสำคัญของการส่งหรือรับ สามารถใช้กันอย่างแพร่หลายในหลายอุตสาหกรรม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.