I²C ย่อมาจาก Inter Integrate Circuit (IIC) แต่นิยมเรียกว่า I²C มากกว่า เป็นการสื่อสารอนุกรมแบบ synchronous เพื่อใช้สื่อสารข้อมูลระหว่างอุปกรณ์ความเร็วต่ำ ²C มีความโดดเด่นที่การเชื่อมต่อกันเป็นระบบบัสแบบรับและส่งข้อมูล
ซึ่งสามารถเชื่อมต่อกับอุปกรณ์จำนวนมากได้โดยใช้สายเพียงแค่ 2 เส้น ทำให้ลดจำนวนของสายไฟและขนาดของอุปกรณ์ไปได้ จึงทำให้เป็นการสื่อสารที่นิยมสำหรับระบบฝังตัว(embedded system)ขนาดเล็ก
อย่างที่เห็นในภาพที่ 1 สาย 2 เส้นที่จะเชื่อมต่อระหว่างอุปกรณ์คือ SCL และ SDA
- สาย SCL จะส่งสัญญาณนาฬิกา เพื่อบอกว่าข้อมูลที่จะรับ/ส่ง จะทำที่ความถี่เท่าใด
- สาย SDA จะใช้ในการส่งสัญญาณเพียงอย่างเดียว
อุปกรณ์ตัวใด ๆ ก็สามารถที่จะเป็น Master หรือ Slave ก็ได้ แต่โดยปกติแล้วเราจะให้อุปกรณ์ที่ สามารถสั่งการได้เป็น Master เพื่อเป็นตัวกลางในการสื่อสาร ทั้งรับข้อมูลและส่งข้อมูลให้อุปกรณ์อื่น ๆ
เราก็คงพอจะเรียนรู้ถึงหลักการคร่าว ๆ ของ I²C กันแล้วใช่ไหมครับ ทีนี้เราคงอยากรู้ว่าหน้าตาของข้อมูลเป็นยังไง เลื่อนลงไปดูต่อไปกันเลย
หน้าตาของข้อมูลเป็นยังไงกันนะ
การเขียนข้อมูลจากฝั่งของ 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 รู้
การเขียนข้อมูลจากฝั่งของ Slave ให้ Master เป็นฝั่งรับข้อมูล
- ขั้นตอนช่วงแรกก็จะคล้ายกับการอ่านข้อมูล เพียงแค่ bit ที่บอกการอ่าน/เขียน นั้นจะแตกต่างกันเพราะทำคนละหน้าที่
- ส่งสัญญาณ ACK กลับไปเพื่อบอกว่าอุปกรณ์ address ที่เรียกมีอยู่ในการเชื่อมต่อ
- ส่วนของข้อมูลตรงนี้ Slave จะเป็นคนเขียนกลับไปให้ Master ดูได้จากเส้น Data Transmitter เราจะเห็นว่า Slave จะส่งข้อมูลกลับไปให้ Master 8 bit
- เมื่อครบ 8 bit แล้ว Master จะต้องส่งสัญญาณตอบสนองต่อการส่งแต่ละ byte ด้วยสัญญาณ ACK แต่เมื่อ Master ไม่ต้องการข้อมูลแล้ว หลัง byte สุดท้าย Master จะต้องส่งสัญญาณ NACK กลับมา
- สุดท้าย Master จะส่งสัญญาณ STOP มาเพื่อสิ้นสุดการส่งด้วย
ตัวอย่างอุปกรณ์ที่ใช้การสื่อสารแบบ I²C
- Serial Presence Detect (SPD)
- Dual In-line Memory Modules (DIMMs)
- Extended Display Identification Data (EDID)
- Microcontroller(MCU)
ตอนนี้เราก็คงจะมองภาพรวมของ I²C ได้กันบ้างแล้ว ส่วนเรื่องถัดไปจะเป็นอะไรนั้น ต้องมาติดตามดูกันนะครับ
อ่านต่อ : การสื่อสารข้อมูลระหว่างอุปกรณ์