I2C知识大全系列四 —— I2C驱动之Linux下的I2C

这篇具有很好参考价值的文章主要介绍了I2C知识大全系列四 —— I2C驱动之Linux下的I2C。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux的I2C体系结构

Linux系统定义了I2C驱动体系结构。在Linux系统中,I2C驱动由三部分组成,即I2C核心I2C总线驱动I2C设备驱动。这三部分相互协作,形成了非常通用、可适应性很强的I2C框架。

I2C知识大全系列四 —— I2C驱动之Linux下的I2C

I2C核心

I2C核心提供了I2C总线驱动设备驱动注册注销方法I2C通信方法(即“Algorithm”)上层的、与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等。

I2C总线驱动

I2C总线驱动是对I2C硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至可以直接集成在CPU内部。

I2C总线驱动主要包含了I2C适配器数据结构i2c_adapterI2C适配器的Algorithm数据结构i2c_algorithm控制I2C适配器产生通道信号的函数

经由I2C总线驱动的代码,可以控制I2C适配器以主控方式产生开始位停止位读写周期,以及以从设备方式被读写产生ACK等。

I2C设备驱动

I2C设备驱动(也称为客户驱动)是对I2C硬件体系结构中设备端的实现。设备一般挂接在受CPU控制的I2C适配器上,通过I2C适配器与CPU交换数据

I2C设备驱动主要包含了数据结构i2c_driveri2c_client,需要根据具体设备实现其中的成员函数。

Linux内核中,所有的I2C设备都在sysfs文件系统中显示,存于/sys/bus/i2c/目录,以适配器地址和芯片地址的形式列出。例如:

$ tree /sys/bus/i2c/

|—— devices

|         |—— 0-0058 -> ../../../devices/platform/PHYT0003:00/i2c-0/0-0058

|         |—— 0-0059 -> ../../../devices/platform/PHYT0003:00/i2c-0/0-0059

|         |—— 0-005a -> ../../../devices/platform/PHYT0003:00/i2c-0/0-005a

|         |—— i2c-0 -> ../../../devices/platform/PHYT0003:00/i2c-0

|         |—— i2c-1 -> ../../../devices/platform/PHYT0003:01/i2c-1

……

|—— drivers

|         |—— 88PM860x

|         |         |—— bind

|         |         |—— uevent

|         |         |—— unbind

|         |—— ab3100

|         |         |—— uevent

|         |—— at24

|         |         |—— bind

|         |         |—— i2c-INT0002:00 -> ../../../../devices/platform/PHYT0003:00/i2c-0/i2c-INT0002:00

|         |         |—— module -> ../../../../module/at24

|         |         |—— uevent

|         |         |—— unbind

……

|—— drivers_autoprobe

|—— drivers_probe

|—— uevent

I2C内核源码

Linux内核源代码中的drivers目录下有一个i2c目录,在i2c目录下又包含如下文件和文件夹:

(1)i2c-core.c

实现了I2C核心功能。

注:i2c-core.c2017531日被拆分成了i2c-core-base.ci2c-core-slave.ci2c-core-smbus.ci2c-core-of.ci2c-core-acpi.c,出于易于维护考虑。

(2)i2c-dev.c

实现了I2C适配器设备文件的功能,每一个I2C适配器都被分配一个设备。通过适配器访问设备文件时的主设备号都为89,次设备号为0~255。应用程序通过“i2c-%d”(i2c-0i2c-1……)文件名并使用文件操作接口openwritereadioctlclose等来访问这个设备。

i2c-dev.c并不是针对特定的设备而设计的,只是提供了通用的readwriteioctl等接口,应用层可以借用这些接口访问挂接在适配器上的I2C存储空间或寄存器,并控制I2C设备的工作方式。

(3)busses文件夹

这个文件包含了一些I2C主机控制器的驱动,如i2c-tegra.ci2c-omap.ci2c-versatile.ci2c-s3c2410.c等。

(4)algos文件夹

实现了一些I2C总线适配器的通信方法。文章来源地址https://www.toymoban.com/news/detail-464727.html

到了这里,关于I2C知识大全系列四 —— I2C驱动之Linux下的I2C的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux I2C驱动分析2 - 通过设备树添加设备

    一. I2C通过设备树添加设备         通过设备可以向I2C总线添加I2C设备,设备树举例如下:         设备树中在I2C总线下添加了一个oled0.98设备,oled在I2C总线中的地址为0x3c。可以在/sys/bus/platform下看到这个设备。 二. I2C驱动代码 三. I2C应用代码         以上的代码功能是首

    2024年02月14日
    浏览(41)
  • linux-2.6.22.6内核i2c驱动框架源码分析

    i2c是常见的通信协议,协议比较简单,只有数据和时钟两条线(SDA和SCL),i2c的通信分为主机和从机,主机一般占主导地位,从机可以有多个。 i2c通信的数据格式为(SDA上的数据):开始的7位里面指定了设备地址(因为有多个从机),第8位是读或写信号,表示此次传输是读还

    2024年02月11日
    浏览(47)
  • linux i2c驱动开发之最简单入门:设备树与驱动的匹配

    1在设备树中声明我们的模拟I2C设备: i2c的设备加入是必须放在某个i2c的总线下面的,我们这里是放在 i2c7下面。 可以直接在设备树搜索i2c7,然后把status 修改为okay,然后再加入设备信息. 这里我们指定和驱动匹配的字符串是 myi2c-dev,在bus segment 上分配的地址是 0x70 。 当然这

    2024年02月16日
    浏览(39)
  • Linux设备驱动开发学习笔记(等待队列,锁,字符驱动程序,设备树,i2C...)

    container_of函数可以通过结构体的成员变量检索出整个结构体 函数原型: 内核开发者只实现了循环双链表,因为这个结构能够实现FIFO和LIFO,并且内核开发者要保持最少代码。 为了支持链表,代码中要添加的头文件是linux/list.h。内核中链表实现核心部分的数据结构 是struct li

    2024年01月22日
    浏览(46)
  • 详解AT24CXX驱动开发(linux platform tree - i2c应用)

    目录 概述 1 认识AT24Cxx 1.1 AT24CXX的特性 1.2 AT24CXX描述 1.2.1 引脚 1.2.2 容量描述 1.2.3 设备地址 1.3 操作时序 1.3.1 写单个字节时序 1.3.2 写page字节时序 1.3.3 读取当前数据时序 1.3.4 随机读取数据 1.3.5 连续读取多个数据 2 驱动开发 2.1 硬件接口 2.2 代码实现 2.2.1 查看设备信息 2.2.2 编写

    2024年02月22日
    浏览(38)
  • I2C总线驱动

    SOC芯片平台的外设分为: 一级外设:外设控制器集成在SOC芯片内部 二级外设:外设控制器由另一块芯片负责,通过一些通讯总线与SOC芯片相连 Inter-Integrated Circuit: 字面意思是用于“集成电路之间”的通信总线,简写:IIC(或者I2C) i2c传输的要点就是: 传输一个字节 后面必然

    2024年02月15日
    浏览(34)
  • 【IMX6ULL驱动开发学习】10.Linux I2C驱动实战:AT24C02驱动设计流程

    前情回顾:【IMX6ULL驱动开发学习】09.Linux之I2C框架简介和驱动程序模板_阿龙还在写代码的博客-CSDN博客 目录 一、修改设备树(设备树用来指定引脚资源) 二、编写驱动 2.1 i2c_drv_read 2.2 i2c_drv_write 2.3 完整驱动程序 三、上机测试 放在哪个I2C控制器下面 AT24C02的I2C设备地址(查

    2024年02月11日
    浏览(41)
  • 【驱动】I2C驱动分析(三)-关键数据类型

    i2c_bus_type 用于表示 I2C 总线类型。 bus_type 是 Linux 内核中用于表示总线类型的结构体,用于管理该类型总线上的设备。 .name : 用于指定总线类型的名称。在这里,总线类型的名称被设置为 “i2c”,表示 I2C 总线类型。 .match : 匹配设备与总线。 .probe : 用于在设备与总线匹配成功

    2024年01月19日
    浏览(40)
  • Hi3861 硬件 i2c 驱动 oled

    最近想用 3861 做个有意思的东西,记录一下开发过程。今天使用 3861 的硬件 i2c 驱动 oled。 硬件平台:Bearpi-Nano 软件SDK:润和sdk 我之前写过一篇基于 stm32cubemx 快速使用 iic 接口 oled 的过程,里面有现成的 oled 接口,我们只要直接拿过来替换掉底层接口就行。  STM32CubeMX驱动4脚

    2023年04月23日
    浏览(38)
  • TP驱动——I2C驱动,细节分析——dts设备树

    TP驱动程序,是指带屏幕设备的触屏功能调用的驱动程序。TP外设与主板之间的关系如下框图: 产品常用的屏幕单元为液晶显示屏幕,TP的触摸功能也是一同集成到一起的,通过控制芯片以及外围电路、i2c总线与主板进行通信。 TP驱动的功能逻辑: 当有触点发生时,TP芯片向主

    2024年02月04日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包