การทำงานของระบบ I2C ในสมาร์ทโฟน ก็มีหลักการพื้นฐานเช่นเดียวกับการใช้งานทั่วไปใน Embedded System แต่มีการปรับใช้ให้เหมาะสมกับระบบที่ซับซ้อนและต้องการประสิทธิภาพสูงกว่า เช่นใน Android หรือ iOS ที่มีทั้งซอฟต์แวร์หลายเลเยอร์และฮาร์ดแวร์ที่หลากหลาย
บทบาทของ I2C ในสมาร์ทโฟน
I2C ในสมาร์ทโฟนจะเชื่อมต่อระหว่าง หน่วยประมวลผลหลัก (AP – Application Processor) กับอุปกรณ์ฝังตัวต่างๆ เช่น:
อุปกรณ์ (I2C Slave) | หน้าที่ |
---|---|
Accelerometer / Gyroscope | ตรวจจับการเคลื่อนไหว |
Ambient Light Sensor | ตรวจแสงรอบข้าง ปรับแสงหน้าจอ |
Proximity Sensor | ตรวจจับการใกล้ เช่น ตอนแนบหู |
Touch Controller | ตรวจตำแหน่งการสัมผัส |
Battery Gauge / Charger | ตรวจสอบระดับแบตเตอรี่และควบคุมการชาร์จ |
Haptic Feedback Controller | ควบคุมการสั่นของเครื่อง |
Audio DAC หรือ Codec | จัดการระบบเสียง |
ลำดับการทำงานของ I2C ในสมาร์ทโฟน
1. Hardware Layer
- Application Processor (AP) เช่น Qualcomm Snapdragon, Apple A-series
- AP จะมี Peripheral ที่เป็น I2C Controller (Master) ในตัว
- อุปกรณ์ที่เชื่อมต่อผ่าน I2C จะเป็น Slave ทั้งหมด
2. Kernel Driver (ระดับ OS Kernel)
- ในระบบปฏิบัติการ Android (Linux-based), จะมี I2C Bus Driver สำหรับควบคุมบัส I2C และ Device Driver สำหรับอุปกรณ์แต่ละตัว
- ตัวอย่าง:
i2c-dev
,i2c-bcm
,sensors-drv.c
ฯลฯ
3. User Space (ระดับแอป)
- แอปทั่วไปจะไม่เข้าถึง I2C โดยตรง แต่จะติดต่อผ่าน HAL (Hardware Abstraction Layer) หรือ Sensor Framework
- ตัวอย่าง: แอปกล้องอาจดึงข้อมูลจาก light sensor โดยไม่รู้ว่าข้างหลังสื่อสารผ่าน I2C
ตัวอย่างการทำงาน
ตัวอย่าง: เซนเซอร์วัดแสงหน้าจอ (ALS)
- ระบบปฏิบัติการ Android เริ่มการทำงาน
- I2C Bus Driver ตรวจสอบและลงทะเบียนเซนเซอร์ ALS ที่เชื่อมต่ออยู่
- Sensor HAL อ่านค่า ALS เป็นระยะ ๆ ผ่าน I2C
- ข้อมูลถูกส่งให้ Android Framework เพื่อประมวลผล เช่น ปรับความสว่างอัตโนมัติ
- ผู้ใช้เปิดแอป → ระบบอาจเรียกใช้ API เช่น
SensorManager.getDefaultSensor(...)
คุณสมบัติเพิ่มเติมของ I2C บนสมาร์ทโฟน
- Interrupt + I2C: อุปกรณ์หลายตัวใช้ interrupt pin ร่วมกับ I2C เพื่อแจ้ง Master เมื่อมีข้อมูลใหม่ ลดการ polling
- Power Management: OS จะสั่งให้ I2C device เข้าสู่ sleep หรือ active ตามสถานะพลังงาน
- Multiple I2C Buses: สมาร์ทโฟนอาจมีหลายบัส I2C เพื่อแยกกลุ่มอุปกรณ์ตามความถี่และ priority
ความปลอดภัย และความเสถียร
- I2C ในสมาร์ทโฟนมักถูกปิดการเข้าถึงจากผู้ใช้ทั่วไปเพื่อ ป้องกันความผิดพลาดหรือการโจมตี
- ต้องใช้สิทธิ์ root หรือ kernel-level เพื่อเข้าถึงโดยตรง (เช่น บนเครื่องที่ทำการ reverse engineering)
