在ROCK Model A开发板上开启不了i2c_1接口,有什么解决方案吗?

2023-12-26 11:44:56 提问

修改了配置文件的内容并添加了i2c1,执行更新命令和重启板子过后依然没有成功开启i2c1接口

我来答
浏览 963 次
已有8个回答
斑梨用户8
回答时间:
2023-12-26 14:42:20


在ROCK Model A开发板上开启I2C_1接口,通常需要在启动配置文件中添加正确的设备树覆盖(Device Tree Overlay)。从您提供的截图来看,您已经在配置文件中添加了相关的行来尝试启用I2C_1接口。

如果在修改配置文件并重启开发板后依然无法启用I2C_1接口,您可以尝试以下解决方案:

】确认硬件支持:确保硬件上的I2C_1接口是可用的,并且没有物理损坏。

】检查设备树覆盖:确保dtparam=i2c_arm=on和相关的dtoverlay指令正确无误,并且是针对您的硬件版本。

】更新固件和内核:确保您的开发板固件和内核是最新的,因为有时候老版本的内核可能不支持某些接口或者有bug。

】检查引脚分配:确保I2C_1接口的引脚没有被其他功能占用。在某些板子上,某些引脚可能被多个功能共享,需要在设备树中进行正确配置。

】查看启动日志:检查启动日志(使用dmesg命令),查找有关I2C_1接口的信息,看看是否有错误消息或者相关的提示信息。

】使用命令行工具:使用i2cdetect命令来检测I2C设备,确认I2C_1接口是否在系统级别被识别。

点赞0

举报

斑梨游客f91e6
回答时间:
2023-12-26 16:21:32

按照你的方法试了一下,没有错误提示,但是有一些提示信息

点赞0

举报

斑梨游客f91e6
回答时间:
2023-12-26 16:48:56

这类打印信息具体指的是什么意思呢?

点赞0

举报

斑梨用户8
回答时间:
2023-12-26 18:31:02

从您提供的dmesg日志输出来看,显示了与I2C相关的一些信息:

】i2c /dev entries driver:这通常表示系统已经识别了I2C驱动,并且已经为I2C设备创建了相应的/dev入口。

】input: rk805 pwrkey as /devices/platform/ffdd0000.i2c/i2c-0/0-0020/rk805-pwrkey/input/input0:这行信息表明系统已经检测到一个设备(可能是电源键),它通过I2C接口与名为rk805的设备通信。

】rk3x-i2c ff5e0000.i2c: timeout, ipd: 0x00, state: 2:这表示有一个超时错误发生在地址为ff5e0000的I2C控制器上。ipd指的是中断挂起寄存器(Interrupt Pending Register),0x00表示没有中断挂起。state: 2可能表示控制器在某种状态下遇到了超时,这通常是由于I2C设备没有响应发出的请求。

这类信息通常指示以下情况:

】I2C总线上可能存在通信问题。

】相关的I2C设备可能未正确响应或未按预期工作。

】如果这是尝试通信时的超时,那么可能是设备未正确连接,或者I2C总线速率设置不当,或者设备本身就有问题。

为了进一步诊断问题,您可以尝试以下操作:

】确认设备连接:检查I2C设备的物理连接,确保没有接触不良或断路的情况。

】检查设备地址:确认您尝试通信的设备地址是否正确。

】调整总线速率:如果I2C总线速率设置得太高,一些设备可能无法正常通信。尝试降低速率看看是否有改善。

】使用I2C工具进行测试:使用i2cdetect等工具来扫描I2C总线上的设备,看是否能够检测到您的设备。

】参考数据手册:查阅相关的设备数据手册,了解超时和中断寄存器的具体含义。

点赞0

举报

斑梨游客f91e6
回答时间:
2023-12-27 09:55:46

现在没有连接i2c设备,其他的i2c接口(i2c2-m0、i2c3-m0)都可以正常打开或者关闭,而i2c1这个接口打不开

点赞0

举报

斑梨用户8
回答时间:
2023-12-27 10:51:20

了解您的情况,我们来尝试其他方法。既然I2C_1接口无法启用,而其他接口工作正常,我们可以专注于软件配置和可能的冲突。这里是您可以独立尝试的一些更具体的技术步骤:


】对比设备树:


对比I2C_1和其他工作正常的I2C接口在设备树(DTS文件)中的配置差异。

确保I2C_1没有被定义为专用于某个特定功能,如摄像头或触摸屏。

】核对加载的设备树覆盖:

确保在启动时加载的设备树覆盖(DTO)文件包含了I2C_1接口的支持。

使用fdtget或类似工具检查运行时的设备树状态。


】检查内核日志:

使用dmesg | less查看内核日志中I2C_1相关的全部信息,而不只是包含“i2c”的行。

寻找任何可能表明硬件地址冲突、资源未被正确分配或驱动加载失败的信息。


】验证内核配置:

确认内核配置中包含了对应I2C_1的支持。

如果有必要,您可以重新编译内核,确保所有相关选项都被选中。


】硬件资源冲突:

检查I2C_1所用的GPIO引脚是否可能与其他功能(比如PWM、SPI)有冲突。

在开发板的硬件文档中查找引脚复用信息。


】尝试手动激活I2C_1:

如果可能的话,尝试手动通过写入寄存器的方式激活I2C_1接口。

使用工具如i2cset或devmem2来直接与硬件寄存器交互。


】利用其他工具:

使用i2cdetect来扫描所有I2C总线,查看I2C_1是否被列出。

使用i2cdump来尝试从I2C_1读取数据,即使没有设备连接也可以尝试。


】操作系统问题:

如果可能,尝试在另一个操作系统或发行版上启用I2C_1,例如使用不同的Linux内核版本或发行版。


】硬件测试:

如果有可能,使用逻辑分析仪检查I2C_1的物理引脚,看看是否有任何信号。

点赞0

举报

斑梨游客f91e6
回答时间:
2023-12-28 17:56:02

有没有可用的API来实现软件i2c呢?

点赞0

举报

斑梨游客95f04
回答时间:
2023-12-29 09:31:27


在Linux系统中,如果硬件I2C不工作或者需要额外的I2C总线,您可以使用软件模拟的I2C总线,也称为bit-banging。Linux内核提供了一个叫做i2c-gpio的驱动,可以通过GPIO引脚来模拟I2C总线的功能。


要启用软件模拟的I2C总线,您需要做以下几步:


】加载i2c-gpio和i2c-dev模块:

modprobe i2c-dev

modprobe i2c-gpio


】配置GPIO引脚:

您需要指定用于模拟I2C的SCL和SDA的GPIO引脚。这可以通过在设备树中添加一个新的节点来完成,或者在某些系统上,可以通过命令行参数直接传递给i2c-gpio模块。例如:

modprobe i2c-gpio busnum=3 scl=23 sda=24

这里,busnum是您希望分配给新I2C总线的编号,scl和sda是用作I2C时钟线和数据线的GPIO引脚编号。


】创建设备节点(如果系统没有自动创建):

一旦模块加载,应该会在/dev目录下创建一个新的I2C设备节点,例如/dev/i2c-3。


】使用I2C工具:

然后,您可以使用i2c-tools提供的工具,如i2cdetect、i2cget、i2cset等,通过新的软件I2C总线与设备通信。


请注意,使用软件模拟的I2C总线的性能会比硬件I2C总线差,且对CPU的占用率较高。此外,您需要确保选择的GPIO引脚没有被系统中的其他服务或功能使用。


在进行这些更改之前,请确保阅读相关的内核文档和您的开发板文档,以了解如何安全地配置和使用i2c-gpio接口。

点赞0

举报

价格: ¥286/1050
型号: ROCK3
制造商: Radxa