I2Cとは？

# I2Cとは

I2Cとはアイ・スクエア・シーの略で、1980年代にPhilips Semiconductor社により開発されたシリアルバス規格。I2Cは、現在 50以上のメーカーの1000以上のICで採用されるにいたっている。Philips Semiconductor社は、再編の末にNXP Semiconductor社に社名が変更され、現在はNXP Semiconductor社より[I2Cバス仕様およびユーザーマニュアル](http://www.nxp.com/documents/user_manual/UM10204_JA.pdf)が発行されている。

# I2Cの配線

シリアル・データラ イ ン(SDA)とシリアル・ クロックライン(SCL)の 2 本のバスラインで構成されている。

# I2Cの配線例

I2Cの通信には、SDAとSCLの2本のバスラインと、VCCとGNDにより通信が可能になる。I2CでMEMSのセンサーと通信する場合、メーカー指定のデカップリング用のコンデンサを配置することで、MEMS Sensorで発生するノイズを除去することが可能になる。　

MEMS Sensorとの配線例)
<img width="845" alt="mems2.png" src="https://qiita-image-store.s3.amazonaws.com/0/63450/f5840def-8d0f-5cad-6624-d2e290268c42.png">

MEMS SensorとMicro processorで電圧が違う場合は、I2C専用のレベルコンバータを入れる必要がある。
例えば、[Texas Instruments製のPCA9306](http://m.ti.com/product/jp/pca9306)など。

# MasterとSlave

転送の開始と終了や転送時のクロック信号を出力を行うマスタと、マスタからアドレス指定されるデバイスであるスレーブにより構成される。1つのマスタに対して複数のスレーブが接続可能である。ただし、１つのバス上で、複数のスレーブのアドレスが異なるようにする必要がある。スレーブデバイスによっては、アドレスが可変できるものがある。

<img width="897" alt="master_slave.png" src="https://qiita-image-store.s3.amazonaws.com/0/63450/1ecd63dc-0c59-1eb9-8475-f2becb2797c1.png">



# 通信速度

通信速度は、双方向通信が可能なStandard-Mode, Fast-Mode, Fast-Mode Plus, High-speedと、単方向通信のみのUltra Fast-modeの通信が定義されている。

<img width="411" alt="speed.png" src="https://qiita-image-store.s3.amazonaws.com/0/63450/cb481162-de4e-79c4-7ac2-664933723b39.png">

# I2C Slaveアドレスを自動検索するプログラム(Arduinoサンプル)

[http://playground.arduino.cc/Main/I2cScanner](http://playground.arduino.cc/Main/I2cScanner)

```c:i2c_scanner
// --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// Version 6, November 27, 2015.
//    Added waiting for the Leonardo serial communication.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//
 
#include <Wire.h>
 
 
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
 
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
 
      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknow error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
 
  delay(5000);           // wait 5 seconds for next scan
}
```
# I2Cを採用しているMEMSセンサ

## カラーセンサー

- [VEML6040(2.0x1.25x1.0mm)](http://www.vishay.com/docs/84276/veml6040.pdf)
- [ISL29125(1.65x1.65x0.7mm)](http://www.intersil.com/content/dam/Intersil/documents/isl2/isl29125.pdf)
- [BH1745(2.0x2.1x0.6mm)](http://rohmfs.rohm.com/en/products/databook/datasheet/ic/sensor/light/bh1745nuc-e.pdf)
- [TCS34901(2.0x2.4x0.6mm)](http://ams.com/eng/Products/Light-Sensors/Color-Sensor/TCS34901)
- [TCS34725(2.0x2.4x0.6mm)](http://ams.com/eng/content/download/319364/1117183/287875)
- [TCS3414(3.0x3.0x0.65mm)](http://ams.com/eng/content/download/250257/975989/142735)
- [S11059(3.0x4.2x1.3mm)](http://www.hamamatsu.com/jp/ja/product/alpha/R/4153/S11059-02DT/index.html)
- [MTCSiCF(4.0x4.0x0.9mm)](http://www.mazet.de/de/dokumente/data-sheets/mtcsicf/download)
 
## 気圧センサ
- [SPT-B10W(1.4×1.0×0.6mm)](http://www.sensirion.co.jp/products/upcoming-technologies/barometric-pressure-sensors/)
- [BM1383GLV(2.1x2.0x1.0mm)](http://rohmfs.rohm.com/jp/products/databook/datasheet/ic/sensor/pressure/bm1383glv-j.pdf)
- [DPS310(2.0×2.5×1.0mm)](http://www.infineon.com/dgdl/Infineon-PB_DPS310_Digital_Barometric_Pressure_Sensor-PB-v01_00-EN.pdf?fileId=5546d4624bbf60fb014bc100f8150839)
- [BMP280(2.0x2.5x0.95mm)](https://ae-bst.resource.bosch.com/media/products/dokumente/bmp280/BST-BMP280-DS001-12.pdf)
- [LPS25H(2.5x2.5x1.0mm)](http://www.st-japan.co.jp/st-web-ui/static/active/jp/resource/technical/document/datasheet/DM00066332.pdf)
- [BMP180(3.6x3.8x0.93mm)](https://ae-bst.resource.bosch.com/media/products/dokumente/bmp180/BST-BMP180-DS000-12~1.pdf)
- [MPL3115(5.0mmx3.0mmx1.1mm)](http://cache.freescale.com/files/sensors/doc/data_sheet/MPL3115A2.pdf)
- [MPL115(5.0mmx3.0mmx1.2mm)](http://www.nxp.com/files/sensors/doc/data_sheet/MPL115A1.pdf)

## UV Index
- [Si1132(2.0x2.0x0.65mm)](https://www.silabs.com/Support%20Documents/TechnicalDocs/Si1132.pdf)
- [GUVB-C31SM(2.0×2.3×1.4mm)](http://geni-uv.com/download/eng/UV_Sensor/Digital_UV_Sensor/GUVB-C31SM_eng.pdf)
- [VEML6070(2.35x1.8x1.0mm)](http://www.vishay.com/docs/84277/veml6070.pdf)
- [UVIS25(2.5x2.5x0.76mm)](http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/datasheet/DM00153123.pdf)

## Ambient Light
- [ISL29034(1.5x1.3x0.75mm)](http://www.intersil.com/content/dam/Intersil/documents/isl2/isl29034.pdf)
- [MAX44007(2.0x2.0x0.6mm)](https://datasheets.maximintegrated.com/en/ds/MAX44007.pdf)
- [LTR-329ALS(2.0x2.0x0.7mm)](http://www.mouser.com/ds/2/239/Lite-On_LTR-329ALS-01%20DS_ver1.1-348647.pdf)
- [TSL45315(2.0x2.0x0.7mm)](http://ams.com/eng/content/download/320004/1118282/183099)
- [OPT3001(2.0×2.0×0.65mm)](http://www.ti.com/lit/ds/symlink/opt3001.pdf)
- [NOA1305(2.0×2.0×0.65mm)](http://www.onsemi.jp/pub_link/Collateral/NOA1305-D.PDF)
- [BH1715FVC(3.0x1.6x0.75mm)](http://rohmfs.rohm.com/en/products/databook/datasheet/ic/sensor/light/bh1715fvc-e.pdf)
- [NOA1302(3.0x3.0x1.1mm)](http://www.onsemi.com/pub_link/Collateral/NOA1302-D.PDF)

## Proximity
- [TSL26713(2.0x2.0x0.65mm)](http://ams.com/eng/content/download/250323/976177/142398)
- [Si1147(2.0x2.0x0.65mm)](https://www.silabs.com/Support%20Documents/TechnicalDocs/Si1145-46-47.pdf)
- [VCNL4040(4.0x2.0x1.1mm)](http://www.vishay.com/docs/84274/vcnl4040.pdf)

## Accelerometer
- [MC3571(1.085x1.085x0.74mm)](http://www.mcubemems.com/wp-content/uploads/2015/10/MC3571-Preliminary-Datasheet-APS-048-0045v1.0.pdf)
- [MC3635(1.6x1.6x0.94mm)](http://www.mcubemems.com/wp-content/uploads/2015/10/MC3635-Preliminary-Datasheet-APS-048-0044v1.0.pdf)
- [ADXL345(3.0x5.0x1.0mm)](http://www.analog.com/media/jp/technical-documentation/data-sheets/ADXL345_jp.pdf)
- [BMA280(2.0x2.0x0.95mm)](https://ae-bst.resource.bosch.com/media/products/dokumente/bma280/BST-BMA280-DS000-11_published.pdf)
- [LIS3DSH(3.0x3.0x1.0mm)](http://www.st.com/web/en/resource/technical/document/datasheet/DM00040962.pdf)
- [MMA8451(3.0x3.0x1.0mm)](http://www.nxp.com/files/sensors/doc/data_sheet/MMA8451Q.pdf)


## Gyroscope
- [L3GD20H(3.0x3.0x1.0mm)](http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/datasheet/DM00060659.pdf)

## Magnetic
- [LIS3MDL(2.0x2.0x1.0mm)](http://www.st.com/web/en/resource/technical/document/datasheet/DM00075867.pdf)

## eCompass
- [BMC150(2.2x2.2x1.0mm)](https://ae-bst.resource.bosch.com/media/products/dokumente/bmc150/BST-BMC150-DS000-04.pdf)
- [BMC156(2.2×2.2x0.95mm)](https://ae-bst.resource.bosch.com/media/products/dokumente/bmc156_1/BST-BMC156-DS000-01.pdf)
- [LSM303DTR(3.0x3.0x1.0mm)](http://www.st.com/web/en/resource/technical/document/datasheet/DM00057547.pdf)
- [MC6450(3.0×3.0×0.95mm)](http://www.mcubemems.com/wp-content/uploads/2014/10/MC6450-Preliminary-Datasheet-APS-048-0017v1.5.pdf)
- [FXOS8700CQ(3.0x3.0x1.2mm)](http://cache.nxp.com/files/sensors/doc/data_sheet/FXOS8700CQ.pdf?pspll=1)

## IMU
- [BMI160(2.5x3.0x0.83mm)](https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=BMI160)
- [ICM-20608(3.0x3.0x75mm)](http://43zrtwysvxb2gf29r5o0athu.wpengine.netdna-cdn.com/wp-content/uploads/2015/03/DS-000081-v1.01.pdf)

## 6AXIS(6軸加速度センサー)
- [LSM6DSO(2.5x3x0.83mm)](https://www.st.com/content/st_com/en/products/mems-and-sensors/inemo-inertial-modules/lsm6dso.html?icmp=tt8620_gl_pron_oct2018)

## 9AXIS(9軸加速度センサ)
- [KMX61G(3.0x3.0x0.9mm)](http://kionixfs.kionix.com/en/document/KMX61G%20Sell%20Sheet.pdf)
- [MC7010(3.0x3.0x0.95mm)](http://www.mcubemems.com/wp-content/uploads/2014/06/MC7010-Preliminary-Datasheet-APS-048-0022v1.2.pdf)
- [MPU-9250(3.0x3.0x1.0mm)](http://43zrtwysvxb2gf29r5o0athu.wpengine.netdna-cdn.com/wp-content/uploads/2015/02/MPU-9250-Datasheet.pdf)
- [LSM9DS0(4.0x4.0x1.0mm)](https://www.adafruit.com/datasheets/LSM9DS0.pdf)

## Gas(ガス)
- [CSS811(2.7x4.0mm)](http://ccmoss.com/sites/default/files/documents/CC-000780-DS-4-CCS811B%20Product%20Brief_0.pdf)
- [AS-MLV-P2(9.1x9.1x4.5mm)](http://ams.com/eng/Products/Chemical-Sensors/Gas-Sensors/AS-MLV-P2)

## Air Quality(空気品質)
- [iAQ-core C(15.24x17.78mm)](http://ams.com/eng/content/download/686523/1787697/348216)
- [iAQ-core P(15.24x17.78mm)](http://ams.com/eng/content/download/686523/1787697/348217)

## Temperature(温度)
- [Si7050/53/54/55(3x3x0.75mm)](https://www.silabs.com/Support%20Documents/TechnicalDocs/Si7050-3-4-5-A20.pdf)
- [TMP102(1.2x1.6x0.65mm)](http://www.tij.co.jp/jp/lit/ds/symlink/tmp102.pdf)
- [ADT7410(4.0x5.0x1.5mm)](http://www.analog.com/media/en/technical-documentation/data-sheets/ADT7410.pdf)
- [MCP9808(3.0x5.0x1.1mm)](http://ww1.microchip.com/downloads/en/DeviceDoc/25095A.pdf)
- [TMP117](http://www.tij.co.jp/product/jp/TMP117)

## Environment(環境センサ)
- [BME280(2.5x2.5x0.93mm)](https://www.adafruit.com/datasheets/BST-BME280_DS001-10.pdf)
- [BME680(3.0x3.0x0.95mm)](https://ae-bst.resource.bosch.com/media/products/dokumente/bme680/Bosch_Sensortec_Flyer_BME680.pdf)
- [STS21(2.0x2.1x1.1mm)](https://www.sensirion.com/fileadmin/user_upload/customers/sensirion/Dokumente/Humidity_and_Temperature_Sensors/Sensirion_Humidity_and_Temperature_Sensors_STS21_Datasheet_V2.pdf)

## Thermopile
- [Grid-EYE/AMG8831(7.9x10.9x4.8mm)](https://industrial.panasonic.com/cdbs/www-data/pdf/ADI8000/ADI8000CJ1.pdf)
- [TMP007(1.9x1.9x0.625mm)](http://www.ti.com/lit/ds/symlink/tmp007.pdf)
- [MLX90621](http://www.melexis.com/Infrared-Thermometer-Sensors/Infrared-Thermometer-Sensors/MLX90621-823.aspx)

## SensorHUB
- [ICM-30630(3.0x3.0x1.0mm)](http://43zrtwysvxb2gf29r5o0athu.wpengine.netdna-cdn.com/wp-content/uploads/2015/03/ICM-30630.pdf)
- [BNO055(5.2x3.8x1.1mm)](https://ae-bst.resource.bosch.com/media/products/dokumente/bno055/BST_BNO055_DS000_13.pdf)

## Bio
- [MAX30100(2.0x5.6x0.9mm)](https://datasheets.maximintegrated.com/en/ds/MAX30100.pdf)

# 操作系デバイス

## Joystick
- [67A Hall Effect Joystick](http://www.grayhill.com/assets/1/7/67a_i2c_user_manual_1.2.pdf)
- [N40P107](https://ams.com/jpn/content/download/155524/779265/91355)

## TouchScreen
- [TSC2003](http://www.ti.com/lit/ds/sbas454/sbas454.pdf)
 
# LED

## LED Driver
- [SN3218(18ch)](http://www.si-en.com/uploadpdf/s2011517171720.pdf)
- [TPIC2810](http://www.ti.com/lit/ds/symlink/tpic2810.pdf)
- [TLC59116F(16ch)](http://www.tij.co.jp/general/jp/docs/lit/getliterature.tsp?genericPartNumber=tlc59116f&fileType=pdf)
- [PCA9532(16ch)](http://cache.nxp.com/documents/data_sheet/PCA9532.pdf?pspll=1)

# NFC

## NFC
- [NT3H1101/NT3H1201](http://www.nxp.com/documents/data_sheet/NT3H1101_1201.pdf)

# GPIO

## GPIO
- [PCA6416A](http://cache.nxp.com/documents/data_sheet/PCA6416A.pdf?pspll=1)
- [TCA9534](http://www.tij.co.jp/product/jp/tca9534)

## ADC
- [ADS7828](http://www.tij.co.jp/jp/lit/ds/symlink/ads7828.pdf)
- [ADC121](http://www.tij.co.jp/product/jp/ADC121C021)

## Programmable OCXO
- [Stratum 3E OCXO](https://www.sitime.com/products/programmable-ocxos)