-
Notifications
You must be signed in to change notification settings - Fork 0
I2C Sensor Addressing
I2C uses a 7-bit addressing scheme (there is also 10-bit addressing but we are not using it). When sending an address over the bus, the address is shifted to the left 1 bit and the least significant bit is used to indicate read or write. It is important to know this because LEGO and 3rd-party sensor manufacturers use the shifted value as the address in their documentation. This shifted value is also used in most other NXT/EV3 programming languages/environments.
IMPORTANT NOTE: I2C addresses 0x01 through 0x07 (unshifted) are reserved for special use by the I2C specifications. However, these addresses are used by some sensors anyway (most notably the NXT Ultrasonic sensor). The ev3dev kernel has been patched to make these work, but many userspace tools (like i2c-tools) will not work with devices at these addresses.
ev3dev is different because the Linux kernel uses the unshifted value as the I2C address. This means you will have to convert the value to get the correct address. Shift to the right is the same as divide by 2, so get out your hexadecimal calculator and do some math!
Or for the engineer type folks that prefer tables...
Shifted Address (write/read) | Unshifted Address | Notes | Shifted Address (write/read) | Unshifted Address | Notes |
---|---|---|---|---|---|
0x00/0x01 | 0x00 | I2C spec: General call address / START byte | 0x80/0x81 | 0x40 | |
0x02/0x03 | 0x01 | NXT Ultrasonic and many 3rd party sensors I2C spec: CBUS address |
0x82/0x83 | 0x41 | |
0x04/0x05 | 0x02 | LEGO Energy Storage I2C spec: Reserved for different bus format |
0x84/0x85 | 0x42 | |
0x06/0x07 | 0x03 | I2C spec: Reserved for future purposes | 0x86/0x87 | 0x43 | |
0x08/0x09 | 0x04 | I2C spec: Hs-mode master code | 0x88/0x89 | 0x44 | |
0x0A/0x0B | 0x05 | I2C spec: Hs-mode master code | 0x8A/0x8B | 0x45 | |
0x0C/0x0D | 0x06 | I2C spec: Hs-mode master code | 0x8C/0x8D | 0x46 | |
0x0E/0x0F | 0x07 | I2C spec: Hs-mode master code | 0x8E/0x8F | 0x47 | |
0x10E/0x11 | 0x08 | Some HiTechnic sensors | 0x90/0x91 | 0x48 | |
0x12/0x13 | 0x09 | 0x92/0x93 | 0x49 | ||
0x14/0x15 | 0x0A | mindsensors.com Light Sensor Array | 0x94/0x95 | 0x4A | |
0x16/0x17 | 0x0B | 0x96/0x97 | 0x4B | ||
0x18/0x19 | 0x0C | 0x98/0x99 | 0x4C | LEGO Temperature Sensor | |
0x1A/0x1B | 0x0D | 0x9A/0x9B | 0x4D | ||
0x1C/0x1D | 0x0E | 0x9C/0x9D | 0x4E | ||
0x1E/0x1F | 0x0F | 0x9E/0x0F | 0x4F | ||
0x20/0x21 | 0x10 | 0xA0/0xA1 | 0x50 | ||
0x22/0x23 | 0x11 | 0xA2/0xA3 | 0x51 | ||
0x24/0x25 | 0x12 | 0xA4/0xA5 | 0x52 | ||
0x26/0x27 | 0x13 | 0xA6/0xA7 | 0x53 | ||
0x28/0x29 | 0x14 | 0xA8/0xA9 | 0x54 | ||
0x2A/0x2B | 0x15 | 0xAA/0xAB | 0x55 | ||
0x2C/0x2D | 0x16 | 0xAC/0xAD | 0x56 | ||
0x2E/0x2F | 0x17 | 0xAE/0xAF | 0x57 | ||
0x30/0x31 | 0x18 | 0xB0/0xB1 | 0x58 | ||
0x32/0x33 | 0x19 | 0xB2/0xB3 | 0x59 | ||
0x34/0x35 | 0x1A | 0xB4/0xB5 | 0x5A | ||
0x36/0x37 | 0x1B | 0xB6/0xB7 | 0x5B | ||
0x38/0x39 | 0x1C | 0xB8/0xB9 | 0x5C | ||
0x3A/0x3B | 0x1D | 0xBA/0xBB | 0x5D | ||
0x3C/0x3D | 0x1E | 0xBC/0xBD | 0x5E | ||
0x3E/0x3F | 0x1F | 0xBE/0xBF | 0x5F | ||
0x40/0x41 | 0x20 | 0xC0/0xC1 | 0x60 | ||
0x42/0x43 | 0x21 | 0xC2/0xC3 | 0x61 | ||
0x44/0x45 | 0x22 | 0xC4/0xC5 | 0x62 | ||
0x46/0x47 | 0x23 | 0xC6/0xC7 | 0x63 | ||
0x48/0x49 | 0x24 | 0xC8/0xC9 | 0x64 | ||
0x4A/0x4B | 0x25 | 0xCA/0xCB | 0x65 | ||
0x4C/0x4D | 0x26 | 0xCC/0xCD | 0x66 | ||
0x4E/0x4F | 0x27 | 0xCE/0xCF | 0x67 | ||
0x50/0x51 | 0x28 | 0xD0/0xD1 | 0x68 | ||
0x52/0x53 | 0x29 | 0xD2/0xD3 | 0x69 | ||
0x54/0x55 | 0x2A | 0xD4/0xD5 | 0x6A | ||
0x56/0x57 | 0x2B | 0xD6/0xD7 | 0x6B | ||
0x58/0x59 | 0x2C | 0xD8/0xD9 | 0x6C | ||
0x5A/0x5B | 0x2D | 0xDA/0xDA | 0x6D | ||
0x5C/0x5D | 0x2E | 0xDC/0xDD | 0x6E | ||
0x5E/0x5F | 0x2F | 0xDE/0xDF | 0x6F | ||
0x60/0x61 | 0x30 | 0xE0/0xE1 | 0x70 | ||
0x62/0x63 | 0x31 | 0xE2/0xE3 | 0x71 | ||
0x64/0x65 | 0x32 | 0xE4/0xE5 | 0x72 | ||
0x66/0x67 | 0x33 | 0xE6/0xE7 | 0x73 | ||
0x68/0x69 | 0x34 | 0xE8/0xE9 | 0x74 | ||
0x6A/0x6B | 0x35 | 0xEA/0xEB | 0x75 | ||
0x6C/0x6D | 0x36 | 0xEC/0xED | 0x76 | ||
0x6E/0x6F | 0x37 | 0xEE/0xEF | 0x77 | ||
0x70/0x71 | 0x38 | 0xF0/0xF1 | 0x78 | I2C spec: 10-bit slave addressing | |
0x72/0x73 | 0x39 | 0xF2/0xF3 | 0x79 | I2C spec: 10-bit slave addressing | |
0x74/0x75 | 0x3A | 0xF4/0xF5 | 0x7A | I2C spec: 10-bit slave addressing | |
0x76/0x77 | 0x3B | 0xF6/0xF7 | 0x7B | I2C spec: 10-bit slave addressing | |
0x78/0x79 | 0x3C | 0xF8/0xF9 | 0x7C | I2C spec: Reserved for future purposes | |
0x7A/0x7B | 0x3D | 0xFA/0xFB | 0x7D | I2C spec: Reserved for future purposes | |
0x7C/0x7D | 0x3E | 0xFC/0xFD | 0x7E | I2C spec: Reserved for future purposes | |
0x7E/0x7F | 0x3F | 0xFE/0xFF | 0x7F | I2C spec: Reserved for future purposes |