zoukankan      html  css  js  c++  java
  • uboot i2c 操作函数记录

    • 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
      ",
      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
      ");
       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.
      ");
       97         return -EIO;
       98     }
      
  • 相关阅读:
    hdoj 1002 A + B Problem II
    hdoj 1234 开门人和关门人
    hdoj 2203 亲和串
    nyoj 73 比大小
    81B
    信息传递
    bzoj1787
    最少交换次数
    100803C
    火柴排队
  • 原文地址:https://www.cnblogs.com/chenfulin5/p/9494042.html
Copyright © 2011-2022 走看看