上一节 我们学习了: IIC接口下的24C02 驱动分析 接下来本节, 学习Linux下如何利用linux下I2C驱动体系结构来操作24C02 1....I2C体系结构分析 1.1首先进入linux内核的driver/i2c目录下,如下图所示: ?...*adapter;//依附的i2c_adapter,表示该IIC设备支持哪个适配器 struct i2c_driver *driver;//依附的i2c_driver ,表示该IIC从设备的驱动是哪个.../kernel.h> #include linux/init.h> #include linux/module.h> #include linux/slab.h> #include linux/...jiffies.h> #include linux/i2c.h> #include linux/mutex.h> #include linux/fs.h> #include <asm/uaccess.h
每一块BLSP对应六位,每一位对应一个GPIO,每一位的GPIO都可以作为UART、SPI、IIC的链接线 2....需要通过平台的数据手册 来确定用哪块BLSP的哪个QUP链接是哪个GPIO,这些个GPIO支持的是什么类型的总线(三大总线之一),每一位又是作为三大总线的哪一条 3....,所有的这3个core共享同一个总线接口,也就是对外共用相同的I/O接口,比如: 但是对于只使用两个UART引脚的UART_DM,比如只用到GPIO_4(TX)和GPIO_5(RX),也是使用两个引脚的...其实从上图可知道是第1个BLSP的第2个QUDP,但我们从设备树上找到相关的 (2) 通过i2c_2_active找到msm8937.dtsi下有引用 这里可知是采用BLSP1的QUP2,I2C...下的定义 从这里可以看出QUP是从QUP_ID_0开始,那么我们的使用的GPIO6和GPIO7的I2C对应QUP_ID_1,使用示例如下: 4.
1.I2C体系结构分析 1.1首先进入linux内核的driver/i2c目录下,如下图所示: 其中重要的文件介绍如下: 1)algos文件夹(algorithms) 里面保存I2C的通信方面的算法...=1,开始发送起始信号+IIC从设备地址值,并回应ACK } 通过上面的代码和注释,发现主要是写入IIC从设备地址,然后发送起始信号+IIC从设备地址值,并回应ACK 显然IIC总线驱动i2c-s3c2410....c,主要设置适配器adapter,里面帮我们做好了IIC通信的架构,就是不知道发什么内容 我们进入driver/i2c/chips中,看看eeprom设备驱动是如何写的 参考: driver/...#include linux/kernel.h> #include linux/init.h> #include linux/module.h> #include linux/slab.h> #...include linux/jiffies.h> #include linux/i2c.h> #include linux/mutex.h> #include linux/fs.h> #include
IIC总线:负责通讯的两条电路线SCL、SDA,电路上都有上拉电阻,即空闲状态下,两条线都保持高电平。通信时,主机按照IIC时序控制SCL和SDA上的高低电平从而产生包含特定数据的IIC时序。...IIC主机:一条总线中一般只会有一个IIC主机,一般为可编程芯片。通过软件编程控制主机连接在IIC总线上的GPIO电平,生成符合IIC总线协议的时序。...IIC从机:具备IIC接口的设备器件(例如AT24C02)。硬件连接好后,等待IIC总线访问。 IIC总线协议 ?...IIC总线上所有的IIC从机设备对应一个唯一的地址。...IIC总线上一帧数据的传输格式了。
下图是一个嵌入式系统中处理器仅通过2根线的IIC总线控制多个IIC外设的典型应用图 ?...特点 简单性和有效性 由于接口直接在组件之上,因此 IIC 总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。...所有接到 IIC 总线设备上的串行数据 SDA 都接到总线的 SDA 上,各设备的时钟线 SCL 接到总线的 SCL 上。对于并联在一条总线上的每个 IIC 都有唯一的地址。...空闲状态 当 IIC 总线的数据线 SDA 和时钟线 SCL 两条信号线同时处于高电平时,规定为总线的空闲状态。...IIC 总线操作 对 IIC 总线的操作实际就是主从设备之间的读写操作。大致可分为以下三种操作情况: 主设备往从设备中写数据 数据包括从机寄存器地址和需要写入寄存器的数据data ?
(2)IIC的物理层 a.只要求两条总线线路,一条是串行数据线SDA,一条是串行时钟线SCL。(IIC是半双工,而不是全双工)。...c.IIC是真正的多主机总线,(而这个SPI在每次通信前都需要把主机定死,而IIC可以在通讯过程中,改变主机),如果两个或更多的主机同时请求总线,可以通过冲突检测和仲裁防止总线数据被破坏。...e.连接到总线的IC数量只是受到总线的最大负载电容400pf限制。 一个典型的IIC接口如下图(1)所示 ? 图(1) (3)IIC的协议层 IIC的协议层才是掌握IIC的关键。...,所以应该是7位地址 0x68(1101000)+二进制位0=11010000)也就是0xD0,表示要向该IIC设备里写东西,然后再紧接着写入IIC设备里的寄存器地址,而我直接写入了0x68,导致出错...即使是含有IIC硬件的单片机(如stm32 103系列)也有一定的缺陷,所以一般也会模拟IIC的时序。现将具体时间截图如下: ?
前言 Linux的IIC驱动想必大家都耳熟能详,网上也有很多相关的教程。 网上的教程总结,比如: 方法问题描述Linux 3.X.X版本之后,设备树+驱动此方法是比较符合linux驱动的写法的。...他将会操作多个文件 上面的做法都有些困难及弊端存在,经过摸索了一遍Linux的I2C驱动框架,我发现可以很精简的写一个I2C设备的设备驱动。...而且是放在内核态中,这样处理一下GPIO或者中断什么的都很方便。 投机取巧的I2C驱动 I2C设备驱动说明 投机取巧的I2C驱动是参考I2C总线驱动代码实现的。...投机取巧的I2C驱动不需要设备树,这也让一些不熟悉设备树的小伙伴能编写一个设备驱动。 投机取巧的I2C驱动精简,方便理解。...分析I2C总线驱动说明 I2C总线驱动的代码在linux的源码中--i2c-dev.c中。 在代码中可以看到他提供一套文件操作接口,open,read,write,close接口。
2.1 IIC协议的FPGA实现 2.1.2 IIC协议的FPGA实现 图2 13 IIC模块的建模图 图2 13是 IIC 储存模块的建模图,左边是顶层信号,右边则是沟通用的问答信号...IIC 总线的起始位也就类似串口或者 PS/2 等传输协议的起始位,然而不同的是, IIC 总线的起始位是 SCL 拉高 TR + TSU_STA + THD_STA + TF 之久,换之 SDA 则是拉高...第 6~7 行表示一个步骤所逗留的时间。 图2 15 结束位 图2 15是结束位的时序图, IIC 设备的操作好坏一般都取决结束位。...接下来是仿真验证,结果如下: 图 2 22 IIC总线仿真时序图 结合上述仿真波形图和程序可以看出: 起始位:SCLK为高电平时,SDAT由高到低,指示IIC总线传输数据的开始...,即08,为上面子地址寄存器配置的数据,随后,跟了一个高电平,为应答位; 最后,为停止位,SCLK为高电平时,SDAT由低到高,指示该次IIC总线传输数据的结束。
当SCL的电平是低的时候,SDA的数据无效,允许变化。 IIC总线有主从之分,从设备可以是多个,这个是由硬件电路与协议决定的,一般来说总线上扩展的器件数量主要由电容负载来决定。...因为每个器件的总线接口都有一定的等效电容.而线路中电容会影响总线传输速度.当电容过大时,有可能造成传输错误. 所以需要根据不同的负载电容去估算支持的最大从设备的数量。...如果灌入端口的电流与太大,将加大损坏端口的风险,也会使端口输出的低电平电压被拉高,如果高于0.4V,则有可能造成数据的差错。...由于端口输出高电平是通过Rp实现的,线上电平从低到高变化的时候,电源通过Rp对线上负载电容CL充电,等到达高电平的阈值的时候,是需要一定的时间的,即上升时间。...数据的有效性: SDA 线上的数据必须在时钟的高电平周期保持稳定数据线的高或低电平状态只有在SCL 线的时钟信号是低电平时才能改变。 硬件调试方法: 下面简单说下IIC总线设备的调试方法。
2.1 IIC协议的FPGA实现 2.1.1 IIC 总线规范简介 1) IIC 总线特性介绍 在现代电子产品开发过程中,为了简化系统,提高系统的可靠性,缩短产品开发周期,增加硬件构成的灵活性,推出了一种高效...、可靠、方便的 IIC串行总线。...所谓硬件 ID 就是 IIC 设备的辨识 ID,硬件 ID 会随着厂商还有设备的种类而有所改变。开发板上的 IIC 设备是某厂商的 IIC 储存器,即 24LC04,硬件 ID 为 4’b1010。...至于硬件地址就是 IIC 设备在总线上辨识地址,默认下为 3 位,即同类的 IIC 设备在同一条 IIC总线上仅允许占据 8 个而已。然而,开发板上的 24LC04 为 3’b000。...Start 是 IIC 总线的起始位, Stop 是 IIC 总线的结束位, Data 是 IIC 总线的数据位,为了确保三者成功写入从机, Setup Time 与 Hold Time 必须得到满足。
本文将从实测的IIC波形入手,带你看到真实的IIC样子,进而去理解IIC的通信原理。...IIC通信线只有只有两根,数据线SDA的高低电平传输2进制的数据,时钟线SCL通过方波信号提供时钟节拍 多个IIC器件可以并联在IIC总线上,每个器件有特定的地址,分时共享IIC总线 实际使用IIC当然还要连接电源以及共地哦...现在对IIC波形有没有多了一些直观的认识?下面再进入编程阶段,看看程序是怎么控制这两根线的。 3 IIC软件编写逻辑 IIC通信可以使用单片机自带的硬件IIC,它提供了固定的引脚接口和函数库。...注:以上的IIC真实波形,是使用是硬件IIC,自己编写的软件IIC测得的波形,可能在两个信号的前后延时时间上稍有差别,但整体的时序逻辑肯定是一样的。...4.3 配置从机寄存器(单字节写与多字节写) 对于寄存器的配置,也就是IIC的写寄存器操作,我就不放图了,参考上面的“常用的数据收发方式(时序)”以及上面的IIC读寄存器的真实波形,IIC的写寄存器的真实波形
IIC读写时序 先来回顾IIC的读写时序,首先记住两句话: ①时钟SCL低,数据SDA发生变化; ②时钟SCL高,数据SDA保持稳定; S 器件地址+0 A 写入首地址 A DATA1 A ··· DATAn...程序用伪代码表示: 读字节: u8 IIC_readbyte() { IIC_start();//起始信号 IIC_putbyte();//器件地址 IIC_Putbyte();...} u8 IIC_writebyte() { IIC_start();//起始信号 IIC_putbyte();//器件地址 IIC_Putbyte();//写入首地址...但是程序是从其他平台移植过来的,驱动函数没有改动,只是改了IO口输入输出配置的程序以及端口更改,所以软件部分实在是找不到原因了。于是检查硬件。...而我电路上的存储芯片24C16没有接上拉电阻,所以我需要将单片机上的IO口设置为上拉。 于是,问题解决。 总结: 我们在调IIC协议的时候,应该先考虑硬件是否有问题,SDA跟SCL上拉是必要的。
,可以说目前的绝大部分便携或手持电子消费品都是用的 ARM 芯片 前面一篇简单地对 ARM 裸机开发、平台环境与工具、创建项目、看门狗的控制与基础进行了演示 这里再对IIC协议转输进行探究 ---- 概要...---- IIC协议转输 要求 使用 IIC 协议在 ARM 板上24C02芯片中存取数据 IIC 原理图 IIC总线连接方式 AT24C02A电路原理图 创建项目 创建项目的总体过程就是 新建文件夹...,main定义在c源文件中 IMPORT iic_int_24c04 ;iic_int_24c04的定义在外部的C源文件中 AREA RESET, CODE, READONLY ;定义一个名为...//(1010 1111)恢复IIC模式,IIC总线应答启用, 传输时钟预定标器源时针钟选择位为 IICCLK=fPCLK/16,接收发送中断启用,接收发送中断挂起标志,发送时钟预定标器的值为15(时钟频率...(rUTRSTAT0 & 0x4)); //等待串口发送完成 } } } void iic_int_24c04(void) //IIC的中断服务程序 { f_nGetACK
摘要 本篇笔记主要记录在恩智浦MPC5744p系列上IIC通信遇到的问题,这个片子本身没有硬件IIC,如果要使用I2C接口,需要软件模拟。...主要问题 MPC57xx系列是恩智浦针对汽车行业的用量比较大的一颗料,本身没有硬件I2C接口,如需使用I2C接口需要使用GPIO口来模拟,因为我本身也是第一次使用这颗料,所以想借助SDK快速来评估样机功能...,就详细阅览了SDK的结构和代码,发现IIC竟然使用四线模拟, ?...后来仔细查阅了GPIO寄存器和文档,也和恩智浦的FAE进行了沟通,才确认他这个必须使用四个管脚才能够完全模拟I2C功能,而设计也不推荐使用I2C,可以使用SPI接口,这个是一个大坑,如果大家在开始设计的时候要注意
IIC 通信协议 I2C(IIC,Inter-Integrated Circuit),数据线SDA(data)和时钟SCL(clock)构成的串行总线,双向传送。...高速IIC总线一般可达400kbps以上。 IIC是半双工通信方式。 时序图 主机:起始信号—–>第一位——>第二位———> …….....——–>第八位———> 等待应答信号——->停止信号 大致的一个数据传输流程是:主机向SDA线上发送一个起始信号,表示有信号进行传输,此时所有连接到IIC总线上的芯片都处于接收状态,接下来,主机发送想要与其进行数据传输的从机地址信号...,所有的从机都会接收到该地址信号并和自己固有的地址信号进行匹配,当配对成功时,接下来就在时钟信号的带动下进行数据传输,数据的传输是按照每8位一个单元进行数据的传输。...每一位的传输过程中,在SCL高电平期间,一定要保证SDA数值的稳定,否则会出现出错的情况,SDA数值的改变发生在SCL的低电平期间。
OV7725使用的是两线式接口总线,该接口总线包括SIO_C串行时钟输入线和SIO_D串行双向数据线,分别相当于IIC协议的SCL信号线和SDA信号线。...由此可见,SCCB就是改编版的IIC,完全可以按照IIC来理解,下面仔细讲解SCCB的时序以及和IIC的不同之处。 一、SCCB起始和结束(与IIC完全一致) ?...二、SCCB写(与IIC完全一致) ? ID Address(W)里面就已经包括进了IIC中的“读写控制位”,所以没有额外写出。 ...“X”即IIC中的ACK应答位。 三、SCCB读 ? 数据手册中的SCCB读只写了上图的Phase3和Phase4,实际上它是和Phase1和Phase2联系在一起的。..._4 + stop_2 除去上面三点,SCCB和IIC再无区别,因此如果只需要配置寄存器(只用到写),可以直接拿IIC的时序来当做SCCB用,如果需要读,读操作中间必须有一个stop。
老师说下课(停止) 我们就使用这个简单的例子,来解释一下IIC的传输协议。...老师说注意了,表示开始信号(start) 老师告诉某个学生,表示发送地址(address) 老师发球/接球,表示数据的传输 老师/学生收到球,回应表示:回应信号(ACK) 老师说下课,表示IIC传输接受...连到总线上的任一器件输出的低电平,都将使总线的信号变低。...特性3:多主机 IIC是真正的多主机总线,( IIC可以在通讯过程中,改变主机),如果两个或更多的主机同时请求总线,可以通过冲突检测和仲裁防止总线数据被破坏。 ...掌握IMX6ULL I2C控制器的使用,重点要熟悉IMX6ULL I2C的寄存器的操作。
大家好,又见面了,我是你们的朋友全栈君。 –>物理结构: –>通信原理:通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。...在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。 –>iic总线协议: 1】起始和结束信号总是由主设备产生。...一个字节按数据位从高位到低位的顺序传输完后,紧接着从设备将拉低SDA线,回传给主设备一个应答位, 此时才认为一个字节真正的被传输完成。...4】从设备地址选取:I2C总线上的每一个设备都对应一个唯一的地址,主从设备之间的数据传输是建立在地址的基础上,也就是说,主设备在传输有效数据之前要先指定从设备的地址,地址指定的过程和上面数据传输的过程一样...,只不过大多数从设备的地址是7位的,然后协议规定再给地址添加一个最低位用来表示接下来数据传输的方向,0表示主设备向从设备写数据,1表示主设备向从设备读数据。
IIC总线是一个多向控制总线,多个器件(从机)可以同时挂载到一个主机控制的一条总线上。每个连接在总线上的设备都是通过唯一的地址和其他器件通信,主机和从机的角色可互换, 主机和从机的概念。...IIC协议为半双工协议。 全双工指在发送数据的同时也能够接收数据,两者同步进行。目前的网卡一般都支持全双工。 ...IIC协议在读写数据时,总是要发送器件地址,这里需要注意的是,不是主机给从机发送地址,而是主机给地址总线上发送地址,挂IIC总线上的所有从机都能收到地址,如果发过来的地址和自己的地址匹配上了,从机就会给主机一个应答...所以我在想,如果从机的器件是完全一样的,那么IIC协议就可以同时给多个从机,即对多个器件进行配置。...这种理论上是可行的,但其实是不行的,IIC协议就是通过地址不同来判断给哪个器件传送数据的,如果两个器件的地址完全一样,器件会产生应答,那么两个器件就通过竞争判断给谁通信了,有随机性。
简介: 在应用到linux的设备(特别是手机)中,大部分硬件设备与主芯片都是通过iic通讯的,譬如TP、加速度传感器、温湿度传感器等等。...记录一次自己调试linux开发板iic器件(ap3216c光敏设备)。 概述: iic通讯线一般只有两条,一条用于时钟控制,一条用于数据通讯。当然也存在单总线通讯,像单片机经常用到的ds18b20。...撸码: 1详细信息: 平台:imx6ull开发板 linux版本:4.9.88 开发编辑器:gediit 2概要: 在linux源码中,已经实现了iic主机通讯协议传输的各种传输接口。...在系统初始化时,会遍历iic驱动链表将本驱动注册。具体原理可查阅代码include/linux/i2c.h。...对于使用过单片机调试iic设备的同学,对于iic通讯应该很熟悉了,主要就是对linux驱动注册流程稍加研究即可。
领取专属 10元无门槛券
手把手带您无忧上云