问题标签 [i2c]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
5459 浏览

python - python smbus/i2c 频率

我想更改 i2c 总线频率以允许使用稍长的电缆。

我正在使用 python-smbus 包,它工作得很好,但是,我无法找到如何设置总线频率。

我浏览了文档,但找不到任何与设置总线参数相关的东西。

这是可以在 python 中完成的任何事情,还是我需要更低级别的东西?

我正在使用 Raspberry PI,它是一种 ARM 架构。

0 投票
1 回答
303 浏览

pic - PIC16F88、portb.bit6 和 I2C

我的 PIC16F88 有一个奇怪的问题。我有一个通过 I2C 连接的 EEPROM,它可以完美地工作,直到我写入 portb.bit6。从那时起,我开始从我的 EEPROM 中获取垃圾。我尝试明确禁用 Timer 1,它使用 portb.6 进行振荡器输出,但这没有帮助。我尝试从 PIC 引脚(引脚 12)上剪下走线,这样就没有任何物理连接,这没有帮助。我的 C 代码很简单,portb.6 = 0 或 portb.6 = 1。无论哪种方式,通过 I2C 读取 EEPROM 都将永远失败。生成的 ASM 代码看起来不错。这个问题出现在我尝试过的每块板上,所以它没有本地化到一个 PCB。我很迷惑。有什么建议么?

0 投票
1 回答
1863 浏览

linux - 未检测到 OMAP 3 Linux I2C SMBUS 智能电池 (SBS)

我正在使用 OMAP 3730 开发嵌入式 Linux 项目。我们使用的是 3.2.23 版内核。I2C 工作正常,我可以在 2 号总线上看到板上的各种传感器。I2C 总线 #3 仅连接了一个智能电池,我可以卸下电源线,电池保持电路板运行。问题是我无法检测或扫描智能电池。我已经尝试了 i2ctools 中的各种程序,但没有成功。我们将电路板连接到示波器,可以看到总线 #3 上的活动。我还启用了内核中设备驱动程序 > I2C 支持下的每个相关选项。

如何在 i2c 总线上查看我的智能电池?我需要在内核中启用其他功能吗?

0 投票
1 回答
512 浏览

c++ - 软 I²C ping 功能

我正在使用软I²C实现来读取一组 Sensirion SHT21 传感器。我试图找出一种让传感器应答的方法,以查看它们是否实际连接到设备。我正在使用 Arduino,这意味着我的所有代码都是 C/C++

我正在使用的库在这里

用于读取传感器的代码如下:

0 投票
1 回答
1744 浏览

debugging - PIC24HJ256GP610/610A 差异导致的 RTCC 的 I2C 读/写问题?

我在使用 PIC24HJ256GP610A 上的 I2C 模块时遇到问题。我的代码(见下面的片段)在 PIC24HJ256GP610 [注意:不是 610A] 上运行得非常好。我正在使用 I2C 总线与 DS1374 RTCC 进行通信。但是在 610A 上,当尝试使用 I2C 向 RTCC 写入值时轮询 ACKSTAT 位时,它会卡住。此外,大多数情况下,通过 I2C 读取值时 RTCC 值不会增加(有时它确实会增加)。有任何想法吗?处理 I2C 模块的 610 和 610A 之间是否存在配置位/模式/设置差异?我试过换掉 RTCC 芯片,换掉处理器。所以,这里唯一的区别是 I2C 通信在 610 上工作,而不是在 610A 上。

610和610A有什么区别?610 是不再生产的过时部件,还是会继续生产?

在试验、探测信号和使用调试器单步执行时,我注意到了一些事情:

1)。I2C 时钟在即将发送的第 20 个位上无限期变高,如果我暂停调试器,它会在轮询 ACKSTAT 位时卡住。第一位似乎是起始位,然后是 9 个更多位,然后是另一个开始/停止位,然后是 9 个更多位,然后时钟线变为高电平。

2)。当时钟线卡住并使用监视窗口时,I2C1STATbits 寄存器中的值为 0x8008,这意味着从从设备接收到 NACK,并且最后检测到启动(或重复启动)位。

3)。我总是能够从 610 和 610A 的从设备 (RTCC) 中读取数据。然而,有时对于 610A,它的值不会增加,而是保持在某个整数值。我相信当我切断一切电源并重新编程一切时,RTCC 值会发生变化。有时它在读取值时保持不变,并且可能有 25% 的时间在读取值时实际发生变化。

4)。我无法使用 610A 通过 I2C 向 RTCC 写入任何内容。处理器在轮询 ACKSTAT 位时卡住了(我假设是因为它收到了来自 RTCC 的 NACK。)610 工作完美。

工具:MPLAB v8.86、C30 v3.31、ICD3

谢谢你,布拉德

0 投票
0 回答
529 浏览

driver - 如何在 PPC DTS 中添加 rtc 节点?

我是 PPC 设备驱动程序开发的新手,最近在 DTS 中遇到了一个问题。

我们的团队在PPC平台的新开发板上添加了一个rtc芯片rtc-pcf8563。驱动程序可用且正确,但我必须将 DTS 中的设备添加为 rtc 节点。但我不知道如何更改 .dts 资源。

这是关于.dts的代码,@3200是我添加的,我不知道它是否有用。


有谁知道如何正确更改 .dts ?

0 投票
0 回答
2140 浏览

c - 在 PIC32MX 上通过 IC2 写入 EEPROM 失败

图片:PIC32MX564F128L

EEPROM:24AA16

我已经用 C 语言为 PIC 编写了一些代码,以通过 I2C 读取和写入外部 EEPROM。当我使用这些方法写入单个字节,然后再次读取它以进行验证时,它可以工作。如果我更改写入位置,它会起作用,所以我认为寻址是有效的,并且我读回的字节与写入匹配,所以这似乎也有效。到目前为止一切都很好!

然后我将代码扩展为使用相同的例程 100 次,在相邻位置写入不同的字节。IE 在位置 x 到 x + 99 中写入值 0 到 99。然后我继续读回 100 个位置以验证写入,这就是出错的地方。

从各种测试来看,write 方法在同一位置执行所有写入操作,因为 read 方法从第一个位置获取最后一个值 (99),而从其他位置获取任何值 (0xFF)!

示波器显示时钟良好,数据线切换,这是我预期的单次写入工作。

PIC 上的调试显示这些方法使用的地址是连续的,所以我有点困惑为什么所有的写入都在同一个位置执行!我可以更改此位置,但它始终只使用所有值的第一个字节。

有谁知道可能出了什么问题?

我的代码在这里,入口点是testEeprom():

0 投票
0 回答
1697 浏览

c++ - 为 I2C 配置 UM232H

我在为 I2C 通信配置 UM232H 模块 (FTDI) 时遇到了一些问题。他们在 FTDI 的网站上找到了一些示例,但他们所有的示例都不适合我。我不知道我做错了什么。我希望 UM232H 与 PCF8574P 通信。在 PCF8574P 的一个引脚上,我有一个想要闪烁的 LED。这是我得到的设置。我使用了 ftd2xx.h 的头文件,但我仍然得到一个错误,他不能使用 ftStatus 命令或其他东西。

这是我画的示意图

0 投票
2 回答
1267 浏览

verilog - Verilog:I2C 读操作

在 Verilog 仿真中,我必须与 Microchip 的 64K I2C EEPROM 通信。每次从从机获得确认时,我都会在给定的时钟周期内将我的 SDA 驱动到高阻抗。现在,为了从从站获取数据,我是否必须对 SDA 遵循相同的操作?简而言之,是否必须将 SDA 端口驱动到高阻抗状态?

0 投票
1 回答
1049 浏览

c++ - 特定地址块中的 I²C EEPROM 读取错误

我有一个 Arduino 的I²C总线连接到 Microchip PICDEM 2板的 I²C 总线,以对其 32K 字节 EEPROM 进行编程。下面的代码存在读取问题。具体来说,我已经用 16 位计数模式写入了整个 EEPROM,并验证了所有数据都是正确的。

以下代码由 PC 上的 Java 程序驱动。我正在读写 16 字节的页面。我已经监控了来自 PC 的地址,它们都是正确的。返回的数据都是正确的,除了 256 字节的地址块0x0AXX。读取的数据看起来像来自 的行0x9F0。我无法弄清楚为什么会发生错误。

PC接收到的数据都是正确的,除了以下块:

这个块之前和之后的一切都很好,但是 0x0A00 - 0x0AFF 重复了第 0x09F0 行的数据。以下代码用于编写和验证所有计数模式:

这几天我一直在为此苦苦挣扎。任何见解将不胜感激。