草庐IT

Linux I2C 驱动实验

目录一、LinuxI2C驱动简介1、I2C总线驱动2、I2C设备驱动1、i2c_client结构体2、i2c_driver结构体二、硬件分析三、设备树编写1、pinctrl_i2c12、在i2c1节点追加ap3216c子节点3、验证四、 代码编写1、makefile2、ap3216c.h 3、ap3216c.c①、头文件②、驱动出入口 ③、i2c驱动结构体 ④、匹配函数⑤、probe函数⑥、remove 函数 ⑦、函数入口出口添加注册i2c_drive⑧、读取AP3216C的N个寄存器⑨、向AP3216C的N个寄存器写数据⑩、读、写AP3216C一个寄存器⑩①、读取AP3216C的数据⑩②完善

【协议项目之 I2C】(一) 基本时序与实现

一、基本介绍  I2C协议(集成电路总线)使用两根线SDA和SCL实现数据传输,其连接如下图所示,总线上通过上拉电阻可以挂载各种低速外设,例如EEPROM24C02,传感器等。  使用I2C,可以将多个从机(Slave)连接到单个主设备(Master),并且还可以有多个主设备(Master)控制一个或多个从机(Slave)。一、启动时序与时钟产生(STARTcondition)  启动时序如下图所示,  在总线空闲时,SDA,SCL都处于高电平。而在启动I2C传输时,主设备先将SDA拉低,再将SCL拉低。开始标志之后,就开始传输数据,传输数据要求保证在SCL的高电平时期保持不变,否则会被误识别

I2C协议(详细)

I2C通讯协议(Inter-IntegratedCircuit)引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。实现I2C需要两根信号线完成信息交换,SCL时钟信号线,SDA数据输入/输出线。它属于同步通信,由于输入输出数据均使用一根线,因此通信方向为半双工。I2C的数据传输速率位于串口和SPI之间,大部分I2C设备支持100KHz和400KHz模式。使用I2C传输数据会有一些额外消耗:每发送8bits数据,就需要额外1bit的元数据(ACK或NACK)。一、物理层特点1、支持多设备(支持多个主机及多个丛

详解UART、I2C、SPI常用通信协议(全是细节)

前言    UART、I2C和SPI是我们在嵌入式开发中比较常见的通信协议了,没有最好的通信协议,每个通信协议都有自己的优缺点。如果想要通信速度快,SPI将是理想的选择;如果用户想要连接多个设备而不是过于复杂,I2C将是理想的选择,因为它最多可以连接127个设备并且易于管理;UART的通信速度相对较慢,通信也比较简单,单对单。        uart接口比较常用于主设备与蓝牙、wifi模块的通信、打印调试等。    i2c接口多用于和传感器的通信,例如触摸屏、计步器、温度传感器、EEPROM等。    spi接口多用于对速率要求高一些的场景,如spiflash、spilcd屏、SD卡等。1.U

ArmSom--I2C开发指南

1.简介RK3588从入门到精通本⽂介绍在rockchip平台下如何配置i2c接口的方法并且添加调试验证i2c外设的例子开发板:ArmSoM-W3Kernel:5.10.160OS:Debian11  2.i2c接口概述i2c总线控制器通过串行数据(SDA)线和串行时钟(SCL)线在连接到总线的器件间传递信息。i2c总线一些特征:只有两根线分别是串行数据线(SDA),串行时钟线(SCL)。每个器件都有一个唯一的地址识别使用串行8位双向数据传输方式。可以使用普通GPIO口模拟I2C,但要需要将GPIO配置成OD模式(开漏模式) 3.芯片i2c资源RK3588旗舰芯片上可使用的I2C有9组,Arm

【分析笔记】Linux I2C-Tools 使用踩坑笔记

一、踩坑缘由在调试I2C器件时,我一般习惯于使用i2cdetect工具来确认芯片是否有应答,通常有应答之后,就会开始着手移植或者编写对应的驱动程序,但是在调试sgp41传感器时却不灵了。二、问题现象 在连续完成多个I2C器件的调试和驱动开发之后,最后一个sgp41传感器却一直无法被检测到。在使用示波器再次测量芯片供电、检查I2C波形、引脚顺序、电平匹配都正确后,认为是芯片坏了,换了多颗芯片,都无法识别,寄给供应商,供应商又说检测良好,这就很神奇了。在同一个座子上,sht41都能正常被检测到,但是sgp41却无法检测,更何况该总线上还挂了其它的I2C器件都能准确检测出来。三、问题分析百思不得其解

一次严重的I2C信号错误

一次严重的I2C信号错误——SDA信号或CLK信号出现半高电平问题背景制作电池电量计测试板,使用I2C信号与主板通信,中间连接20cm的2.54排线,两侧电平均为3.3V。问题描述主板无法访问电量计芯片。I2C信号波形如下:半高电平的问题跟随示波器的通道2,有点匪夷所思,但是对排除信号线路问题有一定帮助。解决方式解决问题的过程中参考了以下文章:1、I2C的SDA的ACK信号出现半高电平的原因:https://blog.csdn.net/Nightya/article/details/105454785https://zhuanlan.zhihu.com/p/1073496822、I2C信号详解

开源轻量级 BT 下载器 qBittorrent 4.6 发布:支持“I2P 隐形互联网项目”等功能

10月23日消息,qBittorrent 是一款基于 Qt 工具包和 libtorrent-rasterbar 的免费开源 BT 软件,可在所有主流操作系统上运行,如 Windows,Linux,MacOS,OS/2 或 FreeBSD(包括对 25 种以上语言的支持)。根据官网信息显示,qBittorrent目前推出了 4.6 版本,主要的新功能是支持I2P(IT之家注:TheInvisibleInternetProject,隐形互联网项目),号称“使用完全加密的隐私网络层来隐藏用户活动和位置”,相关服务不依赖服务器,而是依赖所用使用软件的用户。▲图源qBittorrent官网qBittor

【IMX6ULL驱动开发学习】10.Linux I2C驱动实战:AT24C02驱动设计流程

前情回顾:【IMX6ULL驱动开发学习】09.Linux之I2C框架简介和驱动程序模板_阿龙还在写代码的博客-CSDN博客目录一、修改设备树(设备树用来指定引脚资源)二、编写驱动2.1 i2c_drv_read2.2 i2c_drv_write2.3完整驱动程序三、上机测试一、修改设备树(设备树用来指定引脚资源)放在哪个I2C控制器下面AT24C02的I2C设备地址(查看芯片手册0x50)compatible属性:用来寻址驱动程序修改设备树:在内核目录下vi  arch/arm/boot/dts/100ask_imx6ull-14x14.dts &i2c1{clock-frequency=;p

STM32之I2C对EEPROM 页读写、连续读写操作

页写入原理stm32的EEPROM(24C02)的一页只有8个字节 组织架构是256*8bits =2k(bits) 步骤:1、起始信号2、检查总线是否忙碌3、发送EEPROM设备地址和发送方向4、发送要写入的单元格地址5、开始发送数据6、发送完响应noack停止发送  7、结束信号注意:以上的每一步都需要响应EV事件代码//-----------------------对EEPROM进行页写入----------------------------------//buffer:要写入的缓冲区数据//addr:要写入的单元格地址//num :要写入的数据数量不能超过页大小8位uint16_tE