i2c通讯

i2c(主机从机)

i2C从机地址‌不是由主机动态分配‌的,而是由设备硬件或制造商预先确定的‌;

2条线,scl和sda;

优点:两条线连接多设备,休眠模式优于uart;支持多主机动态切换(通过仲裁机制避免冲突);内置ACK/NACK应答机制,确保数据完整性‌;

缺点:低速,距离短;多主机同时访问时需仲裁,增加软件复杂度;时钟同步要求高;

i2c的scl和sda默认都是处于高电平的状态;

i2c的scl和sda为什么要接上拉电阻?

当空闲状态的时候,必须是高电平;

上拉电阻不能太大:太大的话会导致从低电平到高电平的波形过缓,影响通信效果;

上拉电阻不能太小:太小的话会导致不能产生低电平;

i2c总线上的设备数量的电容 不能超过 总线电容;

i2c无功能怎么排查?

硬件基础检查

电源与复位验证:

确认设备供电 电压稳定(如3.3V±5%),复位引脚(RSTN/PDN)处于有效电平(高电平),如果复位引脚一直为低/高,可能是gpio配置错误或者引脚虚焊;

检查上拉电阻(4.7kΩ~10kΩ)是否焊接正确,阻值是否符合总线速率要求‌;(上拉电阻防止芯片烧坏)

电源使能引脚en,确认是否被主控拉高使能,若未使能,芯片处于休眠状态,无任何信号输出;

‌物理连接排查:

使用万用表检测SCL/SDA线路是否断路/短路,确认PCB走线无虚焊或接触不良‌;

检查设备地址引脚(如AD0/AD1)配置是否与代码匹配;

检查I2C通信引脚(SCL/SDA)是否与主控正确连接,上拉电阻(4.7kΩ~10kΩ)是否正常‌;

信号完整性分析:

示波器观测波形

测量SCL/SDA空闲电平(应为高电平,接近电源电压),观察是否有连续的时钟波;若完全无波形,说明主控未发出信号,需排查软件驱动;若有波形但杂乱,可能是总线上拉电阻异常;

检查上升/下降时间(标准模式≤1000ns,快速模式≤300ns),过缓会导致采样错误‌;

时序参数验证

确认起始信号建立时间(tSU;STA)和停止信号建立时间(tSU;STO)满足规范(如4.7μs空闲时间)‌;

逻辑分析仪抓取完整时序,观察START/STOP位是否正常生成;

软件配置排查

地址与时钟配置

核对7位地址是否左移1位;

降低时钟频率测试(如从400kHz降至100kHz)排除时序兼容性问题‌;

总线扫描与设备隔离

使用i2cdetect -y <总线号>扫描存活设备,确认从设备响应;

移除所有从设备后逐一接入,排查地址冲突或故障设备‌;

设备树检查

设备节点状态:检查节点的status是否是okay(而非disabled);若为禁用状态,芯片不会被初始化,无信号输出;

兼容性标识匹配:compatible字段与驱动代码中的of_match_table完全一致,若不匹配,驱动的probe无法执行,芯片未被注册;

gpio配置:检查中断irq,复位rst引脚的gpio编号是否与硬件实际连接一致,若gpio配置错误,芯片无法接收主控指令;

相关推荐
s_w.h16 小时前
【 linux 】文件系统
linux·运维·服务器·算法·bash
weiggle17 小时前
第二篇:搭建你的第一个 Compose 项目——开发环境与项目结构
android·前端
阿巴斯甜17 小时前
为什么 AIDL 接口客户端、服务端要写两份一模一样的?
android
都在酒里17 小时前
Linux字符设备驱动开发(七):输入子系统——驱动GPIO按键并上报事件
linux·驱动开发·交互
风曦Kisaki17 小时前
# Linux运维Day06:HAproxy负载均衡(代理调度软件对比)、Tomcat服务部署与LNMJ架构
linux·运维·负载均衡
largecode17 小时前
座机号码认证如何操作?申请热线实名名片,树立统一官方客服形象
linux·sql·华为·c#·.net·wpf·harmonyos
杨云龙UP17 小时前
ODA/Oracle RAC 节点 Load 100+ 排查:一个 lsof 残留进程引发的负载虚高问题 2026-05-27
linux·数据库·oracle·centos·误操作
底层开发智库17 小时前
获取编译并运行ARM64可信系统软件栈(TF-A+OP-TEE+UEFI+Linux)
linux·optee·arm64·可信软件
Jason_zhao_MR18 小时前
纳秒级抖动×24小时零丢帧:RK3576工业级EtherCAT主站全拆解
大数据·人工智能·单片机·嵌入式
weiggle18 小时前
第一篇:Jetpack Compose 宣言——为什么 Android 开发需要声明式 UI
android