
VisionFive开发板上的U-Boot I2C驱动模型分析
5星
- 浏览量: 0
- 大小:None
- 文件类型:DOCX
简介:
本文详细探讨了在VisionFive开发板上基于U-Boot的I2C驱动模型的设计与实现,深入剖析其工作原理及优化方法。
### U-Boot中的I2C驱动模型——VisionFive开发板
#### 一、配置与编译
在深入探讨U-Boot中的I2C驱动模型前,我们先了解配置过程及其重要性。
**配置:**
生成的`.config`文件中有关于I2C总线的配置选项。例如:
- `CONFIG_I2C=y` 对应于路径 `D:workspacevisionsifeu-boot-simpledriversi2cKconfig` 文件中的配置选项,这一宏用来使能I2C驱动模型。使能后,I2C类接口的 `probe`、`read`、`write` 和 `speed` 方法将通过总线驱动的操作方法来实现。这些操作方法提供了对总线设置和数据传输的操作函数。每一个芯片级设备(作为总线的孩子节点)的信息都保存在父平台上。这一接口定义于 `include/i2c.h` 中。
选中 `.config` 文件中的 `CONFIG_I2C=y` 选项后,该配置将被写入到文件,并映射至相应的编译选项。这说明会编译目录下的 `i2c-uclass.c` 文件并将其加入U-Boot内。
另一个例子是 `CONFIG_SYS_I2C_DW=y`,这一选项对应的设置位于 `D:workspacevisionsifeu-boot-simpledriversi2cKconfig` 和 `Makefile` 中。如果选择 DesignWare I2C 主控制器,则适用于多种SOC,如 STSPEAr、Altera SoC FPGA、Synopsys ARC700 以及一些 Intel x86 SOC。
#### 二、I2C驱动模型详解
**I2C驱动目录结构:**
- `i2c-uclass.c`: I2C 总线类,是必须选中的核心文件。
- `designware_i2c.c`: 具体实现了某种 I2C 控制器的文件。不同的制造商可能会有不同的实现方式。例如,在同一目录下还包括了 `fsl_i2c.c`、`davinic_i2c.c` 和 `at91_i2c.c` 等文件。
**I2C控制器的选择:**
选择哪个 I2C 控制器取决于开发板所使用的芯片类型。例如,如果使用的是 DesignWare 类型的 I2C 控制器,在配置时就需要设置 `CONFIG_SYS_I2C_DW=y`。假设要更改到 Freescale 的 I2C 控制器,则需要进行如下配置:
- 在 `.config` 文件中添加 `CONFIG_SYS_I2C_FSL=y`。
- 这样配置后,编译将把 `fsl_i2c.c` 编入U-Boot。
#### 三、`designware_i2c.c` 分析
接下来对 `designware_i2c.c` 控制器进行详细分析:
**i2c-uclass.c 文件:**
在 `i2c-uclass.c` 中定义了 I2C 总线类,其中包括以下内容:
- `.id = UCLASS_I2C`: I2C 类的标识符。
- `.name = i2c`: 类的名字为 “i2c”。
- `.flags = DM_UC_FLAG_SEQ_ALIAS`: 设置标志。
- `.post_bind = i2c_post_bind`: 当一个新设备绑定到I2C类之后执行的方法。
- `.pre_probe = i2c_pre_probe`: 在探查 (probe) 新的 I2C 设备之前调用的方法。
- `.post_probe = i2c_post_probe`: 在探查新的 I2C 设备之后调用的方法。
#### 四、总结
U-Boot 中的 I2C 驱动模型通过配置 `.config` 文件来使能并选择特定的I2C控制器。这种灵活的方式支持多种类型的 I2C 控制器,而 `i2c-uclass.c` 定义了总线类框架,具体实现则位于像 `designware_i2c.c` 或 `fsl_i2c.c` 这样的文件中。通过这种方式设计的模块化结构不仅使得 U-Boot 更加灵活也方便维护和扩展。
U-Boot 中的 I2C 驱动模型利用了可配置选项及模块化的代码架构,为支持不同类型的I2C控制器提供了一个坚实的基础。这对于在不同的硬件平台上开发与维护嵌入式系统来说非常重要。
全部评论 (0)


