周五见| i2c相关问题讲解

Comake Online


作者| koda.xu、An、Peng.Xiong、user_华仔


Comake社区技术问题汇总,第20230901期,本期将分享i2c相关的问题。



本期问题速览


▪ 应用层动态设置i2c速度


▪ I2c 数据线的波形有一个异常的尖峰


▪ 目前使用两组I2C,测试发现,通信失败后I2C0会发送5次,而I2C1只发送一次


▪ [SSD21x/22X]如何修改I2C速率?


▪ 如何修改kernel 下I2C速率?


▪  i2c_read_write工具是否可以设置NO STOP格式的i2c?


▪  i2c设备地址什么时候包含读写位,什么时候不包含读写位?


▪  i2c写设备数据正常,读设备数据全为F


▪  i2c如何开关dma?


▪  【I2C】Uboot阶段如何根据实际硬件连接切换Padmux?





Q1:用户使用过程中可能需要支持多种不同速率的i2c从设备,如何实现在用户层动态设置i2c总线的clk?


A1:适用于SSD22X。用户层来设置i2c clk有下面两种方式:


1. 通过ioctl方式来设置。需要i2c原生驱动这一层提供支持,当前kernel版本的原生驱动并没有提供支持设置i2c clk的命令和接口。


2. 修改sigma平台i2c驱动,提供设置i2c clk的接口。


当前我们选择在sigma的i2c驱动这一层做修改,添加“speed”属性节点,支持echo方式修改和以文件方式打开修改。相关修改如下:

20230810_support_set_i2c_speed.rar


当前i2c支持clk:



添加speed节点,支持动态设置i2c clk,设置方法如下。
查看i2c clk信息:



设置i2c clk,共0~9十个档位,分别对应i2c支持的十个档位的clk:




注意,主控一般是预设好i2c总线的频率,然后在和外设通讯过程中保持频率不变。应用层需要保证在设备工作前设定好总线频率,在设备工作过程中不会去修改i2c总线频率。


点击阅读原文



Q2:I2c 数据线的波形有一个异常的尖峰



A2:目前释放sda是i2c硬件的行为,硬件ip 在第八个clk 结束就释放sda了,所以导致了这个尖峰。参照I2C标准,clk为低的时候.这个尖峰不影响使用。


点击阅读原文



Q3:目前使用两组I2C,测试发现,通信失败后I2C0会发送5次,而I2C1只发送一次


→点击阅读全文




如您在开发的过程中遇到i2c相关问题,或您需要技术支持选型支持商务支持,欢迎进入Comake社区开发论坛发帖咨询,社区技术工程师和运营人员将会及时响应您的诉求。



往期回顾


周五见| SSD21X/22X相关问题讲解


周五见| SSD22X相关问题讲解


周五见| SSD20X相关问题讲解


周五见| IQ与PQ相关问题讲解


周五见| mipi相关问题讲解





扫码进入论坛

原厂答疑|产品选型|官方资源



扫码咨询客服

SDK下载|芯片、开发板购买



X 提交 下一题

查看更多