I²C คืออะไร ? ทำไมชื่อไม่คุ้นเลย

การสื่อสาร I2C ระหว่างอุปกรณ์คืออะไร

Tanabodin Kamol
iCreativeSystems
2 min readJul 17, 2018

--

มารู้จักกันก่อน

I²C ย่อมาจาก Inter Integrate Circuit (IIC) แต่นิยมเรียกว่า I²C มากกว่า เป็นการสื่อสารอนุกรมแบบ synchronous เพื่อใช้สื่อสารข้อมูลระหว่างอุปกรณ์ความเร็วต่ำ

I²C มีความโดดเด่นที่การเชื่อมต่อกันเป็นระบบบัสแบบรับและส่งข้อมูล ซึ่งสามารถเชื่อมต่อกับอุปกรณ์จำนวนมากได้โดยใช้สายเพียงแค่ 2 เส้น ทำให้ลดจำนวนของสายไฟและขนาดของอุปกรณ์ไปได้ จึงทำให้เป็นการสื่อสารที่นิยมสำหรับระบบฝังตัว(embedded system)ขนาดเล็ก

อย่างที่เห็นในภาพที่ 1 สาย 2 เส้นที่จะเชื่อมต่อระหว่างอุปกรณ์คือ SCL และ SDA

  • สาย SCL จะส่งสัญญาณนาฬิกา เพื่อบอกว่าข้อมูลที่จะรับ/ส่ง จะทำที่ความถี่เท่าใด
  • สาย SDA จะใช้ในการส่งสัญญาณเพียงอย่างเดียว
ภาพที่ 1 แสดงการเชื่อมต่ออุปกรณ์แบบ I²C

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

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

หน้าตาของข้อมูลเป็นยังไงกันนะ

ภาพที่ 2 เป็นการเขียนข้อมูลจากฝั่งของ Master โดยให้ Slave เป็นฝั่งรับข้อมูล

  • แรกเริ่ม Master จะส่งสัญญาณ START เพื่อให้ Slave ทุกตัวรอรับข้อมูล
  • 7 บิตแรกจะเป็น address ของ Slave ที่จะเรียกใช้ ตัวที่จะทำงานคือตัวที่ address ตรงกันกับตัวของมันเท่านั้น
  • สัญญาณการอ่าน/เขียน เพื่อบอก Slave ว่าข้อมูลที่ Master ส่งมาต้องอ่านหรือเป็นสัญญาณบอกเพื่อให้เขียนข้อมูลกลับไป (0 คือให้อ่าน 1 คือให้ส่งข้อมูลกลับไป)
  • เมื่อ Slave ทุกตัวได้รับข้อมูลจะตรวจสอบ address ว่าตรงกับของตนหรือไม่ ถ้าตรงกันก็จะส่งสัญญาณ ACK กลับไปให้ Master เพื่อบอกว่า address ที่เรียกมีการเชื่อมต่ออยู่ เพราะอุปกรณ์ที่ address ไม่ตรงกันจะส่งสัญญาณ NACK กลับไป ซึ่งมีความหมายว่าไม่ต้องทำอะไร
  • ในขั้นถัดไปจากนี้จะเป็นการส่งสัญญาณมาให้ทีละ 8 bit(1 byte) หลังจากโอนข้อมูลแต่ละ 1 byte Slave จะต้องตอบสนองด้วยสัญญาณ ACK เพื่อให้รู้ว่าการส่งข้อมูลไม่ผิดพลาดหรือสูญหาย (หากไม่ส่งกลับ Master จะส่งข้อมูลชุดเดิมมาใหม่)
  • เมื่อ Master ส่งข้อมูลเสร็จสิ้นก็จะส่งสัญญาณ STOP มาให้ Slave รู้
ภาพที่ 2 แสดงข้อมูลการเขียน I²C แบบสมบูรณ์

ภาพที่ 3 การเขียนข้อมูลจากฝั่งของ Slave ให้ Master เป็นฝั่งรับข้อมูล

  • ขั้นตอนช่วงแรกก็จะคล้ายกับการอ่านข้อมูล เพียงแค่ bit ที่บอกการอ่าน/เขียน นั้นจะแตกต่างกันเพราะทำคนละหน้าที่
  • ส่งสัญญาณ ACK กลับไปเพื่อบอกว่าอุปกรณ์ address ที่เรียกมีอยู่ในการเชื่อมต่อ
  • ส่วนของข้อมูลตรงนี้ Slave จะเป็นคนเขียนกลับไปให้ Master ดูได้จากเส้น Data Transmitter เราจะเห็นว่า Slave จะส่งข้อมูลกลับไปให้ Master 8 bit
  • เมื่อครบ 8 bit แล้ว Master จะต้องส่งสัญญาณตอบสนองต่อการส่งแต่ละ byte ด้วยสัญญาณ ACK แต่เมื่อ Master ไม่ต้องการข้อมูลแล้ว หลัง byte สุดท้าย Master จะต้องส่งสัญญาณ NACK กลับมา
  • สุดท้าย Master จะส่งสัญญาณ STOP มาเพื่อสิ้นสุดการส่งด้วย
ภาพที่ 3 แสดงข้อมูลการอ่าน I²C แบบสมบูรณ์

ตัวอย่างอุปกรณ์ที่ใช้การสื่อสารแบบ I²C

ตอนนี้เราก็คงจะมองภาพรวมของ I²C ได้กันบ้างแล้ว ส่วนเรื่องถัดไปจะเป็นอะไรนั้น ต้องมาติดตามดูกันนะครับ

อ่านต่อ : การสื่อสารข้อมูลระหว่างอุปกรณ์

REFERENCES

  1. http://www.analog.com/en/technical-articles/i2c-primer-what-is-i2c-part-1.html

2. https://goo.gl/Mxh7jU

3. https://learn.sparkfun.com/tutorials/i2c

--

--

Tanabodin Kamol
iCreativeSystems

I always self-study about electronic devices and computer programming, So, I will share what I have learned for all of you! Sometime It’s code for Python