Paul Staron / Mbed 2 deprecated I2C-Search

Dependencies:   mbed

Committer:
star297
Date:
Fri Feb 21 08:57:05 2020 +0000
Revision:
0:70d3ee543c70
i2c search 1st commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
star297 0:70d3ee543c70 1 // I2C - Search for devices on an I2C bus,
star297 0:70d3ee543c70 2
star297 0:70d3ee543c70 3 // Continuously cycles through each device address, checking for a response
star297 0:70d3ee543c70 4 // Prints 8-bit address for each device found and possible devices that use that address
star297 0:70d3ee543c70 5 // if bus isn't working check pull-up resistors are fitted, typicaly 4k7 on SDA and CLK
star297 0:70d3ee543c70 6 // Recommend to use TeraTerm VT serial monitor at 9600 baud
star297 0:70d3ee543c70 7
star297 0:70d3ee543c70 8
star297 0:70d3ee543c70 9
star297 0:70d3ee543c70 10 #include "mbed.h"
star297 0:70d3ee543c70 11
star297 0:70d3ee543c70 12 //I2C i2c(p28, p27); // sda, clk LPC1768
star297 0:70d3ee543c70 13 //I2C i2c(p9, p10); // sda, clk LPC1768
star297 0:70d3ee543c70 14
star297 0:70d3ee543c70 15 // I2C i2c(PB_11, PB_10);// sda, clk STM F746
star297 0:70d3ee543c70 16
star297 0:70d3ee543c70 17 //I2C i2c(PB_7, PB_6); // sda, clk STM L432
star297 0:70d3ee543c70 18 //I2C i2c(PA_10, PA_9); // sda, clk STM L432
star297 0:70d3ee543c70 19 //I2C i2c(PB_4, PA_7); // sda, clk STM L432
star297 0:70d3ee543c70 20
star297 0:70d3ee543c70 21 I2C i2c(D14, D15); // sda, clk STM 64 nucleo boards ARDUINO PINS
star297 0:70d3ee543c70 22 //I2C i2c(A4, A5); // sda, clk STM 64 nucleo boards L476
star297 0:70d3ee543c70 23
star297 0:70d3ee543c70 24
star297 0:70d3ee543c70 25 /*
star297 0:70d3ee543c70 26 #include "max32630fthr.h"
star297 0:70d3ee543c70 27 //Init board and set GPIO to 3.3V logic
star297 0:70d3ee543c70 28 MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
star297 0:70d3ee543c70 29 I2C i2c(P3_4, P3_5); // sda, clk
star297 0:70d3ee543c70 30 I2C i2c(P5_7, P6_0); // sda, clk
star297 0:70d3ee543c70 31 */
star297 0:70d3ee543c70 32 /*
star297 0:70d3ee543c70 33 #include "max32625pico.h"
star297 0:70d3ee543c70 34 //MAX32625PICO pico(MAX32625PICO::IOH_DIP_IN, MAX32625PICO::VIO_IOH, MAX32625PICO::VIO_1V8);
star297 0:70d3ee543c70 35 MAX32625PICO pico(MAX32625PICO::IOH_3V3, MAX32625PICO::VIO_IOH, MAX32625PICO::VIO_1V8);
star297 0:70d3ee543c70 36 Serial pc(P0_1, P0_0); // use serial to USB converter
star297 0:70d3ee543c70 37 I2C i2c(P1_6, P1_7); // sda, clk
star297 0:70d3ee543c70 38 */
star297 0:70d3ee543c70 39
star297 0:70d3ee543c70 40 Serial pc(USBTX, USBRX);
star297 0:70d3ee543c70 41 DigitalOut led1(LED1);
star297 0:70d3ee543c70 42
star297 0:70d3ee543c70 43 //list of some i2c device possibilities
star297 0:70d3ee543c70 44 #define I2C_0x02 "PCA9955-GGG"
star297 0:70d3ee543c70 45 #define I2C_0x06 "SHT1x"
star297 0:70d3ee543c70 46 #define I2C_0x0C "AK8975"
star297 0:70d3ee543c70 47
star297 0:70d3ee543c70 48 #define I2C_0x1C "MAG3110"
star297 0:70d3ee543c70 49
star297 0:70d3ee543c70 50 #define I2C_0x20 "RDA5807, VEML6040, VEML6075"
star297 0:70d3ee543c70 51 #define I2C_0x22 "RDA5807"
star297 0:70d3ee543c70 52
star297 0:70d3ee543c70 53 #define I2C_0x38 "MMA8451-0, FXOS8700CQ-2"
star297 0:70d3ee543c70 54 #define I2C_0x3A "MMA8451-1, FXOS8700CQ-1"
star297 0:70d3ee543c70 55 #define I2C_0x3C "FXOS8700CQ-0, LIS3MDL"
star297 0:70d3ee543c70 56 #define I2C_0x3E "FXOS8700CQ-3"
star297 0:70d3ee543c70 57
star297 0:70d3ee543c70 58 #define I2C_0x42 "MCP23017-b"
star297 0:70d3ee543c70 59 #define I2C_0x44 "MCP23017-c"
star297 0:70d3ee543c70 60 #define I2C_0x46 "MCP23017-d"
star297 0:70d3ee543c70 61
star297 0:70d3ee543c70 62 #define I2C_0x50 "MAX5387-ggg"
star297 0:70d3ee543c70 63 #define I2C_0x52 "MAX5387-ggv, VL53L0X"
star297 0:70d3ee543c70 64 #define I2C_0x54 "MAX5387-gvg"
star297 0:70d3ee543c70 65 #define I2C_0x56 "MAX5387-gvv"
star297 0:70d3ee543c70 66 #define I2C_0x58 "MAX5387-vgg"
star297 0:70d3ee543c70 67 #define I2C_0x5A "MAX5387-vgv"
star297 0:70d3ee543c70 68 #define I2C_0x5C "MAX5387-vvg"
star297 0:70d3ee543c70 69 #define I2C_0x5E "MAX5387-vvv"
star297 0:70d3ee543c70 70
star297 0:70d3ee543c70 71 #define I2C_0x70 "VEML6070-ld/c"
star297 0:70d3ee543c70 72 #define I2C_0x72 "VEML6070-hd"
star297 0:70d3ee543c70 73
star297 0:70d3ee543c70 74 #define I2C_0x80 "Si7005, Si7021, HTU21D, HDC1080, INA2xx/MAX7300-gg"
star297 0:70d3ee543c70 75 #define I2C_0x82 "INA2xx/MAX7300-gv"
star297 0:70d3ee543c70 76 #define I2C_0x84 "INA2xx/MAX7300-gd"
star297 0:70d3ee543c70 77 #define I2C_0x86 "INA2xx/MAX7300-gc"
star297 0:70d3ee543c70 78 #define I2C_0x88 "INA2xx/MAX7300-vg"
star297 0:70d3ee543c70 79 #define I2C_0x8A "INA2xx/MAX7300-vv"
star297 0:70d3ee543c70 80 #define I2C_0x8C "INA2xx/MAX7300-vd"
star297 0:70d3ee543c70 81 #define I2C_0x8E "INA2xx/MAX7300-vc"
star297 0:70d3ee543c70 82
star297 0:70d3ee543c70 83 #define I2C_0x90 "MCP9802, AD7416-a, LM75, INA2xx/MAX7300-dg"
star297 0:70d3ee543c70 84 #define I2C_0x92 "MAX9768, INA2xx/MAX7300-dv"
star297 0:70d3ee543c70 85 #define I2C_0x94 "INA2xx/MAX7300-dd"
star297 0:70d3ee543c70 86 #define I2C_0x96 "INA2xx/MAX7300-dc"
star297 0:70d3ee543c70 87 #define I2C_0x98 "INA2xx/MAX7300-cg"
star297 0:70d3ee543c70 88 #define I2C_0x9A "INA2xx/MAX7300-cv"
star297 0:70d3ee543c70 89 #define I2C_0x9C "INA2xx/MAX7300-cd"
star297 0:70d3ee543c70 90 #define I2C_0x9E "INA2xx/MAX7300-cc"
star297 0:70d3ee543c70 91
star297 0:70d3ee543c70 92 #define I2C_0xA0 "24C32WP, 24FC512-000, 24AA02-b0"
star297 0:70d3ee543c70 93 #define I2C_0xA2 "24AA02-b1"
star297 0:70d3ee543c70 94 #define I2C_0xA4 "24AA02-b2"
star297 0:70d3ee543c70 95 #define I2C_0xA6 "24AA02-b3"
star297 0:70d3ee543c70 96 #define I2C_0xA8 "24AA02-b4"
star297 0:70d3ee543c70 97 #define I2C_0xAA "MMA8491, 24AA02-b5, BQ27xx0, BQ34Z100-G1"
star297 0:70d3ee543c70 98 #define I2C_0xAC "24AA02-b6, M24SR64-Y"
star297 0:70d3ee543c70 99 #define I2C_0xAE "24AA02-b7"
star297 0:70d3ee543c70 100
star297 0:70d3ee543c70 101 #define I2C_0xB4 "CCS811-0"
star297 0:70d3ee543c70 102 #define I2C_0xB6 "CCS811-1"
star297 0:70d3ee543c70 103 #define I2C_0xBA "LPS22HB"
star297 0:70d3ee543c70 104 #define I2C_0xBE "HTS221"
star297 0:70d3ee543c70 105
star297 0:70d3ee543c70 106 #define I2C_0xC0 "RDA5807, MPL3115A2, MLX90620-ram, PCA9955-0"
star297 0:70d3ee543c70 107 #define I2C_0xC2 "SCD30"
star297 0:70d3ee543c70 108
star297 0:70d3ee543c70 109 #define I2C_0xD0 "M41T81, M41T11, DS1307, DS3232M, MCU9150-0"
star297 0:70d3ee543c70 110 #define I2C_0xD2 "MCU9150-1"
star297 0:70d3ee543c70 111 #define I2C_0xD4 "LSM6DSL"
star297 0:70d3ee543c70 112 #define I2C_0xDE "MCP7941x-rtc"
star297 0:70d3ee543c70 113
star297 0:70d3ee543c70 114 #define I2C_0xE0 "PCA9955-AllCall"
star297 0:70d3ee543c70 115 #define I2C_0xEC "MS5611-cs1, BME280-cs0, PCA9955-SubCall"
star297 0:70d3ee543c70 116 #define I2C_0xEE "BMP-180, MS5611-cs0, BME280-cs1, BMP-05"
star297 0:70d3ee543c70 117
star297 0:70d3ee543c70 118 int n,address;
star297 0:70d3ee543c70 119 char* device;
star297 0:70d3ee543c70 120 char* getdevice();
star297 0:70d3ee543c70 121
star297 0:70d3ee543c70 122 int main() {
star297 0:70d3ee543c70 123
star297 0:70d3ee543c70 124 led1=1;wait(1);led1=0;
star297 0:70d3ee543c70 125
star297 0:70d3ee543c70 126 //i2c.frequency(50000); // set required i2c frequency, defautl 100000
star297 0:70d3ee543c70 127 // pc.baud(230400); // set terminal speed, default 9600
star297 0:70d3ee543c70 128 pc.printf("\033[0m\033[2J\033[HI2C Searching!\n\n\n");
star297 0:70d3ee543c70 129
star297 0:70d3ee543c70 130 while (1) {
star297 0:70d3ee543c70 131
star297 0:70d3ee543c70 132 pc.printf("\033[0m\033[2J\033[HI2C Searching!\n\n\n");
star297 0:70d3ee543c70 133
star297 0:70d3ee543c70 134 n=0;
star297 0:70d3ee543c70 135 pc.printf("Starting....\n\n");
star297 0:70d3ee543c70 136
star297 0:70d3ee543c70 137 for (address=0; address<256; address+=2) {
star297 0:70d3ee543c70 138 if (!i2c.write(address, NULL, 0)) { // 0 returned is ok
star297 0:70d3ee543c70 139 pc.printf("I2C address: 0x%02X\r\n Device: %s\n\n", address, getdevice());
star297 0:70d3ee543c70 140 n++;
star297 0:70d3ee543c70 141 }
star297 0:70d3ee543c70 142 led1=!led1;
star297 0:70d3ee543c70 143 wait_ms(1);
star297 0:70d3ee543c70 144 }
star297 0:70d3ee543c70 145 pc.printf("\n\n%d devices found\n", n);
star297 0:70d3ee543c70 146 wait(2);
star297 0:70d3ee543c70 147 }
star297 0:70d3ee543c70 148 }
star297 0:70d3ee543c70 149
star297 0:70d3ee543c70 150 char* getdevice(){
star297 0:70d3ee543c70 151 device="Unknown";
star297 0:70d3ee543c70 152 switch(address){
star297 0:70d3ee543c70 153 case 0x02:device = I2C_0x02;break;
star297 0:70d3ee543c70 154 case 0x06:device = I2C_0x06;break;
star297 0:70d3ee543c70 155 case 0x0C:device = I2C_0x0C;break;
star297 0:70d3ee543c70 156
star297 0:70d3ee543c70 157 case 0x1C:device = I2C_0x1C;break;
star297 0:70d3ee543c70 158
star297 0:70d3ee543c70 159 case 0x20:device = I2C_0x20;break;
star297 0:70d3ee543c70 160 case 0x22:device = I2C_0x22;break;
star297 0:70d3ee543c70 161
star297 0:70d3ee543c70 162 case 0x38:device = I2C_0x38;break;
star297 0:70d3ee543c70 163 case 0x3A:device = I2C_0x3A;break;
star297 0:70d3ee543c70 164 case 0x3C:device = I2C_0x3C;break;
star297 0:70d3ee543c70 165 case 0x3E:device = I2C_0x3E;break;
star297 0:70d3ee543c70 166
star297 0:70d3ee543c70 167 case 0x42:device = I2C_0x42;break;
star297 0:70d3ee543c70 168 case 0x44:device = I2C_0x44;break;
star297 0:70d3ee543c70 169 case 0x46:device = I2C_0x46;break;
star297 0:70d3ee543c70 170
star297 0:70d3ee543c70 171 case 0x50:device = I2C_0x50;break;
star297 0:70d3ee543c70 172 case 0x52:device = I2C_0x52;break;
star297 0:70d3ee543c70 173 case 0x54:device = I2C_0x54;break;
star297 0:70d3ee543c70 174 case 0x56:device = I2C_0x56;break;
star297 0:70d3ee543c70 175 case 0x58:device = I2C_0x58;break;
star297 0:70d3ee543c70 176 case 0x5A:device = I2C_0x5A;break;
star297 0:70d3ee543c70 177 case 0x5C:device = I2C_0x5C;break;
star297 0:70d3ee543c70 178 case 0x5E:device = I2C_0x5E;break;
star297 0:70d3ee543c70 179
star297 0:70d3ee543c70 180 case 0x70:device = I2C_0x70;break;
star297 0:70d3ee543c70 181 case 0x72:device = I2C_0x72;break;
star297 0:70d3ee543c70 182
star297 0:70d3ee543c70 183 case 0x80:device = I2C_0x80;break;
star297 0:70d3ee543c70 184 case 0x82:device = I2C_0x82;break;
star297 0:70d3ee543c70 185 case 0x84:device = I2C_0x84;break;
star297 0:70d3ee543c70 186 case 0x86:device = I2C_0x86;break;
star297 0:70d3ee543c70 187 case 0x88:device = I2C_0x88;break;
star297 0:70d3ee543c70 188 case 0x8A:device = I2C_0x8A;break;
star297 0:70d3ee543c70 189 case 0x8C:device = I2C_0x8C;break;
star297 0:70d3ee543c70 190 case 0x8E:device = I2C_0x8E;break;
star297 0:70d3ee543c70 191
star297 0:70d3ee543c70 192 case 0x90:device = I2C_0x90;break;
star297 0:70d3ee543c70 193 case 0x92:device = I2C_0x92;break;
star297 0:70d3ee543c70 194 case 0x94:device = I2C_0x94;break;
star297 0:70d3ee543c70 195 case 0x96:device = I2C_0x96;break;
star297 0:70d3ee543c70 196 case 0x98:device = I2C_0x98;break;
star297 0:70d3ee543c70 197 case 0x9A:device = I2C_0x9A;break;
star297 0:70d3ee543c70 198 case 0x9C:device = I2C_0x9C;break;
star297 0:70d3ee543c70 199 case 0x9E:device = I2C_0x9E;break;
star297 0:70d3ee543c70 200
star297 0:70d3ee543c70 201 case 0xA0:device = I2C_0xA0;break;
star297 0:70d3ee543c70 202 case 0xA2:device = I2C_0xA2;break;
star297 0:70d3ee543c70 203 case 0xA4:device = I2C_0xA4;break;
star297 0:70d3ee543c70 204 case 0xA6:device = I2C_0xA6;break;
star297 0:70d3ee543c70 205 case 0xA8:device = I2C_0xA8;break;
star297 0:70d3ee543c70 206 case 0xAA:device = I2C_0xAA;break;
star297 0:70d3ee543c70 207 case 0xAC:device = I2C_0xAC;break;
star297 0:70d3ee543c70 208 case 0xAE:device = I2C_0xAE;break;
star297 0:70d3ee543c70 209
star297 0:70d3ee543c70 210 case 0xB4:device = I2C_0xB4;break;
star297 0:70d3ee543c70 211 case 0xB6:device = I2C_0xB6;break;
star297 0:70d3ee543c70 212 case 0xBA:device = I2C_0xBA;break;
star297 0:70d3ee543c70 213 case 0xBE:device = I2C_0xBE;break;
star297 0:70d3ee543c70 214
star297 0:70d3ee543c70 215 case 0xC0:device = I2C_0xC0;break;
star297 0:70d3ee543c70 216 case 0xC2:device = I2C_0xC2;break;
star297 0:70d3ee543c70 217
star297 0:70d3ee543c70 218 case 0xD0:device = I2C_0xD0;break;
star297 0:70d3ee543c70 219 case 0xD2:device = I2C_0xD2;break;
star297 0:70d3ee543c70 220 case 0xD4:device = I2C_0xD4;break;
star297 0:70d3ee543c70 221 case 0xDE:device = I2C_0xDE;break;
star297 0:70d3ee543c70 222
star297 0:70d3ee543c70 223 case 0xE0:device = I2C_0xE0;break;
star297 0:70d3ee543c70 224 case 0xEC:device = I2C_0xEC;break;
star297 0:70d3ee543c70 225 case 0xEE:device = I2C_0xEE;break;
star297 0:70d3ee543c70 226 }
star297 0:70d3ee543c70 227 return device;
star297 0:70d3ee543c70 228 }