I2C คืออะไร ? รู้จัก ระบบการสื่อสาร ระหว่างอุปกรณ์ ในระบบสมองกล แบบฝังตัวกัน !

I2C คืออะไร ? มาเข้าใจระบบการสื่อสารระหว่างอุปกรณ์ในระบบสมองกลแบบฝังตัวกัน !

สำหรับใครที่อยู่ในแวดวงของอิเล็กทรอนิกส์ การทำงาน D.I.Y หรือโปรเจคต่าง ๆ ที่ต้องใช้ไมโครคอนโทรเลอร์ (MCU) สำหรับสร้างสิ่งประดิษฐ์ขึ้นมา และเชื่อว่าทุกคนต้องคุ้นชินกับคำว่า I2C หรือ หรือ Inter-Integrated Circuit ซึ่งเป็นโปรโตคอลการสื่อสารที่ใช้กันอย่างแพร่หลายในโลกของระบบฝังตัว ใช้สำหรับสื่อสารระหว่างอุปกรณ์ต่าง ๆ เช่น เซนเซอร์ (Sensor), หน่วยความจำ (Memory) และ ไมโครคอนโทรลเลอร์ (Microcontroller) ซึ่งจำเป็นต้องใช้วิธีที่มีประสิทธิภาพง่าย และใช้ทรัพยากรน้อย ซึ่ง I2C ตอบโจทย์นี้ได้อย่างลงตัว

บทความเกี่ยวกับ Protocol อื่นๆ

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

เนื้อหาภายในบทความ

I2C คืออะไร ? (What is I2C ?)

I2C (อ่านว่า “ไอสแควร์ซี”) หรือ Inter-Integrated Circuit เป็นโปรโตคอลการสื่อสารที่ผสมผสานข้อดีของการสื่อสารแบบ SPI และ UART เข้าไว้ด้วยกันอย่างลงตัว ทำให้สามารถเชื่อมต่ออุปกรณ์หลายตัวในระบบเดียวกันได้ ไม่ว่าจะเป็นการใช้ไมโครคอนโทรลเลอร์หลายตัว เพื่อบันทึกข้อมูลลงในการ์ดหน่วยความจำตัวเพียงเดียว หรือการควบคุมจอแสดงผล LCD เดียวจากหลายแหล่งข้อมูล ซึ่ง I2C ช่วยให้การพัฒนา และใช้งานระบบฝังตัวเป็นไปอย่างยืดหยุ่น และง่ายดาย

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

  • SDA (Serial Data) : สำหรับการรับส่งข้อมูลระหว่างตัว Master (เครื่องหลัก) และ Slave (เครื่องตาม)
  • SCL (Serial Clock) : สำหรับส่งสัญญาณนาฬิกาที่ควบคุมการสื่อสารระหว่างอุปกรณ์

I2C คืออะไร ? รู้จัก ระบบการสื่อสาร ระหว่างอุปกรณ์ ในระบบสมองกล แบบฝังตัวกัน !
ภาพจาก : https://www.thegeekpub.com/18351/how-i2c-works-i2c-explained-simply/

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

ความเป็นมาของ I2C (History of I2C)

2C ถูกพัฒนาขึ้นครั้งแรกโดยบริษัท Philips Semiconductors ในปี ค.ศ.1982 (พ.ศ.2525) ซึ่งปัจจุบันคือ NXP Semiconductors จุดเริ่มต้นของ I2C มาจากความต้องการโปรโตคอลการสื่อสารที่เรียบง่าย และมีประสิทธิภาพสำหรับการสื่อสารระหว่างชิปหลายตัวบนแผงวงจรเดียวกัน โดยใช้เพียงสองสาย (SDA และ SCL) ซึ่งทำให้ลดความซับซ้อนของการเดินสาย และลดต้นทุนการผลิต

I2C คืออะไร ? รู้จัก ระบบการสื่อสาร ระหว่างอุปกรณ์ ในระบบสมองกล แบบฝังตัวกัน !
ภาพจาก : https://www.symboltm.com/new-gallery-30

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

ตลอดหลายปีที่ผ่านมา I2C ได้รับการพัฒนาให้มีความเร็วในการสื่อสารสูงขึ้นเรื่อย ๆ โดยเริ่มจากโหมดมาตรฐานที่ 100 kbps ไปจนถึงโหมด High-Speed (3.4 Mbps) และ Ultra-Fast (5 Mbps) เพื่อรองรับการใช้งานในอุตสาหกรรมที่ต้องการความเร็ว และประสิทธิภาพสูงในปัจจุบัน

I2C คืออะไร ? รู้จัก ระบบการสื่อสาร ระหว่างอุปกรณ์ ในระบบสมองกล แบบฝังตัวกัน !
ภาพจาก : https://www.circuitbasics.com/basics-of-the-i2c-communication-protocol/

วิธีการทำงานของ I2C (How does I2C work ?)

I2C คืออะไร ? รู้จัก ระบบการสื่อสาร ระหว่างอุปกรณ์ ในระบบสมองกล แบบฝังตัวกัน !
ภาพจาก : https://www.circuitbasics.com/basics-of-the-i2c-communication-protocol/

I2C ใช้การส่งข้อมูลในรูปแบบของ “ข้อความ” (Messages) โดยข้อความจะถูกแบ่งออกเป็น เฟรม (Frames) แต่ละข้อความประกอบด้วยเฟรมที่มีข้อมูลสำคัญ เช่น เฟรมที่ระบุที่อยู่ของอุปกรณ์ปลายทาง (Address Frame) และเฟรมที่มีข้อมูลที่ต้องการส่ง (Data Frames) ทีนี้ เรามาดูรายละเอียดของแต่เฟรมข้อความที่ถูกส่งไปบนสายสัญญาณกัน

  • Start / Stop Conditions (เงื่อนไขเริ่มต้น และสิ้นสุด) : สัญญาณที่บอกการเริ่มต้น และสิ้นสุดของการสื่อสารระหว่างอุปกรณ์
  • Address Frame (เฟรมระบุที่อยู่) : ใช้เพื่อระบุว่าอุปกรณ์ Slave ตัวใดเป็นเป้าหมายของการสื่อสาร
  • Read / Write Bit (บิตอ่าน/เขียน) : บิตที่บอกทิศทางการสื่อสารว่าต้องการส่งข้อมูลไปยัง Slave (เขียน) หรือขอข้อมูลจาก Slave (อ่าน)
  • Data Frame (เฟรมข้อมูล) : ข้อมูลที่ถูกส่งระหว่าง Master และ Slave ในรูปแบบ 8 บิต
  • Stop Condition (เฟรมสิ้นสุดการสื่อสาร) : สัญญาณที่บอกการสิ้นสุดการส่งข้อมูล และการสื่อสาร

ขั้นตอนการส่งข้อมูลใน I2C

1. เริ่มต้นการสื่อสาร (Start Condition)

การสื่อสารใน I2C เริ่มต้นเมื่อ Master ส่งสัญญาณ “Start” เปลี่ยนระดับแรงดันบนสาย SDA จากสูง (1) ไปต่ำ (0) ในขณะที่สาย SCL ยังคงอยู่ในระดับสูง (1) ก็จะส่งสัญญาณไปยังทุกอุปกรณ์ Slave ที่เชื่อมต่ออยู่ว่า Master กำลังเริ่มการส่งข้อมูล ทำให้บัส I2C ถูกล็อกเพื่อใช้เฉพาะกับการส่งข้อมูลของ Master ในช่วงเวลานั้น

I2C คืออะไร ? รู้จัก ระบบการสื่อสาร ระหว่างอุปกรณ์ ในระบบสมองกล แบบฝังตัวกัน !
ภาพจาก : https://www.circuitbasics.com/basics-of-the-i2c-communication-protocol/

2. ส่งที่อยู่ของ Slave (Address Frame)

หลังจากส่งสัญญาณเริ่มต้น Master จะส่งเฟรมระบุที่อยู่ (Address Frame) เพื่อบอกว่าอุปกรณ์ Slave ใดเป็นเป้าหมายการสื่อสาร ที่อยู่ของ Slave จะมีความยาว 7 บิตหรือ 10 บิต ขึ้นอยู่กับการออกแบบของระบบ รวมถึงมีบิตอ่าน/เขียน (Read/Write bit) เพิ่มเติมอีกหนึ่งบิต เพื่อระบุว่าข้อมูลจะถูกส่งไปยัง Slave (เขียน) หรือจะอ่านข้อมูลจาก Slave (อ่าน)

I2C คืออะไร ? รู้จัก ระบบการสื่อสาร ระหว่างอุปกรณ์ ในระบบสมองกล แบบฝังตัวกัน !
ภาพจาก : https://www.circuitbasics.com/basics-of-the-i2c-communication-protocol/

3. ตรวจสอบที่อยู่ (Address Matching)

เมื่อเฟรมที่อยู่ถูกส่งออกไปแล้ว ทุก Slave ที่เชื่อมต่อจะตรวจสอบว่าที่อยู่ที่ได้รับนั้นตรงกับที่อยู่ของตัวเองหรือไม่ หากตรงกัน Slave นั้นจะส่งสัญญาณ ACK (Acknowledgment) กลับมายัง Master โดยดึงสาย SDA ลงต่ำ (0) เพื่อยืนยันการรับข้อมูล หากไม่ตรงกัน Slave จะไม่ตอบสนอง ทำให้สาย SDA ยังคงอยู่ในระดับสูง

I2C คืออะไร ? รู้จัก ระบบการสื่อสาร ระหว่างอุปกรณ์ ในระบบสมองกล แบบฝังตัวกัน !
ภาพจาก : https://www.circuitbasics.com/basics-of-the-i2c-communication-protocol/

4. ส่งหรือรับข้อมูล (Data Frame)

เมื่อได้รับการตอบรับ (ACK) จาก Slave แล้ว Master จะเริ่มส่ง หรือรับข้อมูลในรูปแบบ Data Frame ข้อมูลแต่ละเฟรมจะมีความยาว 8 บิต และถูกส่งโดยเริ่มจากบิตที่สำคัญที่สุด (MSB) ไปยังบิตที่น้อยกว่า การส่งข้อมูลสามารถเกิดขึ้นได้ทั้งในทิศทางจาก Master ไปยัง Slave (เขียน) หรือจาก Slave ไปยัง Master (อ่าน) ตามที่ระบุในบิต อ่าน/เขียน

I2C คืออะไร ? รู้จัก ระบบการสื่อสาร ระหว่างอุปกรณ์ ในระบบสมองกล แบบฝังตัวกัน !
ภาพจาก : https://www.circuitbasics.com/basics-of-the-i2c-communication-protocol/

5. ยืนยันการรับข้อมูล (ACK Bit)

หลังจากที่ส่งเฟรมข้อมูลแต่ละเฟรม อุปกรณ์ที่รับข้อมูลจะส่งสัญญาณ ACK กลับไปยังอุปกรณ์ผู้ส่ง เพื่อยืนยันว่าข้อมูลถูกรับอย่างถูกต้อง หากการส่งข้อมูลมีปัญหา อุปกรณ์ผู้รับอาจส่งสัญญาณ NACK (Not Acknowledgment) โดยปล่อยให้สาย SDA อยู่ในระดับสูง เพื่อบอกว่าข้อมูลไม่ถูกต้อง หรือมีข้อผิดพลาด

I2C คืออะไร ? รู้จัก ระบบการสื่อสาร ระหว่างอุปกรณ์ ในระบบสมองกล แบบฝังตัวกัน !
ภาพจาก : https://www.circuitbasics.com/basics-of-the-i2c-communication-protocol/

6. สิ้นสุดการสื่อสาร (Stop Condition)

เมื่อการส่งข้อมูลเสร็จสิ้น Master จะส่งสัญญาณ “Stop” เพื่อยุติการสื่อสาร โดยการเปลี่ยนสาย SCL ไปยังระดับสูง (1) ก่อนที่จะเปลี่ยนสาย SDA จากต่ำ (0) ไปสูง (1) ซึ่งเป็นสัญญาณบอกให้บัส I2C ว่าการสื่อสารได้เสร็จสิ้นแล้ว และบัสกลับมาอยู่ในสถานะว่างพร้อมสำหรับการสื่อสารครั้งต่อไป

I2C คืออะไร ? รู้จัก ระบบการสื่อสาร ระหว่างอุปกรณ์ ในระบบสมองกล แบบฝังตัวกัน !
ภาพจาก : https://www.circuitbasics.com/basics-of-the-i2c-communication-protocol/

ความแตกต่างระหว่าง I2C แบบที่มีมาสเตอร์เพียงตัวเดียว กับหลายตัว (Differences between Single Master and Multiple Master I2C)

มาสเตอร์เพียงตัว (Single Master with Multiple Slaves)

I2C ใช้การระบุที่อยู่ (Addressing) ทำให้สามารถควบคุม Slave หลายตัวได้จาก Master เดียว โดยที่อยู่แบบ 7 บิต จะรองรับอุปกรณ์ได้สูงสุด 128 ตัว ส่วนที่อยู่แบบ 10 บิต (ซึ่งใช้น้อยกว่า) รองรับได้ถึง 1,024 ตัว ในการเชื่อมต่อ Slave หลายตัวเข้ากับ Master เดียว ให้ต่อสาย SDA และ SCL ของอุปกรณ์ทั้งหมดเข้าด้วยกัน และใช้ตัวต้านทานต่อแบบ Pull-up ขนาด 4.7K โอห์ม เชื่อมต่อกับ Vcc เพื่อรักษาระดับแรงดันบนบัสเอาไว้

I2C คืออะไร ? รู้จัก ระบบการสื่อสาร ระหว่างอุปกรณ์ ในระบบสมองกล แบบฝังตัวกัน !
ภาพจาก : https://www.circuitbasics.com/basics-of-the-i2c-communication-protocol/

มาสเตอร์หลายตัว (Multiple Masters with Multiple Slaves)

ระบบ I2C สามารถเชื่อมต่อ Master หลายตัวกับ Slave หลายตัวได้ แต่จะมีปัญหาเมื่อ Master สองตัวพยายามส่ง หรือรับข้อมูลพร้อมกันผ่านสาย SDA เพื่อแก้ปัญหานี้ แต่ละ Master ต้องตรวจสอบว่าระดับแรงดันบนสาย SDA สูง หรือต่ำก่อนส่งข้อมูล ถ้าระดับต่ำ แสดงว่า Master อื่นกำลังใช้บัสอยู่ ต้องรอจนกว่าระดับจะสูงจึงจะส่งข้อมูลได้ การเชื่อมต่อหลาย Master ให้ใช้ตัวต้านทาน Pull-up ขนาด 4.7K โอห์ม บนสาย SDA และ SCL เช่นกัน

I2C คืออะไร ? รู้จัก ระบบการสื่อสาร ระหว่างอุปกรณ์ ในระบบสมองกล แบบฝังตัวกัน !
ภาพจาก : https://www.circuitbasics.com/basics-of-the-i2c-communication-protocol/

ข้อดี และข้อสังเกตของ I2C (I2C Pros and Cons)

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

ข้อดี

  • ใช้สายเพียงสองเส้น (SDA และ SCL)
  • รองรับการเชื่อมต่อแบบ Master และ Slave หลายตัว
  • มีบิต ACK/NACK เพื่อยืนยันการรับ-ส่งข้อมูลในแต่ละเฟรม
  • ฮาร์ดแวร์ที่ต้องใช้ซับซ้อนน้อยกว่า UART
  • เป็นโปรโตคอลที่รู้จักกันดีใช้งานอย่างแพร่หลาย

ข้อสังเกต

  • อัตราการส่งข้อมูลช้ากว่า SPI
  • ขนาดของเฟรมข้อมูลจำกัดที่ 8 บิต
  • ฮาร์ดแวร์ที่ใช้ต้องการความซับซ้อนมากกว่า SPI

 

บทสรุปเกี่ยวกับ I2C (I2C Conclusions)

I2C เป็นโปรโตคอลการสื่อสารที่เรียบง่ายแต่มีประสิทธิภาพ เหมาะสำหรับการเชื่อมต่ออุปกรณ์หลายตัวด้วยการใช้สายสัญญาณเพียงสองเส้น แม้จะมีข้อจำกัดเรื่องอัตราการส่งข้อมูล และขนาดเฟรมที่จำกัด แต่ด้วยการรองรับหลายเครื่อง Master และ Slave ทำให้ I2C เป็นตัวเลือกยอดนิยมสำหรับการสื่อสารระหว่างอุปกรณ์ต่าง ๆ ในระบบอิเล็กทรอนิกส์ และระบบสมองกลฝังตัว

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

ที่มา : www.circuitbasics.com , focuslcds.com

Leave a comment