UART เทียบกับ I2C เทียบกับ SPI

บทความนี้เปรียบเทียบโปรโตคอลการสื่อสาร I²C, SPI และ UART พร้อมเน้นย้ำถึงความแตกต่างที่สำคัญของโปรโตคอลเหล่านี้

UART เทียบกับ I2C เทียบกับ SPI

โปรโตคอล I2C

I2Cหรือ Inter-Integrated Circuit เป็นโปรโตคอลการสื่อสารแบบง่ายที่มักใช้ในระบบฝังตัวเพื่อถ่ายโอนข้อมูลระหว่างอุปกรณ์หลัก (หรืออุปกรณ์หลักหลายตัว) และอุปกรณ์สเลฟตัวเดียว (หรืออุปกรณ์สเลฟหลายตัว) I2C เป็นบัสอนุกรมแบบสองทิศทางสองสายที่ใช้สายสัญญาณนาฬิกาอนุกรม (SCL) และข้อมูลอนุกรม (SDA) เพื่อส่งและจัดการข้อมูลทีละบิตระหว่างอุปกรณ์ที่เชื่อมต่อกับบัส

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

เมื่อส่งข้อมูลผ่านบัส ข้อความ I2C แต่ละข้อความจะมีเฟรมแอดเดรสของอุปกรณ์สเลฟและเฟรมข้อมูลอย่างน้อยหนึ่งเฟรมที่บรรจุข้อมูลที่ถูกส่ง ข้อความยังประกอบด้วยเงื่อนไขเริ่มต้นและหยุด บิตอ่าน/เขียนจากมาสเตอร์หรือสเลฟ และบิต ACK/NACK ที่ส่งจากตัวรับเพื่อตรวจสอบข้อผิดพลาด

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

อัตราการถ่ายโอนข้อมูลมาตรฐานของโปรโตคอล I2C คือ 100 kbps แม้ว่าความเร็วข้อมูลจะสูงถึง 5 Mbps ก็ตาม โดยอุปกรณ์ I2C ที่กำหนดค่าใน "โหมดเร็ว" หรือ "โหมดเร็วพิเศษ"

โปรโตคอล SPI

SPIหรือ Serial Peripheral Interface เป็นโปรโตคอลการสื่อสารแบบอนุกรมที่มักใช้ในระบบฝังตัวสำหรับการแลกเปลี่ยนข้อมูลความเร็วสูงระหว่างอุปกรณ์บนบัส ทำงานโดยใช้รูปแบบ master-slave ซึ่งประกอบด้วยสัญญาณอย่างน้อยสี่สัญญาณ ได้แก่ สัญญาณนาฬิกา (SCLK), สัญญาณเอาต์พุตหลัก/อินพุตรอง (MOSI), สัญญาณเอาต์พุตหลัก/เอาต์พุตรอง (MISO) และสัญญาณเลือกสเลฟ (SS) สัญญาณ SCLK, MOSI และ MISO จะถูกใช้ร่วมกันโดยอุปกรณ์ทั้งหมดบนบัส สัญญาณ SCLK ถูกสร้างขึ้นโดยอุปกรณ์หลักเพื่อการซิงโครไนซ์ ในขณะที่สาย MOSI และ MISO ใช้สำหรับการแลกเปลี่ยนข้อมูล นอกจากนี้ อุปกรณ์สเลฟแต่ละตัวที่เพิ่มเข้าไปในบัสจะมีสาย SS ของตัวเอง โดยอุปกรณ์หลักจะดึงสาย SS ของสเลฟต่ำเพื่อเลือกอุปกรณ์สำหรับการสื่อสาร

การสื่อสาร SPI รองรับ การสื่อสารแบบฟูลดูเพล็กซ์หมายความว่าทั้งมาสเตอร์และสเลฟสามารถส่งข้อมูลพร้อมกันได้

ตัว Exchange เองไม่มีโปรโตคอลที่กำหนดไว้ล่วงหน้า ซึ่งทำให้ SPI เหมาะอย่างยิ่งสำหรับการใช้งานการสตรีมข้อมูล นอกจากนี้ยังไม่มีความเร็วสูงสุด โดยสามารถทำความเร็วข้อมูลได้เกิน 100 MHz

ทำความเข้าใจ UART

UART หรือ Universal Asynchronous Receiver/Transmitter เป็นวงจรทางกายภาพในไมโครคอนโทรลเลอร์หรือ วงจรรวมเดี่ยว (IC) ที่ใช้ในการสื่อสารแบบอนุกรมระหว่างอุปกรณ์ในระบบฝังตัว โดยพื้นฐานแล้ว วัตถุประสงค์หลักของ UART คือการส่งและรับข้อมูลแบบอนุกรม

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

ในการสื่อสาร UART จำเป็นต้องใช้สายเพียงสองเส้นในการสื่อสาร: ข้อมูลจะไหลจากพิน Tx ของ UART ที่ส่ง (Transmitter Tx) ไปยังพิน Rx ของ UART ที่รับ (Receiver Rx)

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

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

การเปรียบเทียบการสื่อสาร I2C, SPI และ UART

SPI เทียบกับ I2C

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

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

I2C มักเป็นตัวเลือกที่ดีสำหรับการเชื่อมต่ออุปกรณ์ระยะสั้นความเร็วต่ำ เช่น ไมโครคอนโทรลเลอร์ EEPROM อินเทอร์เฟซ I/O และอุปกรณ์ต่อพ่วงอื่นๆ เช่น เซ็นเซอร์ในระบบฝังตัว

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

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

UART เทียบกับ I2C เทียบกับ SPI

ต่างจากโปรโตคอลการสื่อสารอย่าง I2C และ SPI ตรงที่ UART เป็นวงจรทางกายภาพ ในขณะที่ SPI และ I2C ใช้รูปแบบ master/slave เพื่อควบคุมอุปกรณ์และส่งข้อมูล การสื่อสาร UART จะรวมอุปกรณ์ UART สองตัวเข้าด้วยกันเพื่อส่งและรับข้อมูล นอกจากนี้ยังไม่ทำงานโดยใช้สัญญาณนาฬิกา ดังนั้นอัตราบอดของ UART แต่ละตัวจึงจำเป็นต้องอยู่ในช่วง 10% ของกันและกันเพื่อป้องกันการสูญหายของข้อมูล

แม้จะมีความแตกต่างกันในแง่มุมเหล่านี้ แต่ UART ก็มีความคล้ายคลึงกับ I2C และ SPI ในบางด้าน ยกตัวอย่างเช่น ทั้ง I2C และ UART ใช้อินเทอร์เฟซแบบสองสายในการส่งและรับข้อมูล และมักเหมาะอย่างยิ่งสำหรับการส่งข้อมูลความเร็วต่ำ นอกจากนี้ UART และ I2C ยังมีกลไกการตรวจสอบข้อผิดพลาดร่วมกันเพื่อช่วยรับประกันความสมบูรณ์ของข้อมูล โดย I2C ใช้บิต ACK/NACK ขณะที่ UART ใช้บิตพาริตีเพื่อแยกแยะการเปลี่ยนแปลงใดๆ ในข้อมูลระหว่างการส่งข้อมูล

นอกจากนี้ ทั้ง UART และ SPI ยังรองรับการสื่อสารแบบฟูลดูเพล็กซ์ และไม่รองรับการกำหนดค่าแบบมัลติมาสเตอร์ อย่างไรก็ตาม SPI มีความเร็วที่เร็วกว่า UART และ I2C มาก

UART มักใช้เป็นรูปแบบการสื่อสารระหว่างอุปกรณ์ในแอปพลิเคชันคอมพิวเตอร์และไมโครคอนโทรลเลอร์

บทความที่เกี่ยวข้อง

UART เทียบกับ I2C เทียบกับ SPI

บทความนี้เปรียบเทียบโปรโตคอลการสื่อสาร I²C, SPI และ UART พร้อมเน้นย้ำถึงความแตกต่างที่สำคัญของโปรโตคอลเหล่านี้

นักเขียนบทความ
by 
นักเขียนบทความ
UART เทียบกับ I2C เทียบกับ SPI

UART เทียบกับ I2C เทียบกับ SPI

บทความนี้เปรียบเทียบโปรโตคอลการสื่อสาร I²C, SPI และ UART พร้อมเน้นย้ำถึงความแตกต่างที่สำคัญของโปรโตคอลเหล่านี้

โปรโตคอล I2C

I2Cหรือ Inter-Integrated Circuit เป็นโปรโตคอลการสื่อสารแบบง่ายที่มักใช้ในระบบฝังตัวเพื่อถ่ายโอนข้อมูลระหว่างอุปกรณ์หลัก (หรืออุปกรณ์หลักหลายตัว) และอุปกรณ์สเลฟตัวเดียว (หรืออุปกรณ์สเลฟหลายตัว) I2C เป็นบัสอนุกรมแบบสองทิศทางสองสายที่ใช้สายสัญญาณนาฬิกาอนุกรม (SCL) และข้อมูลอนุกรม (SDA) เพื่อส่งและจัดการข้อมูลทีละบิตระหว่างอุปกรณ์ที่เชื่อมต่อกับบัส

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

เมื่อส่งข้อมูลผ่านบัส ข้อความ I2C แต่ละข้อความจะมีเฟรมแอดเดรสของอุปกรณ์สเลฟและเฟรมข้อมูลอย่างน้อยหนึ่งเฟรมที่บรรจุข้อมูลที่ถูกส่ง ข้อความยังประกอบด้วยเงื่อนไขเริ่มต้นและหยุด บิตอ่าน/เขียนจากมาสเตอร์หรือสเลฟ และบิต ACK/NACK ที่ส่งจากตัวรับเพื่อตรวจสอบข้อผิดพลาด

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

อัตราการถ่ายโอนข้อมูลมาตรฐานของโปรโตคอล I2C คือ 100 kbps แม้ว่าความเร็วข้อมูลจะสูงถึง 5 Mbps ก็ตาม โดยอุปกรณ์ I2C ที่กำหนดค่าใน "โหมดเร็ว" หรือ "โหมดเร็วพิเศษ"

โปรโตคอล SPI

SPIหรือ Serial Peripheral Interface เป็นโปรโตคอลการสื่อสารแบบอนุกรมที่มักใช้ในระบบฝังตัวสำหรับการแลกเปลี่ยนข้อมูลความเร็วสูงระหว่างอุปกรณ์บนบัส ทำงานโดยใช้รูปแบบ master-slave ซึ่งประกอบด้วยสัญญาณอย่างน้อยสี่สัญญาณ ได้แก่ สัญญาณนาฬิกา (SCLK), สัญญาณเอาต์พุตหลัก/อินพุตรอง (MOSI), สัญญาณเอาต์พุตหลัก/เอาต์พุตรอง (MISO) และสัญญาณเลือกสเลฟ (SS) สัญญาณ SCLK, MOSI และ MISO จะถูกใช้ร่วมกันโดยอุปกรณ์ทั้งหมดบนบัส สัญญาณ SCLK ถูกสร้างขึ้นโดยอุปกรณ์หลักเพื่อการซิงโครไนซ์ ในขณะที่สาย MOSI และ MISO ใช้สำหรับการแลกเปลี่ยนข้อมูล นอกจากนี้ อุปกรณ์สเลฟแต่ละตัวที่เพิ่มเข้าไปในบัสจะมีสาย SS ของตัวเอง โดยอุปกรณ์หลักจะดึงสาย SS ของสเลฟต่ำเพื่อเลือกอุปกรณ์สำหรับการสื่อสาร

การสื่อสาร SPI รองรับ การสื่อสารแบบฟูลดูเพล็กซ์หมายความว่าทั้งมาสเตอร์และสเลฟสามารถส่งข้อมูลพร้อมกันได้

ตัว Exchange เองไม่มีโปรโตคอลที่กำหนดไว้ล่วงหน้า ซึ่งทำให้ SPI เหมาะอย่างยิ่งสำหรับการใช้งานการสตรีมข้อมูล นอกจากนี้ยังไม่มีความเร็วสูงสุด โดยสามารถทำความเร็วข้อมูลได้เกิน 100 MHz

ทำความเข้าใจ UART

UART หรือ Universal Asynchronous Receiver/Transmitter เป็นวงจรทางกายภาพในไมโครคอนโทรลเลอร์หรือ วงจรรวมเดี่ยว (IC) ที่ใช้ในการสื่อสารแบบอนุกรมระหว่างอุปกรณ์ในระบบฝังตัว โดยพื้นฐานแล้ว วัตถุประสงค์หลักของ UART คือการส่งและรับข้อมูลแบบอนุกรม

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

ในการสื่อสาร UART จำเป็นต้องใช้สายเพียงสองเส้นในการสื่อสาร: ข้อมูลจะไหลจากพิน Tx ของ UART ที่ส่ง (Transmitter Tx) ไปยังพิน Rx ของ UART ที่รับ (Receiver Rx)

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

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

การเปรียบเทียบการสื่อสาร I2C, SPI และ UART

SPI เทียบกับ I2C

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

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

I2C มักเป็นตัวเลือกที่ดีสำหรับการเชื่อมต่ออุปกรณ์ระยะสั้นความเร็วต่ำ เช่น ไมโครคอนโทรลเลอร์ EEPROM อินเทอร์เฟซ I/O และอุปกรณ์ต่อพ่วงอื่นๆ เช่น เซ็นเซอร์ในระบบฝังตัว

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

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

UART เทียบกับ I2C เทียบกับ SPI

ต่างจากโปรโตคอลการสื่อสารอย่าง I2C และ SPI ตรงที่ UART เป็นวงจรทางกายภาพ ในขณะที่ SPI และ I2C ใช้รูปแบบ master/slave เพื่อควบคุมอุปกรณ์และส่งข้อมูล การสื่อสาร UART จะรวมอุปกรณ์ UART สองตัวเข้าด้วยกันเพื่อส่งและรับข้อมูล นอกจากนี้ยังไม่ทำงานโดยใช้สัญญาณนาฬิกา ดังนั้นอัตราบอดของ UART แต่ละตัวจึงจำเป็นต้องอยู่ในช่วง 10% ของกันและกันเพื่อป้องกันการสูญหายของข้อมูล

แม้จะมีความแตกต่างกันในแง่มุมเหล่านี้ แต่ UART ก็มีความคล้ายคลึงกับ I2C และ SPI ในบางด้าน ยกตัวอย่างเช่น ทั้ง I2C และ UART ใช้อินเทอร์เฟซแบบสองสายในการส่งและรับข้อมูล และมักเหมาะอย่างยิ่งสำหรับการส่งข้อมูลความเร็วต่ำ นอกจากนี้ UART และ I2C ยังมีกลไกการตรวจสอบข้อผิดพลาดร่วมกันเพื่อช่วยรับประกันความสมบูรณ์ของข้อมูล โดย I2C ใช้บิต ACK/NACK ขณะที่ UART ใช้บิตพาริตีเพื่อแยกแยะการเปลี่ยนแปลงใดๆ ในข้อมูลระหว่างการส่งข้อมูล

นอกจากนี้ ทั้ง UART และ SPI ยังรองรับการสื่อสารแบบฟูลดูเพล็กซ์ และไม่รองรับการกำหนดค่าแบบมัลติมาสเตอร์ อย่างไรก็ตาม SPI มีความเร็วที่เร็วกว่า UART และ I2C มาก

UART มักใช้เป็นรูปแบบการสื่อสารระหว่างอุปกรณ์ในแอปพลิเคชันคอมพิวเตอร์และไมโครคอนโทรลเลอร์

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

UART เทียบกับ I2C เทียบกับ SPI

UART เทียบกับ I2C เทียบกับ SPI

บทความนี้เปรียบเทียบโปรโตคอลการสื่อสาร I²C, SPI และ UART พร้อมเน้นย้ำถึงความแตกต่างที่สำคัญของโปรโตคอลเหล่านี้

Lorem ipsum dolor amet consectetur adipiscing elit tortor massa arcu non.

โปรโตคอล I2C

I2Cหรือ Inter-Integrated Circuit เป็นโปรโตคอลการสื่อสารแบบง่ายที่มักใช้ในระบบฝังตัวเพื่อถ่ายโอนข้อมูลระหว่างอุปกรณ์หลัก (หรืออุปกรณ์หลักหลายตัว) และอุปกรณ์สเลฟตัวเดียว (หรืออุปกรณ์สเลฟหลายตัว) I2C เป็นบัสอนุกรมแบบสองทิศทางสองสายที่ใช้สายสัญญาณนาฬิกาอนุกรม (SCL) และข้อมูลอนุกรม (SDA) เพื่อส่งและจัดการข้อมูลทีละบิตระหว่างอุปกรณ์ที่เชื่อมต่อกับบัส

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

เมื่อส่งข้อมูลผ่านบัส ข้อความ I2C แต่ละข้อความจะมีเฟรมแอดเดรสของอุปกรณ์สเลฟและเฟรมข้อมูลอย่างน้อยหนึ่งเฟรมที่บรรจุข้อมูลที่ถูกส่ง ข้อความยังประกอบด้วยเงื่อนไขเริ่มต้นและหยุด บิตอ่าน/เขียนจากมาสเตอร์หรือสเลฟ และบิต ACK/NACK ที่ส่งจากตัวรับเพื่อตรวจสอบข้อผิดพลาด

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

อัตราการถ่ายโอนข้อมูลมาตรฐานของโปรโตคอล I2C คือ 100 kbps แม้ว่าความเร็วข้อมูลจะสูงถึง 5 Mbps ก็ตาม โดยอุปกรณ์ I2C ที่กำหนดค่าใน "โหมดเร็ว" หรือ "โหมดเร็วพิเศษ"

โปรโตคอล SPI

SPIหรือ Serial Peripheral Interface เป็นโปรโตคอลการสื่อสารแบบอนุกรมที่มักใช้ในระบบฝังตัวสำหรับการแลกเปลี่ยนข้อมูลความเร็วสูงระหว่างอุปกรณ์บนบัส ทำงานโดยใช้รูปแบบ master-slave ซึ่งประกอบด้วยสัญญาณอย่างน้อยสี่สัญญาณ ได้แก่ สัญญาณนาฬิกา (SCLK), สัญญาณเอาต์พุตหลัก/อินพุตรอง (MOSI), สัญญาณเอาต์พุตหลัก/เอาต์พุตรอง (MISO) และสัญญาณเลือกสเลฟ (SS) สัญญาณ SCLK, MOSI และ MISO จะถูกใช้ร่วมกันโดยอุปกรณ์ทั้งหมดบนบัส สัญญาณ SCLK ถูกสร้างขึ้นโดยอุปกรณ์หลักเพื่อการซิงโครไนซ์ ในขณะที่สาย MOSI และ MISO ใช้สำหรับการแลกเปลี่ยนข้อมูล นอกจากนี้ อุปกรณ์สเลฟแต่ละตัวที่เพิ่มเข้าไปในบัสจะมีสาย SS ของตัวเอง โดยอุปกรณ์หลักจะดึงสาย SS ของสเลฟต่ำเพื่อเลือกอุปกรณ์สำหรับการสื่อสาร

การสื่อสาร SPI รองรับ การสื่อสารแบบฟูลดูเพล็กซ์หมายความว่าทั้งมาสเตอร์และสเลฟสามารถส่งข้อมูลพร้อมกันได้

ตัว Exchange เองไม่มีโปรโตคอลที่กำหนดไว้ล่วงหน้า ซึ่งทำให้ SPI เหมาะอย่างยิ่งสำหรับการใช้งานการสตรีมข้อมูล นอกจากนี้ยังไม่มีความเร็วสูงสุด โดยสามารถทำความเร็วข้อมูลได้เกิน 100 MHz

ทำความเข้าใจ UART

UART หรือ Universal Asynchronous Receiver/Transmitter เป็นวงจรทางกายภาพในไมโครคอนโทรลเลอร์หรือ วงจรรวมเดี่ยว (IC) ที่ใช้ในการสื่อสารแบบอนุกรมระหว่างอุปกรณ์ในระบบฝังตัว โดยพื้นฐานแล้ว วัตถุประสงค์หลักของ UART คือการส่งและรับข้อมูลแบบอนุกรม

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

ในการสื่อสาร UART จำเป็นต้องใช้สายเพียงสองเส้นในการสื่อสาร: ข้อมูลจะไหลจากพิน Tx ของ UART ที่ส่ง (Transmitter Tx) ไปยังพิน Rx ของ UART ที่รับ (Receiver Rx)

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

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

การเปรียบเทียบการสื่อสาร I2C, SPI และ UART

SPI เทียบกับ I2C

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

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

I2C มักเป็นตัวเลือกที่ดีสำหรับการเชื่อมต่ออุปกรณ์ระยะสั้นความเร็วต่ำ เช่น ไมโครคอนโทรลเลอร์ EEPROM อินเทอร์เฟซ I/O และอุปกรณ์ต่อพ่วงอื่นๆ เช่น เซ็นเซอร์ในระบบฝังตัว

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

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

UART เทียบกับ I2C เทียบกับ SPI

ต่างจากโปรโตคอลการสื่อสารอย่าง I2C และ SPI ตรงที่ UART เป็นวงจรทางกายภาพ ในขณะที่ SPI และ I2C ใช้รูปแบบ master/slave เพื่อควบคุมอุปกรณ์และส่งข้อมูล การสื่อสาร UART จะรวมอุปกรณ์ UART สองตัวเข้าด้วยกันเพื่อส่งและรับข้อมูล นอกจากนี้ยังไม่ทำงานโดยใช้สัญญาณนาฬิกา ดังนั้นอัตราบอดของ UART แต่ละตัวจึงจำเป็นต้องอยู่ในช่วง 10% ของกันและกันเพื่อป้องกันการสูญหายของข้อมูล

แม้จะมีความแตกต่างกันในแง่มุมเหล่านี้ แต่ UART ก็มีความคล้ายคลึงกับ I2C และ SPI ในบางด้าน ยกตัวอย่างเช่น ทั้ง I2C และ UART ใช้อินเทอร์เฟซแบบสองสายในการส่งและรับข้อมูล และมักเหมาะอย่างยิ่งสำหรับการส่งข้อมูลความเร็วต่ำ นอกจากนี้ UART และ I2C ยังมีกลไกการตรวจสอบข้อผิดพลาดร่วมกันเพื่อช่วยรับประกันความสมบูรณ์ของข้อมูล โดย I2C ใช้บิต ACK/NACK ขณะที่ UART ใช้บิตพาริตีเพื่อแยกแยะการเปลี่ยนแปลงใดๆ ในข้อมูลระหว่างการส่งข้อมูล

นอกจากนี้ ทั้ง UART และ SPI ยังรองรับการสื่อสารแบบฟูลดูเพล็กซ์ และไม่รองรับการกำหนดค่าแบบมัลติมาสเตอร์ อย่างไรก็ตาม SPI มีความเร็วที่เร็วกว่า UART และ I2C มาก

UART มักใช้เป็นรูปแบบการสื่อสารระหว่างอุปกรณ์ในแอปพลิเคชันคอมพิวเตอร์และไมโครคอนโทรลเลอร์

Related articles