Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:70d3ee543c70, 2020-02-21 (annotated)
- Committer:
- star297
- Date:
- Fri Feb 21 08:57:05 2020 +0000
- Revision:
- 0:70d3ee543c70
i2c search 1st commit
Who changed what in which revision?
| User | Revision | Line number | New 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 | } |