บทความนี้เปรียบเทียบโปรโตคอลการสื่อสาร I²C, SPI และ UART พร้อมเน้นย้ำถึงความแตกต่างที่สำคัญของโปรโตคอลเหล่านี้
I2Cหรือ Inter-Integrated Circuit เป็นโปรโตคอลการสื่อสารแบบง่ายที่มักใช้ในระบบฝังตัวเพื่อถ่ายโอนข้อมูลระหว่างอุปกรณ์หลัก (หรืออุปกรณ์หลักหลายตัว) และอุปกรณ์สเลฟตัวเดียว (หรืออุปกรณ์สเลฟหลายตัว) I2C เป็นบัสอนุกรมแบบสองทิศทางสองสายที่ใช้สายสัญญาณนาฬิกาอนุกรม (SCL) และข้อมูลอนุกรม (SDA) เพื่อส่งและจัดการข้อมูลทีละบิตระหว่างอุปกรณ์ที่เชื่อมต่อกับบัส
ในการดำเนินงาน I2C มาสเตอร์จะควบคุมการแลกเปลี่ยนข้อมูลระหว่างอุปกรณ์ อุปกรณ์มาสเตอร์จะส่งสัญญาณไปยังสเลฟเพื่อส่งข้อมูลหรือร้องขอการตอบสนอง เพื่อให้บรรลุเป้าหมายนี้ อุปกรณ์สเลฟทั้งหมดต้องมีที่อยู่เฉพาะซึ่งรวมอยู่ในข้อความ I2C
เมื่อส่งข้อมูลผ่านบัส ข้อความ I2C แต่ละข้อความจะมีเฟรมแอดเดรสของอุปกรณ์สเลฟและเฟรมข้อมูลอย่างน้อยหนึ่งเฟรมที่บรรจุข้อมูลที่ถูกส่ง ข้อความยังประกอบด้วยเงื่อนไขเริ่มต้นและหยุด บิตอ่าน/เขียนจากมาสเตอร์หรือสเลฟ และบิต ACK/NACK ที่ส่งจากตัวรับเพื่อตรวจสอบข้อผิดพลาด
I2C ถือเป็นแบบซิงโครนัส หมายความว่าทำงานโดยใช้สัญญาณนาฬิกาแบบอนุกรม สัญญาณนาฬิกาถูกขับเคลื่อนโดยอุปกรณ์หลัก ซึ่งทำให้สามารถซิงโครไนซ์เอาต์พุตของบิตกับสัญญาณนาฬิกาที่สุ่มตัวอย่างระหว่างอุปกรณ์หลักและสเลฟได้
อัตราการถ่ายโอนข้อมูลมาตรฐานของโปรโตคอล I2C คือ 100 kbps แม้ว่าความเร็วข้อมูลจะสูงถึง 5 Mbps ก็ตาม โดยอุปกรณ์ I2C ที่กำหนดค่าใน "โหมดเร็ว" หรือ "โหมดเร็วพิเศษ"
SPIหรือ Serial Peripheral Interface เป็นโปรโตคอลการสื่อสารแบบอนุกรมที่มักใช้ในระบบฝังตัวสำหรับการแลกเปลี่ยนข้อมูลความเร็วสูงระหว่างอุปกรณ์บนบัส ทำงานโดยใช้รูปแบบ master-slave ซึ่งประกอบด้วยสัญญาณอย่างน้อยสี่สัญญาณ ได้แก่ สัญญาณนาฬิกา (SCLK), สัญญาณเอาต์พุตหลัก/อินพุตรอง (MOSI), สัญญาณเอาต์พุตหลัก/เอาต์พุตรอง (MISO) และสัญญาณเลือกสเลฟ (SS) สัญญาณ SCLK, MOSI และ MISO จะถูกใช้ร่วมกันโดยอุปกรณ์ทั้งหมดบนบัส สัญญาณ SCLK ถูกสร้างขึ้นโดยอุปกรณ์หลักเพื่อการซิงโครไนซ์ ในขณะที่สาย MOSI และ MISO ใช้สำหรับการแลกเปลี่ยนข้อมูล นอกจากนี้ อุปกรณ์สเลฟแต่ละตัวที่เพิ่มเข้าไปในบัสจะมีสาย SS ของตัวเอง โดยอุปกรณ์หลักจะดึงสาย SS ของสเลฟต่ำเพื่อเลือกอุปกรณ์สำหรับการสื่อสาร
การสื่อสาร SPI รองรับ การสื่อสารแบบฟูลดูเพล็กซ์หมายความว่าทั้งมาสเตอร์และสเลฟสามารถส่งข้อมูลพร้อมกันได้
ตัว Exchange เองไม่มีโปรโตคอลที่กำหนดไว้ล่วงหน้า ซึ่งทำให้ SPI เหมาะอย่างยิ่งสำหรับการใช้งานการสตรีมข้อมูล นอกจากนี้ยังไม่มีความเร็วสูงสุด โดยสามารถทำความเร็วข้อมูลได้เกิน 100 MHz
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 มักถูกเปรียบเทียบว่าเป็นโปรโตคอลการสื่อสารแบบอนุกรม เนื่องจากมีความเรียบง่าย ต้นทุนต่ำ และทั้งสองโปรโตคอลนี้ใช้สถาปัตยกรรมแบบมาสเตอร์/สเลฟ รวมถึงสัญญาณนาฬิกาที่ควบคุมโดยมาสเตอร์เพื่อการซิงโครไนซ์ แม้จะมีความคล้ายคลึงกันในด้านนี้ แต่ก็มีความแตกต่างกันหลายประการ และมักจะเหมาะกับแอปพลิเคชันแบบฝังตัวบางประเภทมากกว่า
I2C ใช้อินเทอร์เฟซแบบสองสายที่อุปกรณ์สเลฟใช้สายข้อมูลและสัญญาณนาฬิการ่วมกัน ด้วยเหตุนี้ การเพิ่มอุปกรณ์หลายตัวลงในบัสจึงเป็นเรื่องง่ายและลดความซับซ้อนของวงจร นอกจากนี้ I2C ยังมีการควบคุมการไหลและการจัดการข้อผิดพลาด ทำให้เป็นโปรโตคอลที่เชื่อถือได้มากขึ้น I2C สามารถรองรับมาสเตอร์หลายตัวในการกำหนดค่า ในขณะที่ SPI สามารถรองรับมาสเตอร์ได้เพียงตัวเดียว
I2C มักเป็นตัวเลือกที่ดีสำหรับการเชื่อมต่ออุปกรณ์ระยะสั้นความเร็วต่ำ เช่น ไมโครคอนโทรลเลอร์ EEPROM อินเทอร์เฟซ I/O และอุปกรณ์ต่อพ่วงอื่นๆ เช่น เซ็นเซอร์ในระบบฝังตัว
SPI มีความเร็วที่เหนือกว่า I2C ไดรเวอร์แบบพุช-พูลให้ความเร็วและความสมบูรณ์ของสัญญาณที่ดีขึ้น และการรองรับฟูลดูเพล็กซ์ทำให้อุปกรณ์มาสเตอร์และสเลฟสามารถส่งข้อมูลได้พร้อมกัน ช่วยให้การแลกเปลี่ยนข้อมูลรวดเร็วยิ่งขึ้น แม้ว่า SPI จะมีข้อได้เปรียบด้านความเร็ว แต่การเพิ่มอุปกรณ์สเลฟหลายตัวลงในบัสนั้นทำได้ยากและมีค่าใช้จ่ายสูงกว่า เนื่องจากสเลฟแต่ละตัวต้องมีสายเลือกสเลฟของตัวเอง ดังนั้นจำนวนสายที่จำเป็นในการสื่อสารระหว่างอุปกรณ์แต่ละตัวจึงเพิ่มขึ้น
SPI มักใช้สำหรับการเชื่อมต่ออุปกรณ์ระยะใกล้ภายในระบบฝังตัว แต่ก็เหมาะอย่างยิ่งสำหรับการใช้งานหน่วยความจำด้วยเช่นกัน ตัวอย่างเช่น อุปกรณ์หน่วยความจำหลายชนิด เช่น การ์ด SD, การ์ดมัลติมีเดีย, EEPROM และ หน่วยความจำแฟลช ต่าง ใช้ 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 มักใช้เป็นรูปแบบการสื่อสารระหว่างอุปกรณ์ในแอปพลิเคชันคอมพิวเตอร์และไมโครคอนโทรลเลอร์