问题标签 [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 投票
4 回答
2365 浏览

c++ - 错误定义在哪里?用于 i2c 的示例 linux c/c++ 程序

当经典的 linux c/c++ 软件出现问题时,我们有一个神奇的变量 errno,它为我们提供了刚刚出错的线索。

但是这些错误是在哪里定义的?

让我们举个例子(它实际上是 Qt 应用程序的一部分,因此是 qDebug())。

下一步是查看 errno 是什么,以便我们决定是退出还是尝试解决问题。

所以我们可能会在这一点上添加一个 if 或 switch。

我的问题是在哪里可以找到“9”代表的错误?我不喜欢我的代码中那种神奇的数字。

/谢谢

0 投票
1 回答
1348 浏览

sleep - Failed TWI transaction after sleep on Xmega

we've had some troubles with TWI/I2C after waking up from sleep with the Atmel Xmega256A3. Instead of digging into the details of TWI/I2C we've decided to use the supplied twi_master_driver from Atmel attached to AVR1308 application note.

The problem is one or a few failed TWI transactions just after waking up from sleep. On the I2C-bus connected to the XMega we have a few potentiometers, a thermometer and an RTC. The XMega acts as the only master on the bus.

We use the sleep functions found in AVRLIBC:

The XMega as woken from sleep by the RTC which sets a pin high. After the XMega is woken from sleep, we want to set a value on one of the potentiometers, but this fails. For some reason, the TWI-transaction result is TWIM_RESULT_NACK_RECEIVED instead of TWIM_RESULT_OK in the first transaction. After that everything seems to work again.

Have we missed anything here? Is there any known issues with the XMega, sleep and TWI? Do we need to reset the TWI of clear any flags after waking from sleep?

Best regards Fredrik

0 投票
2 回答
217 浏览

android - 基于 Tegra 的机器人平台

我正在研究开发运行 Android 的基于 Tegra 的机器人平台的可能性。为此,我需要能够进行串行、I2C 和可能的 PWM 通信,Tegra 平台是否允许这样做?Android 是否支持访问这种硬件级别的通信?

0 投票
1 回答
1120 浏览

c - 使用 i2c 总线访问驱动程序时出现未知的核心转储

目前我正在为 Arm 9 嵌入式应用程序开发两个驱动程序。它们都是 i2c 驱动程序,每个都使用 IO 扩展器 pcf8575。我已经独立测试了驱动程序,但是当我将它们都编译到内核中并运行我的主应用程序时,我得到了下面的核心转储。它通常不会在第一次驱动程序访问期间发生。这似乎是随机发生的。当我的驱动程序调用 i2c 驱动程序在 I2c 总线上传输时肯定会发生这种情况(i2c_master_send(client, &buff[0], count) )。我将附上我的两个驱动程序的主要文件。它们很相似,都非常简单。我已经独立地对它们进行了很多测试。通过在两个非常不同的硬件上获得相同的结果,我已将其排除为硬件问题。我想我 我什至不确定它何时说内核分页请求甚至开始查找。我很难相信问题出在 i2c-core 驱动程序中,但这是它正在死去的代码部分。

这是pcf8575 lcd驱动程序文件(另一个驱动程序几乎是一个剪切和粘贴,它被设置为读取而不是写入)

0 投票
1 回答
2419 浏览

c - i2c 设备的 linux 驱动程序——读取两个字节

我正在尝试为似乎与典型设备略有不同的 I2C 设备编写 Linux 驱动程序。具体来说,我需要连续读取两个字节,中间不发送停止位,如下所示:

我已经研究了几种方法,包括 i2c_transfer()、i2c_master_send() 和 i2c_master_recv(),但我不确定它们是否支持这些。有没有什么方法可以直接使用这些功能而不是非常痛苦?到目前为止,我发现的文档对此事还不是很清楚。

EDIT#1:添加符号键使其可读。礼貌http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/i2c/i2c-protocol

0 投票
3 回答
15881 浏览

linux - 如何访问 i2c 设备驱动程序节点

情况一:

我有一个 i2c 芯片驱动程序作为 linux 内核的一部分。我可以从内核启动消息中验证 i2c 芯片驱动程序是否在内核中(我的芯片驱动程序是 mma8450)

dmesg:

我也可以在(0x1c 是芯片的 i2c 地址)中看到这个驱动程序

我在 /dev 接口中看不到此驱动程序节点。我的问题是如何在 /dev 中创建此设备的节点,以便我可以在用户程序中访问此设备?

情况2:

我创建了相同芯片驱动程序的模块并且没有使其成为内核的一部分。我可以使用 insmod mma8450 加载此模块,我如何创建此设备的节点,因为我没有它的主要/次要编号?(我在 mma8450 源代码中看不到分配给此驱动程序的主要和次要编号)

任何帮助表示赞赏

问候

0 投票
1 回答
494 浏览

linux - 在 linux 中与 i2c 设备通信时遇到问题

我在与 linux 中的 i2c 设备通信时遇到问题。该设备连接到通常显示为 /dev/i2c-0 的 SMBus。我的驱动程序的 init 函数被调用,驱动程序通过 i2c_add_driver 注册,但是驱动程序永远不会被探测。

在我的硬件板的初始化函数中,我调用了 i2c_register_board_info(n, i2c_board_info, array_size)。这里 n 应该是 0 以便在 SMBus 上注册设备,但是无论我将 n 设置为什么,都会导致 SMBus 显示为 /dev/i2c-(n + 1)。

有任何想法吗?

0 投票
1 回答
404 浏览

c# - I2CDevice.CreateReadTransaction() 和 new I2CDevice.I2CReadTransaction() 有什么区别?

我正在研究.NET MF I2C API,我有点困惑。似乎有多种方法可以创建 I2C 事务。

我可以使用I2CDevice.CreateReadTransaction方法,也可以简单地创建一个新的I2CDevice.I2CReadTransaction对象。我很困惑有什么区别。两者都采用相同数量的参数。

0 投票
2 回答
922 浏览

linux-kernel - 如何修补 linux 内核以添加陀螺仪支持

我正在尝试将 Invensense 的 MPU3000/3050 与嵌入式 linux(基于 ARM 的 LPC3141 板,嵌入式艺术家)一起使用。我在网上找到了这个有趣的补丁

https://patchwork.kernel.org/patch/703991/

如何在我的内核中实现它?

0 投票
1 回答
482 浏览

linux-kernel - 为 Linux 驱动程序添加设备数据结构和注册

我正在添加一个陀螺仪/加速度驱动程序 (Invensense MPU3050),可在此处用于我的内核 (LPC Linux)。我使用 LTIB 来构建映像和 rootfs。

我设法添加了所有文件,并且驱动程序可用并且可以完美编译!现在我需要在“board-generic.c”文件(README)的 i2c_board_info_structure 中添加一个 mpu3050_platform_data 结构,然后在同一个“board-generic.c”文件中添加一些行来注册它。

问题是,我找不到这个/这些文件/s。他们的名字是否取决于 linux 发行版?相同的信息是否写在其他地方?