Linux I2C framework(1)_概述

转载地址:http://www.wowotech.net/comm/i2c_overview.html
1. 前言

I2C协议是嵌入式系统中广泛使用的一类通信协议,主要用于CPU和各种外设之间的低速数据通信。Linux kernel使用I2C framework抽象、管理相应的资源,并以各种形式,向各类使用者提供API。另外,作为总线(bus)的一种,I2C framework的实现体现了linux设备模型的精髓,值得研究与学习。这就是攥写“Linux I2C framework”系列文章的缘由和目的。

按照分析各类framework的老规矩,蜗蜗会从4个角度分4篇文章介绍I2C framework:

1)Linux I2C framework的整体介绍,包括基础知识、软件框架、API汇整等。就是本文。

2)从Provider的角度,介绍怎么借助I2C framework管理I2C相关的SOC资源。换句话说,就是怎么编写一个I2C driver。具体可参考“Linux I2C framework(2)_I2C provider”。

3)从Consumer的角度,介绍I2C framework为使用者提供了哪些功能、哪些API,以及怎样利用I2C framework编写程序。具体可参考“Linux I2C framework(3)_I2C consumer”。

4)从内部实现的角度,分析I2C framework的实现逻辑。具体可参考“Linux I2C framework(4)_I2C core”。

2. I2C的总线拓扑

I2C是总线的一种,其硬件拓扑如下图所示:I2C_hw_topology

图片1 I2C H/W topology

关于I2C的硬件拓扑,相信驱动工程师都很熟悉,这里就不过多描述了,但有一点要强调:

我们都知道,I2C协议是主从式的,包括master(主设备)和slave(从设备),而Linux kernel的I2C framework只抽象了I2C master有关的功能,换句话说,linux kernel有这样的一个假设:

所有运行linux kernel的设备,在I2C总线里面,都是I2C master(至于I2C slave,抱歉,kernel不管!)。

正是基于这样的假设,linux I2C framework才成为当前的样子,具体可参考本文后续的描述。

linux kernel I2C framework使用如下的软件拓扑抽象I2C硬件(我们可以一起领会一下其中的“设备模型”思想):

I2C_sw_topology

图片2 I2C S/W topology

1)platform bus(/sys/bus/platform)是驱动工程师常见的bus,用于挂载和CPU通过系统总线连接的各类外设。在I2C framework中,I2C控制器直接从属于platform bus,我们在linux kernel中常说的I2C driver,都是指I2C controller driver,都是以platform driver的形式存在,当然,对应的控制器是platform device。

2)与此同时,kernel抽象出I2C bus(/sys/bus/i2c),用于挂载和I2C controller通过I2C总线连接的各个I2C slave device。

3)比较特殊的地方是,I2C core使用一个虚拟实体----I2C adapter,抽象I2C controller有关的功能(主要是数据的收发),I2C adapter也挂载在I2C bus上。

4)I2C adapter和I2C slave device都挂载在I2C bus上,就可以方便的进行Master(I2C adapter)和Slave之间的匹配操作,并通过I2C core提供的统一接口,访问I2C salve device,进行数据的收发。

5)以上各实体在sysfs中的位置,已经在“图片2”中通过红色字体标注,大家可自行理解。

3. 软件框架

基于第2章所述的总线拓扑,Linux kernel抽象出如下的软件框架:

I2C_software_architecture

图片3 I2C framework software architecture

1)I2C framework的最终目标,是提供一种“访问I2C slave devices”的方法。由于这些slave devices由I2C controller控制,因而主要由I2C controller驱动实现这一目标。

2)经过I2C framework的抽象,consumer可以不用关心I2C总线的技术细节,只需要通过简单的API,就可以与slave devices进行数据交互。正常情况下,consumer是位于内核态的其它driver(如HDMI driver、touch screen driver等等)。与此同时,I2C framework也通过字符设备向用户空间提供类似的接口,用户空间程序可以通过该接口访问slave devices。

3)在I2C framework内部,有I2C core、I2C busses、I2C algos和I2C muxes四个模块。

4)I2C core使用I2C adapter和I2C algorithm两个子模块抽象I2C controller的功能,使用I2C client和I2C driver抽象I2C slave device的功能(对应设备模型中的device和device driver)。另外,基于I2C协议,通过smbus模块实现SMBus(System Management Bus,系统管理总线)的功能。

5)I2C busses是各个I2C controller drivers的集合,位于drivers/i2c/busses/目录下,驱动工程师常说的“I2C driver”就是指它们。

6)I2C algos包含了一些通用的I2C algorithm,所谓的algorithm,是指I2C协议包的生成方法,进而组合成I2C的read/write指令,一般情况下,都是由硬件实现,不需要特别关注该目录。

7)I2C muxes用于实现I2C bus的多路复用功能,属于奇葩的冷门功能,暂不过多介绍。

4. I2C有关的软件流程总结
TODO(会在后续文章完成之后再回来补充)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Python中下载framework_pb2文件,你需要先确定你使用的是哪个框架。framework_pb2文件通常是Protocol Buffers(简称protobuf)生成的文件,该文件定义了数据结构和序列化/反序列化方法。 如果你要下载的是TensorFlow框架的framework_pb2文件,首先确保你已经安装了TensorFlow。然后按照以下步骤操作: 1. 打开终端或命令提示符,进入你的Python环境。 2. 使用以下命令安装TensorFlow: ```shell pip install tensorflow ``` 4. 确保安装完成后,启动Python解释器。 5. 导入`framework_pb2`模块: ```python from tensorflow.core.framework import framework_pb2 ``` 如果你要下载的是其他框架的framework_pb2文件,如gRPC的protobuf文件,可以参考以下步骤: 1. 打开终端或命令提示符,进入你的Python环境。 2. 使用以下命令安装grpcio-tools: ```shell pip install grpcio-tools ``` 3. 在你的Python项目目录中创建一个名为`proto`的文件夹。 4. 将你的.proto文件复制到`proto`文件夹中。 5. 使用以下命令生成framework_pb2.py文件: ```shell python -m grpc_tools.protoc -I proto --python_out=proto --grpc_python_out=proto proto/your_proto_file.proto ``` 这将根据你的.proto文件生成对应的framework_pb2.py文件。 无论你下载哪个框架的framework_pb2文件,确保你按照上述步骤操作,并根据你的具体情况进行调整。 ### 回答2: 在Python中下载`framework_pb2`可以通过以下步骤完成: 首先,确保你已经安装了Python,并且具有良好的互联网连接。 接下来,打开终端或命令提示符,使用以下命令安装`protobuf`库(如果你还没有安装它的话): ``` pip install protobuf ``` 这将在你的Python环境中安装`protobuf`库。 然后,你需要找到包含`framework_pb2`的protobuf文件(通常是一个`.proto`文件),然后将其下载到你的项目中。 你可以通过以下两种方式之一来获取这个文件: 1. 自己编写`.proto`文件:根据你的需求,创建一个名为`framework_pb2.proto`的文本文件,并根据protobuf的语法编写其中的内容。这个文件会描述一种数据结构,包括消息类型、字段和其他相关信息。 2. 下载`.proto`文件:如果你遇到了一个已经存在的`.proto`文件,你可以直接下载它。通常,GitHub仓库是一个常见的来源,你可以在那里找到很多`.proto`文件。找到你想要的文件,并将它下载到你的项目文件夹中。 下载完成后,通过命令行进入到该文件所在的目录,并使用以下命令将`.proto`文件转换为Python文件: ``` protoc -I=. --python_out=. framework_pb2.proto ``` 这个命令将会为你的`.proto`文件生成一个名为`framework_pb2.py`的Python文件,其中包含了对应的Python类和方法。 最后,你就可以在你自己的Python代码中使用`framework_pb2`了。确保将其导入到你的项目中,并根据需要使用其中的类和函数。 希望这对你有帮助! ### 回答3: 在Python中下载framework_pb2,需要进行以下步骤: 1. 打开终端或命令提示符,进入Python的安装目录。 2. 使用pip工具进行安装,pip是Python的包管理器,用于添加、删除和管理Python包。 3. 输入以下命令并按下回车键,等待安装完成: ``` pip install framework_pb2 ``` 4. 如果安装成功,终端会显示安装的版本号和其他相关信息。 如果使用Anaconda环境,操作步骤与上述类似,只需将pip命令替换为conda命令。 需要注意的是,framework_pb2是一个自定义的protobuf消息定义文件,而非标准的Python包。在下载之前,你需要明确所在的protobuf项目、仓库或源码地址,并根据该项目的下载方式进行操作。以上步骤仅适用于标准的Python包或通过pip安装的第三方库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值