首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

I2C总线架构 之 总线驱动

这种做法完全不适应Linux的通用性的设计理念,对于Linux来讲:同样的事情我只做一遍,向外提供接口,不管你是什么IIC设备挂载那条IIC总线上,都可以用。...因此,这就需要Linux在代码架构上有非常严谨的模块化设计。 架构设计 在Linux设计中,将I2C代码框架分为三个部分:I2C总线I2C核心、I2C驱动。...「I2C总线驱动(i2c adapter):」 根据平台定制的i2c驱动,其中包含i2c传输的算法设计。...I2C设备驱动对上和用户应用程序打交道,对下和I2C核心对接。 ? 本篇主要对IIC总线驱动的总结。...i2c总线结构体 Linux在分层中,必不可少的将每一层模块封装成一个结构体,然后将结构体作为一个与外接交互的桥梁。

1.4K30

I2C 同步串行总线

I2C 概述 I2C(Inter Integrated Circuit)集成电路间总线是由 Philips 公司开发的一种简单、双向二线制同步串行总线I2C 以主从方式工作。...I2C 总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址,当主设备需要和某一个从设备通信时,通过广播的方式,将从设备地址写到总线上,如果某个从设备符合此地址,将会发出应答信号...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_

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

MCU常见通信总线串讲(三)—— I2C总线协议

系列文章,主要讲解以下几个总线协议,读者可以按需选择: UART和USART RS232、RS485总线 IIC总线 SPI总线 CAN总线 USB总线 一、I2C总线的概念 其实站在我个人开发的角度来说...特点: I2C是一个支持设备的总线,多个设备共用的信号线,他支持多个主机或者多个从机 一个I2C总线只使用两条总线线路,一条双向串行数据线(SDA),一条串行时钟线(SCL)。...I2C总线上的从机设备,都有一个单独的地址,主机通过这个地址来实现对不同设备的访问 总线通过上拉电阻接到电源。...I2C还有一个仲裁模式,即当多个从机都传输数据的时候,为了防止数据冲突,会产生仲裁,决定哪个设备来使用总线 具有3种传输模式:标准模式传输速率为100kbps,快速模式为400kbps,高速模式可达3.4Mbps...定义了如何进行数据的读取和写入,包括数据的传输顺序和速率的限制。

31130

I2C总线架构 之 I2C核心

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

2.6K21

I2C总线架构 之 设备驱动

构建i2c_driver,并注册到linux i2c中 d. 注册字符设备 e. 向应用层提供i2c设备操作接口 f. 注销i2c设备 本篇文章会按照以上六个阶段展开解析。 流程解析 a....添加硬件信息设备树(设备树) 首先观察硬件i2c设备挂载到哪个i2c总线上,然后在设备树文件找到该总线的设备节点,在节点下创建子节点描述i2c设备硬件信息即可。...i2c_transfer三个参数意义 : (1) client->adapter: 该i2c设备连接的i2c总线适配器; (2) msg:需要发送的数据; (3) 1:需要发送的msg个数。...通过以上读写的实现,与上一篇文章 《I2C总线架构 之 I2C协议》 读写时序是对应的: (1) 写操作只需要一个msg结构体: 起始位 + 写操作(msg[0]) + 停止位。...通读文章大致了解,会发现本篇i2c设备驱动与虚拟总线platform架构类似。不同的是platform是软件实现的虚拟总线,在soc上并不存在;而i2c总线,在soc上是实际存在的。

1.8K70

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

传输速率 5) 特性5:负载和距离 12.2.3 协议层 1) 数据有效性 2) 起始和结束条件 3) 应答 4) 数据帧格式 12.2 在linux系统下操作I2C总线的外设 12.2.1 概述 12.2.2...简述I2Clinux驱动 1) I2C核心层: 2) I2C总线驱动层: 3) I2C总线驱动层: 12.3 在linux应用层使用I2C 12.3.1 如何使用I2C tools测试I2C外设 1...12.2 在linux系统下操作I2C总线的外设 12.2.1 概述 ​ 下图是在linux系统环境里操作i2c总线上的外设流程框图。我们按照从下向上的顺序研究一下该流程中各个角色的功能。 ​...第三,I2C的通信速率是否超过了设备所支持的最高速度。 ​ 第四,检查外部I2C设备与操作的I2C控制器是否挂在了同一条I2C总线上。 ​ 第五,检查操作的I2C外设地址是否正确。 ​...2) 总线驱动能力 ​ 上拉电阻和负载电容决定了总线在某一速率下的稳定性。当输出为高时,电流通过上拉电阻对负载电容充电。

3.3K31

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

简介 I2C(Inter-integrated Circuit)总线支持设备之间的短距离通信,用于处理器和一些外围设备之间的接口,它只需要两根信号线来完成信息交换。...与串行端口、SPI对比 串行端口 串行端口是异步的(不传输时钟相关数据),两个设备在使用串口通信时,必须先约定一个数据传输速率,并且这两个设备各自的时钟频率必须与这个速率保持相近,某一方的时钟频率相差很大都会导致数据传输混乱...最后就是数据传输速率,异步串行通信并没有一个理论上的速率限制,大部分UART设备只支持一些特定的波特率,最高通常在230400bps左右。...SPI可以很好的用于高速率全双工的连接,对一些设备可支持高达10MHz(10Mbps)的传输速率,因此SPI吞吐量大得多。SPI两端的设备通常是一个简单的移位寄存器,让软件的实现很简单。...I2C的数据传输速率位于串口和SPI之间,大部分I2C设备支持100KHz和400KHz模式。使用I2C传输数据会有一些额外消耗:每发送8bits数据,就需要额外1bit的元数据(ACK或NACK)。

1.2K10

【玩转ESP32】5、i2c-tools访问i2c设备

前言:i2c-tools,跟linux里的工具类似,可以命令行访问i2c设备。...1、编译、下载examples\i2c\i2c_tools例程 2、正确连接i2c设备 这里连接0.96吋 oled,也是比较常用的一个i2c设备,连接在gpio21和gpio22上。...可以看到i2c相关的命令有6个,输入help还可以查看命令的用法; ? 命令中的[]是可选的,在其他用到命令的地方也是一样的意思。...i2cconfig:用于配置i2c,包括速率、引脚等; i2cdetect:用于检测总线上是否存在设备; i2cget:用于读取寄存器; I2cset:用于设置寄存器; i2cdump:用于测试寄存器等...4、配置i2c ? 5、检测总线上的设备 输入i2cdetect即可: ? 可以看到存在地址为0x3c的设备,这也正是0.96 OLED的地址。其他i2c设备也是类似的操作,可以用于检测设备是否正常。

2.1K40

I2C 子系统(一)

I2C 系列文章主要分为两个部分来写: 1、I2C spec:研究 I2C 协议本身,研究它的协议规范、传输机制。 2、I2C driver:研究 Linux I2C 驱动。...Flow I2C Data Transfer 1、I2C Introduction I2C 历史 I2C:Inter-Integrated Circuit,集成电路总线。...I2C 的未来 MIPI 协会在 2014 年左右定稿了 I3C (improved Inter Integrated Circuit)规范,I3C 在 I2C 的规格上建立了功能超集,支持高传输速率模式...I2C 的速度 I2C 是一种低速、串行总线,有 SDA(串行数据线) 和 SCL(串行时钟线) 两条信号线,半双工通信。...总线之所以规定电容大小,是因为 I2C 使用的 GPIO 为开漏结构,要求外部有电阻上拉,电阻和总线电容产生了一个 RC 延时效应,电容越大信号的边沿就越缓,有可能带来信号质量风险(方波变三角波)。

39310

浅谈总线通信机制(通信基础+串口+I2C)

串行和并行通信的数据传送速率都与距离成反比。...我先来说下上面这幅图具体是什么含义,然后接下来再来说说I2C是怎么操作数据的。I2C总线就是通过SDA总线(数据)、SCL总线(时钟)来传输数据的,那为什么I2C总线上还要接两个上拉电阻呢?...那不能的话,假设输出低电平,由于I2C总线的线与关系,那不就相当于违背了I2C协议所说的条件了吗?所以这就是上拉电阻存在的必要性了。...因此为什么I2C总线外要接两个上拉电阻的原因就在于此。这时候疑问就来了,为什么有些MCU不需要加上拉电阻也可以正常驱动I2C总线呢?...答:有些MCU内部带了弱上拉电阻,这样也可以与I2C总线实现线与的功能,这样可以保证I2C在空闲的时候都为高电平。

1.8K10

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

1.5K20

I2C 子系统(七)

对于 Linux 常用版本,kernel-4.14 和 kernel-4.19 并没有提供 I3C 驱动,kernel-5.10 有提供 I3C 驱动(从 kernel-5.0开始提供的) 如下可以在线查看...Linux 源码,目录/drivers/i3c/... https://elixir.bootlin.com/linux/latest/source Bus configuration I3C 不仅支持多个从设备...I3C 总线上可以支持的设备有: Main Master(当前主设备) Secondary master(辅助主设备) i3c Slave(i3c从设备) i2c Slave(i2c从设备) I3C...: 总线初始化和动态地址分配模式 头地址是 7h7E(I3C 广播地址),所有的 I3C 从机将匹配 7h7E,任何的 I2C 从机设备将不会匹配此地址,因为这个地址在 I2C 中是保留的并且未使用...支持多种通信模式 i3c支持4种通信模式,分别是 SDR、HDR-DDR、HDR-TSL、HDR-TSP,不同模式通信速率有差异。

1.2K20

教你精确计算 I2C 上拉电阻阻值

I2C 总线能挂多少设备? 理论上: 7-bit address :2 的 7 次方,能挂 128 个设备。 10-bit address :2 的 10 次方,能挂 1024 个设备。...总线之所以规定电容大小是因为,I2C 使用的 GPIO 为开漏结构,开漏结构无法输出高电平,要求外部有上拉电阻拉高。...大家在不同速率采用的电阻一般有以下几种:1.5K、2.2K、4.7K。...结论:I2C 上拉电阻阻值和电源电压、传输速度、总线电容(负载因素)都有关系,大家根据自己的板子计算一下即可,选取最优电阻阻值,从而获得最优传输波形。...关于 I2C 的方方面面,我写在了我的博客上,有 10 篇,包括 I2C 的传输协议和LinuxI2C 的软件驱动框架,大家可以去查看,网址如下: http://www.linuxer.vip/i2c-bus-spec

6.5K21

详述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总线停止信号,确保总线处于空闲状态 ?

1.3K20

树莓派学习-I2c通信

其中以树莓派的I2C通信为最。 一、I2C简介 I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。...是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。 I2C 总线支持任何IC 生产工艺(CMOS、双极型)。...设备位于/dev/I2C-1,所以此处的编号为1 python封装SMBUS操作函数具体代码请查看:https://github.com/bivab/smbus-cffi 五、速率相关 1、查看I2C设备的速率...设备而言100KZH还是太快了,那么也可以修改I2C速率使得通信更稳定。...便为新的I2C速率,最后请重启系统。

1.1K10

大疆嵌入式二面问题集合

答:10.Linux驱动11.其它问题集中在我所使用的FreeRtos、Linux、ROS操作系统中,具体有点忘了12.讲下I2c和spi,I2c是怎么读写数据的,I2c速率有哪些 跟什么有关 答:I2C...IIC的传输速率由“时钟线上(SCL)的时钟频率”决定。特征:串行的8位双向数据传输位速率再标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。...15.大疆产品哪里可以改进,Linux虚拟文件系统答:续航 16.问了内存管理,任务调度和中断的几个相关问题(一半时间都在这上面)答:17.用到的STM32芯片硬件有了解过吗?...28.外部总线和内部总线区别内部总线是外设与处理器之间的总线,用于芯片一级的互连。外部总线是微机和外部其他设备之间的总线,微机作为一种设备,通过该总线和其他设备进行信息与数据交换,用于设备一级的互连。...内部总线就是开发人员经常用到的各种协议,比如SPI总线协议、SCI总线协议、IIC总线协议、UART、GPIO、CAN、SDIO、IIS等。是CPU和外设进行控制指令,访问地址,交换数据的通信规则。

1.2K31

I2C 子系统(六):I3C

I2C 和 I3C 关于功耗和传输速率的对比: I3C 使用推挽功能的双线串行接口,速度可达 12.5 MHz I3C 同一总线上共存的传统 I2C 设备(有一些限制) I3C 动态寻址,同时支持传统...I2C 设备的静态寻址 I3C 总线支持传统 I2C 通讯 类似 I2C 的单数据速率消息传输(SDR) I3C BASIC 不支持:可选的高数据速率消息模式(HDR) 多点功能 多主功能 带内中断支持...Ternary Symbol Legacy (HDR-TSL) Mode: 更高的数据速率加上三元编码,用于混合I2C和I3C设备的总线。...与I2C协议显著不同 Ternary Symbol Pure-bus (HDR-TSP) Mode: 更高的数据速率加上三值编码,适用于只有I3C设备的总线。...在程序和条件方面与 I2C 协议【NXP01】非常相似,因此 I3C 设备和许多传统 I2C 从设备(但不是 I2C 主设备)可以在同一 I3C 总线上共存。

80010
领券