首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏开源519

    I2C总线架构 之 I2C核心

    引言 在之前的 「《I2C总线架构 之 设备驱动》」 和 「《I2C总线架构 之 总线驱动》」 中一再提到i2c核心,本篇文章就总结一下i2c核心的主要功能。 分层思想 在之前的篇章中,大致能够了解i2c核心功能主要是为i2c设备驱动和i2c总线驱动的注册操作提供API。这种设计的好处在于实现:高内聚,低耦合。 i2c总线与i2c设备相互独立,互无联系;两者都是通过调用i2c核心提供的API实现匹配。即两者只与i2c核心有联系,这样也就可以实现一个固定i2c总线驱动可以和任一符合条件的设备驱动匹配。 具体API 这里对i2c总线驱动和i2c设备驱动进行分析,关键在于分析i2c_client与i2c_driver如何实现匹配的。 「传输数据:i2c_transfer」 此函数是设备驱动文件用来与i2c器件传输i2c协议数据的,封装好的i2c数据传输API。

    3.2K21发布于 2020-09-03
  • 来自专栏全栈程序员必看

    I2C电平转换电路_i2c电平转换芯片

    发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169431.html原文链接:https://javaforall.cn

    1.1K10编辑于 2022-09-22
  • 来自专栏个人路线

    I2C 同步串行总线

    I2C 概述 I2C(Inter Integrated Circuit)集成电路间总线是由 Philips 公司开发的一种简单、双向二线制同步串行总线。I2C 以主从方式工作。 I2C 的通信方式为半双工,因为只有一根 SDA 线,所以在同一时间内只可以单向通信。 I2C 接口定义了完成 I2C 传输的通用方法集合,包括: I2C 控制器管理:打开或关闭 I2C 控制器; I2C 消息传输:通过消息传输结构体数组进行自定义传输 I2C 时序主要有四个元素组成:起始信号 I2C 操作流程如下: 初始化I2C 设置I2C 波特率 I2C 写操作 I2C 读操作 I2C 模块相关 API 接口名 描述 unsigned int IoTI2cInit(unsigned int (unsigned int id, unsigned int baudrate); 设置I2C波特率 I2C 接口调用举例如下: 代码功能:定义了 I2C 接口功能以及 I2C 相关参数,GPIO_

    1.2K30编辑于 2023-02-23
  • 来自专栏RainMark 的文章

    I2C 总线协议

    PowerPC的I2C实现 Mpc8560的CCSR中控制I2C的寄存器共有6个。 2.1 I2CADR 地址寄存器 CPU也可以是I2C的Slave,CPU的I2C地址有 I2CADR指定 2.2 I2CFDR 频率设置寄存器 The serial bit clock frequency 用来设置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 = i2c_get_adapdata(adap); mpc_i2c_start(i2c); // 设置I2CCR[MEN], 使能I2C module /* Allow

    1.9K20发布于 2019-09-10
  • 来自专栏linux驱动个人学习

    I2C通讯协议

    同时有多于一个主机尝试控制总线 但不破坏报文 仲裁 是一个在有多个主机同时尝试控制总线,但只允许其中一个控制总线并使报文不被破坏的过程 同步 两个或多个器件同步时钟信号的过程 2、硬件结构 每一个I2C 这就是时钟同步,它解决了I2C总线的速度同步问题。 I2C位传输 数据传输:SCL为高电平时,SDA线若保持稳定,那么SDA上是在传输数据bit; 若SDA发生跳变,则用来表示一个会话的开始或结束(后面讲) 数据改变:SCL为低电平时,SDA线才能改变传输的 I2C开始和结束信号 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。 ?   另外I2C的通信速率为100Kb,快速为400Kb

    1.8K60发布于 2018-03-07
  • 来自专栏全栈程序员必看

    i2c总线的通信协议(i2c通信协议原理)

    I2C最早是飞利浦在1982年开发设计并用于自己的芯片上,一开始只允许100kHz、7-bit标准地址。1992年,I2C的第一个公共规范发行,增加了400kHz的快速模式以及10-bit扩展地址。 I2C I2C最少只需要两根线,和异步串口类似,但可以支持多个slave设备。 和SPI不同的是,I2C可以支持mul-master系统,允许有多个master并且每个master都可以与所有的slaves通信(master之间不可通过I2C通信,并且每个master只能轮流使用I2C I2C的数据传输速率位于串口和SPI之间,大部分I2C设备支持100KHz和400KHz模式。使用I2C传输数据会有一些额外消耗:每发送8bits数据,就需要额外1bit的元数据(ACK或NACK)。 所以更完整的I2C数据传输时序图为: 10-bit地址空间: 上面讲到I2C支持10-bit的设备地址,此时的时序如下图所示: 在10-bit地址的I2C系统中,需要两个帧来传输

    2.6K10编辑于 2022-07-29
  • 来自专栏全栈程序员必看

    i2c接口可以接哪些器件_单片机i2c接口

    BASE Addr:7AF6000 c) IRQ:300 d) src clk:clk_gcc_blsp2_qup2_i2c_apps_clk 1、高通在lk阶段已经存在I2C 的初始化代码 路径:bootable/bootloader/lk/platform/msm_shard/i2c_qup.c 在初始化代码中qup_blsp_i2c_init为i2c接口函数,其中调用了两个重要函数 gpio_config_blsp_i2c和clock_config_blsp_i2c,分别用于i2c的gpio和时钟clock的设置,BLSP_QUP_IRQ这个宏用来给中断号赋值。 GPIO_NO_PULL, + GPIO_8MA, GPIO_DISABLE); + + /* configure I2C GPIO_NO_PULL, + GPIO_8MA, GPIO_DISABLE); + + /* configure I2C

    94770编辑于 2022-11-02
  • 来自专栏硬件工程师

    I2C误码了怎么处理

    我相信不少人有遇到I2C设备识别不到,或者概率性误码。 我相信大部分工程师的做法如下: 1.调整上拉电阻的大小,然后重新老化测试; 2.降低I2C速率,然后老化测试; 3.软件加入一定判断条件,将能剔除的误码剔除掉。 第二点,降低I2C速率可能影响使用体验,例如触摸屏应用;降低I2C速率并不能保证就OK。 第三点,软件并不能完全剔除掉误码。 所以此文章推荐硬件接入做I2C的信号测试。 所以我们应该先保证自己板上的I2C信号符合标准要求后,再去做其他排查或者规避措施。 测试表文件可以后台回复“硬件人-I2C测试表”获取。

    31200编辑于 2025-03-31
  • 来自专栏iot-me

    I2C通信协议

    简介 I2C通信协议(Inter-Integrated Circuit)是由Philips公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要使用USART、CAN等通信协议的外部收发设备,现在被广泛地用于系统内多个集成电路 (I2C)间的通信。 物理层 支持多主机从机,如下图总线上挂载了多个i2c设备,通过指定地址选择操作的设备。 当I2C设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。 (OD门可实现线与功能) 具有三种传输模式:标准模式传输速率为100kbit/s ,快速模式为 400kbit/s ,高速模式下可达 3.4Mbit/s,但目前大多I2C设备尚不支持高 速模式

    70420编辑于 2022-02-11
  • 来自专栏韦东山嵌入式

    Linux系统驱动之I2C协议

    git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git 视频观看 百问网驱动大全 I2C 硬件连接 I2C在硬件上的接法如下所示,主控芯片引出两条线SCL,SDA线,在一条I2C总线上可以接很多I2C设备,我们还会放一个上拉电阻(放一个上拉电阻的原因以后我们再说)。 2. 传输数据类比 怎么通过I2C传输数据,我们需要把数据从主设备发送到从设备上去,也需要把数据从从设备传送到主设备上去,数据涉及到双向传输。 下图:白色背景表示"主→从",灰色背景表示"从→主" 3.3 I2C信号 I2C协议中数据传输的单位是字节,也就是8位。但是要用到9个时钟:前面8个时钟用来传输8数据,第9个时钟用来传输回应信号。 当它就绪后,就可以不再驱动三极管,这是上拉电阻把SCL变为高电平,其他设备就可以继续使用I2C总线了。 对于IIC协议它只能规定怎么传输数据,数据是什么含义由从设备决定。

    3.5K20编辑于 2021-12-08
  • 来自专栏MPSOC

    zynqzynqmp PS I2C 通过 EMIO 互联

    一、 需求 偶尔需要在Demo班上进行I2C的测试,但是demo板子上没有对应的I2C设备,可以通过EMIO将2个PS I2C 互连起来。 _SCL_T_0 && I2C1_SCL_T_0; assign I2C1_SDA_I_0 = I2C0_SDA_T_0 && I2C1_SDA_T_0; 2.3 驱动代码 注意确认clk 是否一致;I2C 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 2.5 注意 I2C 控制器比较特殊,与SPI控制器不同, SDA_O 或者SCL_O是没有高电平输出的,在I2C里,SDA和SCL必须作为三态来使用,不能把SCL_O直接拉出来使用。

    61000编辑于 2025-05-29
  • 来自专栏硬件大熊

    UART、SPI、I2C协议异同点

    I2C、SPI、UART都是常见的低速板级通信协议,目前主流的SoC都内置了这些通讯协议的控制器,同样,各种传感器、Touch控制器、指纹模块、蓝牙模块、WIFI模块也都兼容这三种通信方式的一种或几种。 I2C是两根线,SDA(数据)和SCL(时钟),是一种半双工同步传输协议。 主机在发送开始信号之后,先发送7个比特的地址位和1个比特的读写位,每个从机有自己的I2C地址,当发现该条指令是发给自己的时候,拉低SDA线(即回复ACK信号),然后主机发送或接收数据,完成传输。 I2C最早是由PHILIPS提出来的,用于晶片间的传输,理论上可以连接128个从机(一般最多只接10个),原则上只能以PCB板上的铜箔线路来走,然而目前许多应用却是把I2C缆线化。 SPI由Motorola发明,与I2C相同可以接多个从机,只是每增加一个从机,线路至少要增加一条,其发送与接收可以同时进行,传输速度可达到几Mbps水平,比I2C快。

    78010编辑于 2022-06-23
  • 来自专栏混说Linux

    Linux I2C驱动入门,建议收藏!

    Linux内核将 I2C 驱动分为两部分: I2C 总线驱动, I2C总线驱动就是SOC的 I2C控制器驱动,也叫做 I2C适配器驱动。 I2C 设备驱动, I2C设备驱动就是针对具体的 I2C设备而编写的驱动。 I2C总线协议详解请参考:IIC通信协议,搞懂这篇就够了 I2C框架下的几个重要成员 1. I2C适配器 经过上面的介绍,知道有I2C驱动和I2C设备,我们需要通过I2C驱动去和I2C设备通讯,这其中就需要一个I2C设配器,I2C设配器对应的就是SOC上的I2C控制器。 小结 I2C驱动有4个重要的东西:I2C总线、I2C驱动、I2C设备、I2C设备器。 I2C总线:维护着两个链表(I2C驱动、I2C设备),管理I2C设备和I2C驱动的匹配和删除等。 I2C驱动:对应的就是I2C设备的驱动程序。 I2C设备:是具体硬件设备的一个抽象。 I2C适配器:用于I2C驱动和I2C设备间的通用,是SOC上I2C控制器的一个抽象。

    4K20编辑于 2022-07-14
  • 来自专栏全栈程序员必看

    Qcom 平台 LK 阶段配置 I2C

    LK I2C 函数接口… 5 2.1 qup irq 中断号赋值… 6 2.2 qup base addr 赋值… 6 2.3 blsp6 gpio 初始化… 7 2.4 blsp6 时钟源的配置… 9 总结… 11 前言 本文着重介绍,如何在qcom 平台的LK 阶段配置和使用I2C。 硬件平台:msm8909 软件平台:Android5.0、Android8.0 I2C设备:ADV7533 参考博客和文档: 80-np408-2x_c_msm8909_msm8209_msm8208_ LK I2C 函数接口 根据qcom文档: 80-nu767-1_h_linux_bam_low-speed_peripherals_configuration_and_debug_guide.pdf I2C 读函数demo。

    1.2K50编辑于 2022-11-02
  • 来自专栏txp玩Linux

    camera调试:i2c不通如何排查?

    前言: 这篇文章介绍一下在调试camera驱动的过程,最常见的一个问题,i2c不通导致驱动注册不上,应该如何排查。 一、i2c地址问题: ①确认i2c地址是否配置正确: 一般sensor的datasheet都会明确给出i2c的地址,需要注意的是,大多数sensor都有SID选择引脚,有两个i2c地址可以选择,这里需要硬件确认选择是哪个地址 ②i2c总线地址是否正确: 需要根据硬件原理图明确i2c是挂载在哪路i2c总线下,并在DTS正确配置。 ③是否配置成8位地址: DTS中配置的i2c地址是7位地址,不包括最后的读写位,检查是否配置成8位地址,如上图展示的某sensor,其i2c地址有0x6c和0x20,这就是8位地址,在dts中需要配置为 pinctrl: 需要检查一下i2c的引脚是否正确的引用,可以先看原理图对应的gpio,在检查dts是否正确引用。

    2.2K12编辑于 2024-03-04
  • 来自专栏全栈程序员必看

    i2c时序图的详细讲解

    :   I2C总线信号时序总结   总线空闲状态   I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。 启动信号是由主控器主动建立的,在建立该信号之前I2C总线必须处于空闲状态。    由于是利用I2C总线上的信息进行仲裁,因此不会造成信息的丢失。   为何识别到“0”将丢失仲裁呢? I2C 总线的控制只由地址或主机码以及竞争主机发送的数据决定,没有中央主机,总线也没有任何定制的优先权。    时钟信号的同步   在I2C总线上传送信息时的时钟同步信号是由挂接在SCL线上的所有器件的逻辑“与”完成的。

    19.2K20编辑于 2022-07-29
  • 来自专栏电子电路开发学习

    一文看懂I2C协议

    本篇文章介绍I2C通讯协议及其FPGA实测波形。 文末有【I2C官方标准文档下载方法】。 有哪些内容 I2C是什么 5种速率 4种信号 读写时序 7位和10位地址 I2C保留字节 FPGA实测I2C波形 SPI和I2C的对比 I2C是什么 在消费电子,工业电子等领域,会使用各种类型的芯片,如微控制器 i2c_read SPI和I2C的对比 I2C是半双工,SPI是全双工。 I2C支持多主多从模式,而SPI只能有一个主机。 从GPIO占用上来看,I2C占用更少的GPIO,更节省资源。 I2C官方标准文档_UM10204 I2C的官方文档是原飞利浦(Philips)半导体事业部,现恩智浦(NXP)半导体发布的UM10204文档,全文共64页,是目前最权威最详细的I2C协议介绍文章,最新版本 TI:理解I2C文档_SLVA704 TI在2015年发布了一篇SLVA704文档, 全文共8页,精简的概括了I2C协议的电气特性,操作时序,读写时序等,比较适合I2C入门学习。 ? 3.

    2.5K30发布于 2021-04-02
  • 来自专栏linux驱动个人学习

    SMBus与I2C的差别

    . -- i2c SMBus Timeout No Yes Minimum Clock Speed DC 10KHz Maximum Clock Speed 100kHz (400kHz and 2MHz 的差别 详细参考: SMBus与I2C的区别 SMbus 最早是由 Intel 公司提出来的. 此规格是用 Philips 的 I2C 简化而来. SMbus 是由两条讯号所组成的一种汇流排. 是为了在系统上较慢速的装置及电源管理装置之间的沟通使用. 很明显的,I2C与SMBus的交集运作频率即是10kHz~100kHz间。 类似的,SMBus对介面被重置(Reset)后的恢复时间(Timeout)也有要求,一般而言是35mS,I2C这方面亦无约束,可以任意延长时间。

    2.1K20发布于 2018-07-04
  • 来自专栏全栈程序员必看

    树莓派学习-I2c通信

    其中以树莓派的I2C通信为最。 一、I2C简介 I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。 详见 百度百科-I2C总线 二、配置I2C接口,读取i2c设备的地址 1、可以通过raspi-config配置工具配置使能I2C,或者通过编辑/boot/config.txt文件,加入一下一行内容: dtparam 设备号 0x2a 代表I2C设备地址 0x1a 代表寄存器地址 4、对16位数据的读 在基本的命令后加上 w 即可实现 四、I2C编程 因为使用树莓派我一直使用的语言是Python,故i2c编程只学到了 sudo cat /sys/module/i2c_bcm2708/parameters/baudrate 默认的I2C速度为100KHz,对于多数I2C设备而言100KHz并不算快,但是对于个别的I2C Tools的安装和使用 树莓派与i2c设备的通信 树莓派学习笔记——I2C设备装入和速率设置 树莓派系列教程11:I2C编程 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn

    1.8K10编辑于 2022-08-25
  • 来自专栏韦东山嵌入式

    Linux系统驱动之I2C视频介绍

    I2C硬件框架 在一个芯片(SoC)内部,有一个或多个I2C控制器 在一个I2C控制器上,可以连接一个或多个I2C设备 I2C总线只需要2条线:时钟线SCL、数据线SDA 在I2C总线的SCL、SDA I2C控制器驱动 它根据I2C协议发出各类信号:I2C设备地址、I2C存储地址、数据 它根据I2C协议判断 3. (i2c-dev.c) I2C Device Driver I2C设备自己的驱动程序 内核自带的i2c-dev.c驱动程序,它是i2c控制器驱动程序暴露给用户空间的驱动程序(i2c-dev.c) I2C Controller Driver 芯片I2C控制器的驱动程序(称为adapter) 使用GPIO模拟的I2C控制器驱动程序(i2c-gpio.c) 3.2 对于单片机/裸机 从上到下 : 先讲I2C协议 APP I2C Device Driver I2C Controller Driver(也被称为adapter)

    2.9K40编辑于 2021-12-08
领券