uboot i2c 操作函式記錄

weixin_34198881發表於2018-08-17
  • I2C 在 u-boot 上面,有直接操作 I2C 的函式

    // drivers/i2c/i2c_core.c
    
    // 設定在哪個 I2C bus 上工作
    276 int i2c_set_bus_num(unsigned int bus)
    277 {
    278     int max;
    279
    280     if ((bus == I2C_BUS) && (I2C_ADAP->init_done > 0))
    281         return 0;
    282
    283 #ifndef CONFIG_SYS_I2C_DIRECT_BUS
    284     if (bus >= CONFIG_SYS_NUM_I2C_BUSES)
    285         return -1;
    286 #endif
    287
    288     max = ll_entry_count(struct i2c_adapter, i2c);
    289     if (I2C_ADAPTER(bus) >= max) {
    290         printf("Error, wrong i2c adapter %d max %d possible\n",
    291                I2C_ADAPTER(bus), max);
    292         return -2;
    293     }
    294
    295 #ifndef CONFIG_SYS_I2C_DIRECT_BUS
    296     i2c_mux_disconnect_all();
    297 #endif
    298
    299     gd->cur_i2c_bus = bus;
    300     if (I2C_ADAP->init_done == 0)
    301         i2c_init_bus(bus, I2C_ADAP->speed, I2C_ADAP->slaveaddr);
    302
    303 #ifndef CONFIG_SYS_I2C_DIRECT_BUS
    304     i2c_mux_set_all();
    305 #endif
    306     return 0;
    307 }    
    //etc     i2c_set_bus_num(1);
    
    //  i2c slave 匹配
    313 int i2c_probe(uint8_t chip)
    314 {
    315     return I2C_ADAP->probe(I2C_ADAP, chip);
    316 }
    // etc  i2c_probe(0x68)
    //  返回是否成功, 0 表示成功 , 非 0 表示失敗
    
    // i2c  讀寫 寫
    330 int i2c_read(uint8_t chip, unsigned int addr, int alen,
    331                 uint8_t *buffer, int len)
    332 {
    333     return I2C_ADAP->read(I2C_ADAP, chip, addr, alen, buffer, len);
    334 }
    335
    336 int i2c_write(uint8_t chip, unsigned int addr, int alen,
    337                 uint8_t *buffer, int len)
    338 {
    339     return I2C_ADAP->write(I2C_ADAP, chip, addr, alen, buffer, len);
    340 }
    
    //etc 
                uchar wri_data = 0x3f, red_data;
     90     if (i2c_write(0x68, 1, 1, (uchar *)&wri_data, sizeof(int)))
     91         puts("write error\n");
     92
     93     if (i2c_read(0x68, 1, 1, (uchar *)&red_data,
     94              sizeof(int))) {
     95         puts("Could not read the MCU; something fundamentally"
     96             " wrong on the I2C bus.\n");
     97         return -EIO;
     98     }

相關文章