首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在linux内核树中,主发送/接收的i2c协议是如何实现的,在哪里实现?

在linux内核树中,主发送/接收的i2c协议是如何实现的,在哪里实现?
EN

Stack Overflow用户
提问于 2019-01-14 19:43:41
回答 1查看 86关注 0票数 0

为这样一个通用的标题道歉,但没有比这更好的了。

我正在尝试理解在drivers/i2c/中的哪里是按照协议实现的发送开始、地址、数据、停止位序列的协议序列。我想在驱动程序代码中验证发送/接收协议,这就是这里的所有目标。

我使用Hikey620作为参考,它有DesignWare的I2C控制器。下面是我可以看到的注册码(elixir):

代码语言:javascript
复制
static const struct i2c_algorithm i2c_dw_algo = {
     .master_xfer = i2c_dw_xfer,
     .functionality = i2c_dw_func,
};

如果我递归地跟踪i2c_dw_xfer函数,我能看到的最后一个调用是readl_relaxedwritel_relaxed in i2c_dw_xfer_init() (elixir)。

除此之外,就是所有的组装。这些readl/writel是实际的开始/数据/停止字节序列吗?还是我的理解完全错了?

在这种情况下,请帮助我并指出正确的流程。如果我得到的是正确的,有没有一些更简单的控制器代码,它有一个更干净的实现,可以作为参考。

EN

回答 1

Stack Overflow用户

发布于 2019-01-16 14:57:02

协议本身不是驱动程序代码的一部分。dw_{ readl/writel }函数通过调用readl/writel执行的操作是写入相关SoC的I2C外设的寄存器。SoC上的I2C控制器的工作是生成正确的I2C信令。通过查看数据表,您可以看到类似DW_IC_CON的内容是I2C外设存储器映射中的寄存器偏移量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54180876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档