Paul Staron / Mbed 2 deprecated I2C-Search

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 //      I2C - Search for devices on an I2C bus,
00002 
00003 //  Continuously cycles through each device address, checking for a response
00004 //  Prints 8-bit address for each device found and possible devices that use that address
00005 //  if bus isn't working check pull-up resistors are fitted, typicaly 4k7 on SDA and CLK
00006 //  Recommend to use TeraTerm VT serial monitor at 9600 baud 
00007 
00008 
00009 
00010 #include "mbed.h"
00011 
00012 //I2C i2c(p28, p27);    // sda, clk     LPC1768
00013 //I2C i2c(p9, p10);     // sda, clk     LPC1768
00014 
00015 // I2C i2c(PB_11, PB_10);// sda, clk     STM F746      
00016 
00017 //I2C i2c(PB_7, PB_6);  // sda, clk     STM L432
00018 //I2C i2c(PA_10, PA_9); // sda, clk     STM L432
00019 //I2C i2c(PB_4, PA_7);  // sda, clk     STM L432
00020 
00021 I2C i2c(D14, D15);      // sda, clk     STM 64 nucleo boards ARDUINO PINS
00022 //I2C i2c(A4, A5);      // sda, clk     STM 64 nucleo boards L476
00023 
00024 
00025 /*
00026 #include "max32630fthr.h" 
00027     //Init board and set GPIO to 3.3V logic
00028 MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
00029 I2C i2c(P3_4, P3_5);    // sda, clk
00030 I2C i2c(P5_7, P6_0);    // sda, clk
00031 */
00032 /*
00033 #include "max32625pico.h"
00034 //MAX32625PICO pico(MAX32625PICO::IOH_DIP_IN, MAX32625PICO::VIO_IOH, MAX32625PICO::VIO_1V8);
00035 MAX32625PICO pico(MAX32625PICO::IOH_3V3, MAX32625PICO::VIO_IOH, MAX32625PICO::VIO_1V8);
00036 Serial  pc(P0_1, P0_0); // use serial to USB converter
00037 I2C i2c(P1_6, P1_7);    // sda, clk
00038 */
00039 
00040 Serial              pc(USBTX, USBRX);
00041 DigitalOut          led1(LED1);
00042 
00043 //list of some i2c device possibilities
00044 #define I2C_0x02    "PCA9955-GGG"
00045 #define I2C_0x06    "SHT1x"
00046 #define I2C_0x0C    "AK8975"
00047 
00048 #define I2C_0x1C    "MAG3110"
00049 
00050 #define I2C_0x20    "RDA5807, VEML6040, VEML6075"
00051 #define I2C_0x22    "RDA5807"
00052 
00053 #define I2C_0x38    "MMA8451-0, FXOS8700CQ-2"
00054 #define I2C_0x3A    "MMA8451-1, FXOS8700CQ-1"
00055 #define I2C_0x3C    "FXOS8700CQ-0, LIS3MDL"
00056 #define I2C_0x3E    "FXOS8700CQ-3"
00057 
00058 #define I2C_0x42    "MCP23017-b"
00059 #define I2C_0x44    "MCP23017-c"
00060 #define I2C_0x46    "MCP23017-d"
00061 
00062 #define I2C_0x50    "MAX5387-ggg"
00063 #define I2C_0x52    "MAX5387-ggv, VL53L0X"
00064 #define I2C_0x54    "MAX5387-gvg"
00065 #define I2C_0x56    "MAX5387-gvv"
00066 #define I2C_0x58    "MAX5387-vgg"
00067 #define I2C_0x5A    "MAX5387-vgv"
00068 #define I2C_0x5C    "MAX5387-vvg"
00069 #define I2C_0x5E    "MAX5387-vvv"
00070 
00071 #define I2C_0x70    "VEML6070-ld/c"
00072 #define I2C_0x72    "VEML6070-hd"
00073 
00074 #define I2C_0x80    "Si7005, Si7021, HTU21D, HDC1080, INA2xx/MAX7300-gg"
00075 #define I2C_0x82    "INA2xx/MAX7300-gv"
00076 #define I2C_0x84    "INA2xx/MAX7300-gd"
00077 #define I2C_0x86    "INA2xx/MAX7300-gc"
00078 #define I2C_0x88    "INA2xx/MAX7300-vg"
00079 #define I2C_0x8A    "INA2xx/MAX7300-vv"
00080 #define I2C_0x8C    "INA2xx/MAX7300-vd"
00081 #define I2C_0x8E    "INA2xx/MAX7300-vc"
00082 
00083 #define I2C_0x90    "MCP9802, AD7416-a, LM75, INA2xx/MAX7300-dg"
00084 #define I2C_0x92    "MAX9768, INA2xx/MAX7300-dv"
00085 #define I2C_0x94    "INA2xx/MAX7300-dd"
00086 #define I2C_0x96    "INA2xx/MAX7300-dc"
00087 #define I2C_0x98    "INA2xx/MAX7300-cg"
00088 #define I2C_0x9A    "INA2xx/MAX7300-cv"
00089 #define I2C_0x9C    "INA2xx/MAX7300-cd"
00090 #define I2C_0x9E    "INA2xx/MAX7300-cc"
00091 
00092 #define I2C_0xA0    "24C32WP, 24FC512-000, 24AA02-b0"
00093 #define I2C_0xA2    "24AA02-b1"
00094 #define I2C_0xA4    "24AA02-b2"
00095 #define I2C_0xA6    "24AA02-b3"
00096 #define I2C_0xA8    "24AA02-b4"
00097 #define I2C_0xAA    "MMA8491, 24AA02-b5, BQ27xx0, BQ34Z100-G1"
00098 #define I2C_0xAC    "24AA02-b6, M24SR64-Y"
00099 #define I2C_0xAE    "24AA02-b7"
00100 
00101 #define I2C_0xB4    "CCS811-0"
00102 #define I2C_0xB6    "CCS811-1"
00103 #define I2C_0xBA    "LPS22HB"
00104 #define I2C_0xBE    "HTS221"
00105 
00106 #define I2C_0xC0    "RDA5807, MPL3115A2, MLX90620-ram, PCA9955-0"
00107 #define I2C_0xC2    "SCD30"
00108 
00109 #define I2C_0xD0    "M41T81, M41T11, DS1307, DS3232M, MCU9150-0"
00110 #define I2C_0xD2    "MCU9150-1"
00111 #define I2C_0xD4    "LSM6DSL"
00112 #define I2C_0xDE    "MCP7941x-rtc"
00113 
00114 #define I2C_0xE0    "PCA9955-AllCall"
00115 #define I2C_0xEC    "MS5611-cs1, BME280-cs0, PCA9955-SubCall"
00116 #define I2C_0xEE    "BMP-180, MS5611-cs0, BME280-cs1, BMP-05"
00117 
00118 int n,address;
00119 char* device;
00120 char* getdevice();
00121 
00122 int main() {   
00123    
00124     led1=1;wait(1);led1=0;  
00125     
00126     //i2c.frequency(50000);  // set required i2c frequency, defautl 100000 
00127     //  pc.baud(230400);        // set terminal speed, default 9600    
00128     pc.printf("\033[0m\033[2J\033[HI2C Searching!\n\n\n");    
00129     
00130     while (1) {
00131         
00132         pc.printf("\033[0m\033[2J\033[HI2C Searching!\n\n\n"); 
00133         
00134         n=0;
00135         pc.printf("Starting....\n\n");
00136         
00137         for (address=0; address<256; address+=2) {
00138             if (!i2c.write(address, NULL, 0)) { // 0 returned is ok               
00139                 pc.printf("I2C address: 0x%02X\r\n     Device: %s\n\n", address, getdevice());
00140                 n++;
00141             }
00142             led1=!led1;
00143             wait_ms(1);
00144         }        
00145         pc.printf("\n\n%d devices found\n", n); 
00146         wait(2);    
00147     }
00148 }
00149 
00150 char* getdevice(){
00151     device="Unknown";
00152     switch(address){        
00153         case 0x02:device = I2C_0x02;break;
00154         case 0x06:device = I2C_0x06;break;
00155         case 0x0C:device = I2C_0x0C;break;
00156         
00157         case 0x1C:device = I2C_0x1C;break;
00158         
00159         case 0x20:device = I2C_0x20;break;
00160         case 0x22:device = I2C_0x22;break;
00161         
00162         case 0x38:device = I2C_0x38;break;
00163         case 0x3A:device = I2C_0x3A;break;
00164         case 0x3C:device = I2C_0x3C;break;
00165         case 0x3E:device = I2C_0x3E;break;
00166         
00167         case 0x42:device = I2C_0x42;break;
00168         case 0x44:device = I2C_0x44;break;
00169         case 0x46:device = I2C_0x46;break;
00170             
00171         case 0x50:device = I2C_0x50;break;
00172         case 0x52:device = I2C_0x52;break;
00173         case 0x54:device = I2C_0x54;break;
00174         case 0x56:device = I2C_0x56;break;
00175         case 0x58:device = I2C_0x58;break;
00176         case 0x5A:device = I2C_0x5A;break;
00177         case 0x5C:device = I2C_0x5C;break;
00178         case 0x5E:device = I2C_0x5E;break;
00179         
00180         case 0x70:device = I2C_0x70;break;    
00181         case 0x72:device = I2C_0x72;break;   
00182     
00183         case 0x80:device = I2C_0x80;break;
00184         case 0x82:device = I2C_0x82;break;
00185         case 0x84:device = I2C_0x84;break;
00186         case 0x86:device = I2C_0x86;break;
00187         case 0x88:device = I2C_0x88;break;
00188         case 0x8A:device = I2C_0x8A;break;
00189         case 0x8C:device = I2C_0x8C;break;
00190         case 0x8E:device = I2C_0x8E;break;
00191    
00192         case 0x90:device = I2C_0x90;break;
00193         case 0x92:device = I2C_0x92;break;
00194         case 0x94:device = I2C_0x94;break;
00195         case 0x96:device = I2C_0x96;break;
00196         case 0x98:device = I2C_0x98;break;
00197         case 0x9A:device = I2C_0x9A;break;
00198         case 0x9C:device = I2C_0x9C;break;
00199         case 0x9E:device = I2C_0x9E;break;    
00200     
00201         case 0xA0:device = I2C_0xA0;break;
00202         case 0xA2:device = I2C_0xA2;break;
00203         case 0xA4:device = I2C_0xA4;break;
00204         case 0xA6:device = I2C_0xA6;break;
00205         case 0xA8:device = I2C_0xA8;break;
00206         case 0xAA:device = I2C_0xAA;break;
00207         case 0xAC:device = I2C_0xAC;break;
00208         case 0xAE:device = I2C_0xAE;break;
00209 
00210         case 0xB4:device = I2C_0xB4;break;
00211         case 0xB6:device = I2C_0xB6;break;
00212         case 0xBA:device = I2C_0xBA;break;
00213         case 0xBE:device = I2C_0xBE;break;
00214     
00215         case 0xC0:device = I2C_0xC0;break;
00216         case 0xC2:device = I2C_0xC2;break;
00217        
00218         case 0xD0:device = I2C_0xD0;break;
00219         case 0xD2:device = I2C_0xD2;break;
00220         case 0xD4:device = I2C_0xD4;break;
00221         case 0xDE:device = I2C_0xDE;break;
00222     
00223         case 0xE0:device = I2C_0xE0;break;
00224         case 0xEC:device = I2C_0xEC;break;
00225         case 0xEE:device = I2C_0xEE;break;
00226      }     
00227      return device; 
00228 }