展开

关键词

I2C 线协议

1.I2C协议 2条双向串行线,一条数据线SDA,一条时钟线SCL。 SDA传输数据是大端传输,每次传输8bit,即一字节。 线上每个设备都有自己的一个addr,共7个bit,广播地址全0. 系统中可能有多个同种芯片,为此addr分为固定部分和可编程部份,细节视芯片而定,看datasheet。 用来设置I2C线频率 2.3 I2CCR 控制寄存器 MEN: Module Enable. 置1时,I2C模块使能 MIEN:Module Interrupt Enable. PPC-Linux中I2C的实现 内核代码(linux-2.6.24)中,通过I2C线存取寄存器的函数都在文件drivers/i2c/busses/i2c-mpc.c中 最重要的函数是mpc_xfer bus up to 1s to become not busy */ //一直读I2CSR[MBB],等待I2C线空闲下来 while (readb(i2c->base

69120

I2C线架构 之 I2C核心

引言 在之前的 「《I2C线架构 之 设备驱动》」 和 「《I2C线架构 之 线驱动》」 中一再提到i2c核心,本篇文章就结一下i2c核心的主要功能。 分层思想 在之前的篇章中,大致能够了解i2c核心功能主要是为i2c设备驱动和i2c线驱动的注册操作提供API。这种设计的好处在于实现:高内聚,低耦合。 i2c线i2c设备相互独立,互无联系;两者都是通过调用i2c核心提供的API实现匹配。即两者只与i2c核心有联系,这样也就可以实现一个固定i2c线驱动可以和任一符合条件的设备驱动匹配。 ---- 「i2c线驱动:」 i2c适配器注册 在线篇是利用 i2c_add_numbered_adapter注册到内核中: i2c_add_numbered_adapter --> __i2c_add_numbered_adapter 「结:」 线驱动最终会调用i2c-core接口i2c_register_adapter,生成i2c_client设备,并且绑定线号相同的adapter。

33721
  • 广告
    关闭

    什么是世界上最好的编程语言?丨云托管征文活动

    代金券、腾讯视频VIP、QQ音乐VIP、QB、公仔等奖励等你来拿!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    I2C线架构 之 线驱动

    架构设计 在Linux设计中,将I2C代码框架分为三个部分:I2C线I2C核心、I2C驱动。 「I2C线驱动(i2c adapter):」 根据平台定制的i2c驱动,其中包含i2c传输的算法设计。 I2C设备驱动对上和用户应用程序打交道,对下和I2C核心对接。 ? 本篇主要对IIC线驱动的结。 i2c线结构体 Linux在分层中,必不可少的将每一层模块封装成一个结构体,然后将结构体作为一个与外接交互的桥梁。 i2c线驱动,由系统或者厂家实现,开机就会自动注册。

    38930

    一文搞懂I2C线通信

    结来说,I2C线具有以下特点: 只需要SDA、SCL两条线; 没有严格的波特率要求; 所有组件之间都存在简单的主/从关系,连接到线的每个设备均可通过唯一地址进行软件寻址; I2C是真正的多主设备线 2、物理特性 I2C 线使用连接设备的 "SDA"( 串行数据线)和"SCL"( 串行时钟线 ) 来传送信息。 标准的I2C时序如下图所示: 3.1、开始和停止条件 当线上的主机都不驱动线线进入空闲状态, SCL 和 SDA 都为高电平。 I2C 线上应答信号 3.5、线仲裁 I2C 线上的仲裁分为两个部分: SCL 线上的同步和 SDA 线上的仲裁。 通过这种原理可以保证 I2C 线在多个主机企图控制线时保证数据的不丢失。

    6230

    I2C线架构 之 设备驱动

    添加硬件信息设备树(设备树) 首先观察硬件i2c设备挂载到哪个i2c线上,然后在设备树文件找到该线的设备节点,在节点下创建子节点描述i2c设备硬件信息即可。 i2c_transfer三个参数意义 : (1) client->adapter: 该i2c设备连接的i2c线适配器; (2) msg:需要发送的数据; (3) 1:需要发送的msg个数。 通过以上读写的实现,与上一篇文章 《I2C线架构 之 I2C协议》 读写时序是对应的: (1) 写操作只需要一个msg结构体: 起始位 + 写操作(msg[0]) + 停止位。 ("%s:%d: Entry %s \r\n", __FILE__, __LINE__, __func__); i2c_del_driver(&ap3216c_device_driver); } 结 通读文章大致了解,会发现本篇i2c设备驱动与虚拟线platform架构类似。不同的是platform是软件实现的虚拟线,在soc上并不存在;而i2c线,在soc上是实际存在的。

    46270

    RT-Thread I2C线设备学习笔记

    前面我们学习了RTT的ADC设备的使用,文章链接: RT-Thread ADC设备学习笔记 I2C的基本原理之前在公众号就有相应的文章了,很早之前发的,接下来我们来学习RT-Thread I2C线设备的使用 如何看懂时序图(以SPI/I2C为例) 浅谈线通信机制(通信基础+串口+I2C) 我们接下来将基于小熊派开发平台进行实践。 本节,我们将会学习到RT-Thread I2C线设备的基本使用。 接下来,我们将基于RT-Thread Studio来构建。 I2C设备驱动使用起来非常简单,就两个接口,分别是: rt_device_find rt_i2c_transfer 接口1:rt_device_find 查找 I2C 线设备 rt_device_t 线设备,获取I2C线设备句柄 */ i2c_bus = (struct rt_i2c_bus_device*) rt_device_find(BH1750_DRI_NAME); if

    64820

    万变不离其宗之I2C线要点

    简单的 2 线串行 I2C 线最小化互连,节省 PCB 布板走线空间; 完全集成的 I2C 线协议消除了地址解码器。 I2C 线的多主控能力允许终端用户设备通过外部连接到装配线进行快速测试和校准。 标准支持广泛,大量无铅封装 I2C 线兼容集成芯片进一步降低了空间需求。 线锁死,是 I2C 线系统常踩的坑,有哪些原因会导致锁死呢?程序不健壮,I2C 的波形不满足 I2C 规格书要求,或者在外加干扰情况下导致波形被干扰。 编程策略 硬件 I2C 控制器:要实现 I2C 线,如果使用单片机/DSP/SOC 内置了 I2C 控制器,就其本质就是抽象了 I2C 线的各种事件以寄存器进行控制,最为常见的方式就是将线事件抽象为异步中断事件 另外需要注意的是,I2C 线锁死情况处理。 结一下 I2C 线是一个比较复杂的芯片间线系统,你或许会用。但是如果不注意标准的很多细节,你可能无法用好!

    24760

    详述I2C线协议、时序,入门不再是难事

    EEPROM存储器系统架构图 今天笔者就和大家聊一聊I2C线: 位传输 I2C线是由飞利浦(Philips)公司开发的一种双向二线制同步串行线,实现有效的IC间的控制,它只需要两根线(SDA和SCL I2C线数据传输 丛机地址 在I2C线系统中,每个设备都有它的固定地址,一般由芯片的A0,A1和A2决定。丛机地址字节由七位地址位(D7-D1位)和一位方向位(为D0位)组成。 EEPROM的器件地址 读写过程 1.写数据过程 1.主机发送I2C线停止信号,防止线忙写数据失败 2.主机发送I2C线复位信号,确保写数据之前线处于空闲状态 3.主机发送I2C线开始信号 .主机接收到ACK的应答信号后,发送2IC线停止信号,确保线处于空闲状态 2.读数据过程 1.主机发送I2C线停止信号,防止线忙写数据失败 2.主机发送I2C线复位信号,确保读数据之前线处于空闲状态 ACK应答信号 6.主机接收到ACK的应答信号后,发送I2C线停止信号,确保线处于空闲状态 ?

    27020

    H7-TOOL的LUA小程序教程第4期:I2C线开发(2022-01-13)

    脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用,支持在线调试运行 ,支持离线运行。 可以结合这个贴下学习: H7-TOOL示波器捕获I2C波形操作说明(2021-12-05) https://www.armbbs.cn/forum.php? mod=viewthread&tid=109953 I2C线基础知识: I2C的Start启动信号和Stop停止信号波形效果: ACK应答: NACK无应答: 完整效果: LUA 举例说明: 接线方式: 以操作光照传感器BH1750为例,向地址写入数据1个单字节数据就是: -------------I2C从机地址 -----------------------------

    8020

    SPI、I2C、UART、I2S、GPIO、SDIO、CAN线

    I2C (Inter-Integrated Circuit):由PHILIPS公司开发的两线式串行线,用于连接微控制器及其外围设备。 I2C线用两条线(SDA和SCL)在线和装置之间传递信息,在微控制器和外部设备之间进行串行通讯或在主设备和从设备之间的双向数据传送。 I2C是OD输出的,大部分I2C都是2线的(时钟和数据),一般用来传输控制信号。 I2C是多主控线,所以任何一个设备都能像主控器一样工作,并控制线线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在同一个I2C线上共存。 I2C是多主控线,所以任何一个设备都能像主控器一样工作,并控制线线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。

    44710

    Linux的I2C驱动框架分析

    I2C线、USB线、PCI线等等。以I2C线为例,在同一组I2C线上连接着不同的I2C设备。 设备 设备代表真实的、具体的物理器件,在软件上用器件的独特的参数属性来代表该器件。 线的作用就是在软件层面上对设备和驱动进行管理,设备要让系统感知到自己的存在,所以需要向线去注册设备,驱动同样也要向线去注册。对于线,有I2C线,Platform线等等。 (2)I2C线驱动:I2C线驱动是对I2C硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至可以直接集成在CPU内部。 到这里,一个I2C完整的传输流程就完成了。 5.结 ---- 对于I2C完整的传输协议,最重要的是弄清楚线驱动程序的框架,因为I2C也是属于线框架。 对于I2C线设备框架的模型,可以用下图来说明: ? 也就是device与driver同时向i2c线上注册。

    1.3K10

    树莓派I2C接口技术及Python SMBus串行I2C EEPROM应用编程

    参考链接: Python中的短路技术 文章目录 一、I2C接口技术 1.I2C线系统组成 2.I2C线的状态及信号 3.I2C线基本操作 4.启动和停止条件 5.I2C线数据传输格式 二、I2C I2C线系统组成 I2C线协议包含两层协议:物理层和数据链路层。 如果产生重复启动条件Sr而不产生停止条件P,线将一直处于忙状态。 5. I2C线数据传输格式 I2C线数据传输格式见图3所示。 图3 I2C线数据传输格式 二、I2C线上拉电阻的估算与选取 由于I2C设备的SCL、SDA线是漏极开路的,因此在前面的图1中, I2C线的SCL、SDA引脚必须外接上拉电阻Rp。 需要强调的是,是否在I2C线外接上拉电阻,要看所使用的开发板是否自带I2C线上拉电阻;若开发板没有提供I2C线上拉电阻,则需按前面的I2C线上拉电阻估算方法外接两个上拉电阻Rp。

    30420

    Linux应用开发【第十二章】I2C编程应用开发

    3) 特性3:多主机 ​ I2C是真正的多主机线I2C设备可以在通讯过程转变成主机。如果两个或更多的主机同时请求线,可以通过冲突检测和仲裁防止线数据被破坏。 I2C线上。 ​ 该功能的常用方式: ​ 第一,先通过i2cdetect -l查看当前系统中的I2C线情况: ​ 第二,若线上挂载I2C从设备,可通过i2cdetect扫描某个I2C线上的所有设备。 这也就是说,如果有设备不释放线,一直把线的电平拉低,那么整个I2C线将会出现暂停挂死的状态,将无法按照I2C协议进行正常通信。 ​ 如果负责I2C线主机cpu的I2C控制器出现上述长时间拉低I2C线的电平,理论上我们可以通过调试代码找出I2C线死机的原因,并修改代码重新初始化该I2C控制器来复位它,让其重新进行I2C通信。

    71830

    20.Linux-IIC驱动(详解)

    2)busses文件夹   里面保存I2C线驱动相关的文件,比如i2c-omap.c、 i2c-versatile.c、 i2c-s3c2410.c等。    4) i2c-core.c   这个文件实现了I2C核心的功能(I2C线的初始化、注册和适配器添加和注销等相关工作)以及/proc/bus/i2c*接口。    应用层可以借用这些接口访问挂接在适配器上的I2C设备的存储空间或寄存器, 并控制I2C设备的工作方式   显然,它和前几次驱动类似, I2C也分为线驱动和设备驱动,线就是协议相关的,它知道如何收发数据 线对应一个编号,下文中称为I2C线号.这个线号的PCI中的线号不同.它和硬件无关,只是软件上便于区分而已.    对于i2c_add_adapter()而言,它使用的是动态线号,即由系统给其分析一个线号,而i2c_add_numbered_adapter()则是自己指定线号,如果这个线号非法或者是被占用,就会注册失败

    20020

    手把手教你使用 i2c-tools

    i2c-tools 简介 在嵌入式开发中,有时候需要确认硬件是否正常连接,设备是否正常工作,设备的地址是多少等等,这里我们就需要使用一个用于测试 I2C 线的工具:i2c-tools。 i2cdetect:用于扫描 i2c 线上的设备,并显示地址 i2cset:设置i2c设备某个寄存器的值 i2cget:读取i2c设备某个寄存器的值 i2cdump:读取某个i2c设备所有寄存器的值 如上图显示,在i2c0线上,有三个器件,设备地址分别是:0x1b、0x40、0x41 ./i2cdetect -F i2cbus 查询线的功能 . /i2cdetect -l 检测当前系统有几组i2c线 i2cset:向i2c设备某个寄存器写入值 Usage: i2cset [-f] [-y] [-m MASK] [-r] [-a] I2CBUS 线及其设备地址 ls /sys/bus/i2c/devices/ 可以在这里查看实际的设备,然后对比 i2c-tools 扫描出来的对不对。

    7510

    优秀的 VerilogFPGA开源项目介绍(十三)- I2C

    优秀的 Verilog/FPGA开源项目介绍(十三)- I2C 0 I2C介绍 权威官网 ❝https://www.i2c-bus.org/ I2C 线规范是由飞利浦半导体编写的。 这家公司后来成为 NXP Semiconductors,现在它是 I2C 线规范的维护相关者。 不幸的是,最近的 I²C 线规范,NXP 文档版本 6.0,2014 年 4 月 4 日不再在 NXP 站点上公开。 Makefiles /cores/ 核心库 /software/ 软件和数据文件 I2C相关的开源项目很多很多,很多大佬独立写个I2C线应该是很容易,头两个项目是使用最常见的项目,无需过多介绍 (二)-串行线中的先进设计理念及SerDes/PMA介绍 串行线技术(一)-串行线结构(以PCIe为例) 优秀的 Verilog/FPGA开源项目介绍(十二)- 玩FPGA不乏味 使用云台相机进行实时对象跟踪

    19120

    I + I2C = I3C:这个附加的“I”是什么?

    MIPI 联盟2018年发布了 I3C(发音为“eye-three-see”)线规范的第 1 版,这应该是对长期存在的 I2C 和 SPI 协议的改进。 从上图中我们可以将特性具体一下: 1、I3C线可以支持multi-master即多主设备 2、I3C线与传统的I2C设备仍然是兼容的 3、可以支持软中断 4、相比较于I2C线的功耗更低 5、速度更快 动态寻址 I2C 使用静态寻址。这里的问题之一是,对于使用 I2C 线的产品,供应商可能使用与另一供应商相同的地址,从而导致集成过程中出现问题。 I3C 通过为 I3C 线上的设备提供寻址解决了这个问题。 I2C 与 I3C 协议:差异和相似之处 I2C线 I2C(内部集成电路)是一种板载通信协议,非常适合短距离和低带宽。 I2C 与 I3C:区别在哪里? 移动设备(智能手机和物联网设备)的节能和节省空间设计。 双极接口,它是I2C 标准的超集。较旧的 I2C 从设备可以连接到较新的线

    20420

    Linux内核i2c-tools命令

    i2c-tools的相关命令常用于linux系统读写i2c设备寄存器的在线调试。  bus name   If provided, FIRST and LAST limit the probing range. 2、用法 ## 列出i2c线 root@linaro-alip:/#  I2C adapter ## 列出某个i2c线上的i2c设备 root@linaro-alip:/# i2cdetect -y 0      0  1  2  3  4  5  6  7  8  9    block)     c (consecutive byte)     Append p for SMBus PEC 2、用法 ## 显示I2C 0号线上0x1b设备的寄存器值。 向i2c 4号线0x38设备的0x3a01寄存器写0x10,w3:表示寄存器0x3a01和写入值0x10的长度为3字节 i2ctransfer -y -f 4 w3@0x38 0x3a 0x01 0x10

    17560

    Linux驱动开发的IIC设备驱动的投机取巧

    i2c线驱动。 投机取巧的I2C驱动 I2C设备驱动说明 投机取巧的I2C驱动是参考I2C线驱动代码实现的。 投机取巧的I2C驱动不需要设备树,这也让一些不熟悉设备树的小伙伴能编写一个设备驱动。 投机取巧的I2C驱动精简,方便理解。 分析I2C线驱动说明 I2C线驱动的代码在linux的源码中--i2c-dev.c中。 i2cdev_ioctl_rdwr()接口是i2c线驱动对从设备操作的进一步封装,我们进一步看一下这个函数。 return res; } 投机取巧的I2C驱动写法 通过i2c线驱动的源码分析,实际我们的设备驱动可以通过这种模仿这个线驱动来写。

    4320

    相关产品

    • 事件总线

      事件总线

      腾讯云事件总线(EB)是一款安全,稳定,高效的无服务器事件管理平台,支持腾讯云服务、自定义应用、SaaS应用以标准化、中心化的方式接入,帮助您轻松实现无服务器事件驱动架构。

    相关资讯

    热门标签

    扫码关注云+社区

    领取腾讯云代金券