openUBMC Chip Abstract Layer V0.1
载入中...
搜索中...
未找到
I2C

精简了接口设计,去除了重复的部分

接口用途

  • runtime_accessor MDS对象访问

对比

<tt>init</tt>

  • 原接口
    int32_t init(uint32_t bus_id, uint32_t speed, uint32_t mode, uint32_t addr) const;
  • 新接口
    struct I2cConfig {
    uint32_t speed;
    uint32_t mode;
    uint32_t addr;
    uint32_t use_smbus;
    };
    void config(int32_t index, void *config, uint32_t size);
  • 变更说明 初始化格式统一变更

<tt>read</tt>

  • 原接口
    using I2C_READ_S = struct tag_i2c_read_s {
    uint32_t rv_id; /* I2C控制器的编号,取值范围为0~(I2C_MAX_CHANEL-1) */
    const uint8_t *tx_buffer; /* 读操作发送的数据 (地址(1byte高7位) + 其他数据),其他数据可以没有 */
    uint32_t tx_len; /* 发送命令中数据长度( 地址 + 其他数据 的字节数 ) */
    uint8_t *read_buf; /* 回传数据buffer */
    uint32_t length; /* 读出数据的长度 */
    uint32_t time_out_cnt; /* 读超时时间 ms */
    uint32_t re_read_cnt; /* 重读次数 默认为3,失败时重读三次 */
    };
    std::tuple<int32_t, std::optional<std::string>> read(I2C_READ_S *read_data, const string_view &in_data);
  • 新接口
    std::tuple<int32_t, std::optional<string_t>> read(int32_t index, uint32_t length, uint32_t timeout, uint32_t retry, const string_t &in_data);
  • 变更说明 分解I2C_READ_S为入参 明确读取的报文格式

<tt>write</tt>

  • 原接口
    using I2C_WRITE_S = struct tag_i2c_write_s {
    uint32_t drv_id; /* I2C控制器的编号,取值范围为0~(I2C_MAX_CHANEL-1) */
    uint8_t *tx_buffer; /* 写命令 包括 从设备地址 + 偏移地址 + 数据 */
    uint32_t length; /* 写命令的长度 */
    uint32_t time_out_cnt; /* 写超时时间 */
    };
    int32_t write(uint32_t drv_id, const string_t &in_data, uint32_t time_out_cnt, uint8_t write_delay);
  • 新接口
    int32_t write(int32_t index, const string_t &in_data, uint32_t timeout, uint8_t write_delay);
  • 变更说明 分解I2C_WRITE_S为入参 明确写入的报文格式

<tt>reset</tt>

  • 原接口
    void reset(uint8_t bus_id);
  • 新接口
    void reset(int32_t index);
  • 变更说明 不变,参数规范化

<tt>slave_cache_write</tt>

  • 原接口
    void slave_cache_write(uint32_t drv_id, uint32_t offset, const string_view &val);
  • 新接口
    int32_t slave_cache_write(int32_t index, uint32_t offset, const string_t &val);
  • 变更说明 基本不变,增加了返回值

<tt>slave_cache_write</tt>

  • 原接口
    void slave_cache_write(uint32_t drv_id, uint32_t offset, const string_view &val);
  • 新接口
    int32_t slave_cache_write(int32_t index, uint32_t offset, const string_t &val);
  • 变更说明 基本不变,增加了返回值

<tt>slave_cache_read</tt>

  • 原接口
    std::string slave_cache_read(uint32_t drv_id, uint32_t offset, uint32_t size);
  • 新接口
    string_t slave_cache_read(int32_t index, uint32_t offset, uint32_t size);
  • 变更说明 基本不变

<tt>deploy</tt>

  • 原接口
    struct i2c_depl {
    uint32_t drv_id; /* 驱动ID, 与总线ID保持一致 */
    uint32_t flags; /* 初始化属性 */
    uint32_t sda_hold; /* SDA信号hold延迟周期数 */
    uint32_t scl_high; /* SCL 高电平周期数 */
    uint32_t scl_low; /* SCL 低电平周期数 */
    uint32_t scl_low_timeout; /* SCL 低电平超时周期数 */
    uint32_t sda_low_timeout; /* SDL 低电平超时周期数 */
    uint16_t slave_address; /* 总线初始化为slave时,控制器的地址 */
    uint16_t clk_strech_timeout; /* slave时钟延展最长时间 单位ms */
    uint64_t slave_dlen; /* 总线初始化为slave时,控制器使用的内存的长度,单位字节,必须是8的整数倍 */
    uint64_t extension; /* 保留扩展字段 */
    } __attribute__((aligned(sizeof(uint32_t))));
    int32_t deploy(const DEV_I2C_DEPLOY *deploy);
  • 新接口 删除
  • 变更说明 原接口主要用于设置SMbus Slave,这里使用config替代

<tt>msg_xfer</tt>

  • 原接口
    std::string msg_xfer(DEV_I2C_MSG *msg, const string_view &in_val);
  • 新接口 删除
  • 变更说明 原接口实际不使用,含义上和write重合