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

c - 如何使用文件描述符刷新写入?

事实证明,对 open() 与 fopen() 的整个误解源于 ARM 上的 Linux 2.6.14 内核中存在错误的 I2C 驱动程序。向后移植一个工作位 bashed 驱动程序解决了我试图在这里解决的问题的根本原因。

我试图找出 Linux (I2C) 中串行设备驱动程序的问题。看来,通过在设备上的写入和读取之间添加定时操作系统暂停(睡眠),事情会工作......(好多了)。

旁白:I2C 的本质是主机读取或写入的每个字节都由线路另一端(从机)上的设备确认 - 改善事情的暂停鼓励我将驱动程序视为异步工作 - 我无法与公共汽车的工作方式相协调。随便...

我想确保刷新写入(而不是使用固定持续时间的暂停),或者以某种方式测试写入/读取事务是否以多线程友好的方式 完成。

使用的问题fflush(fd);是它需要'fd'作为流指针(不是文件描述符),即

我的问题是我需要使用ioctl()不使用流指针的 。IE

建议?

0 投票
2 回答
3150 浏览

sunspot - 你推荐使用 SunSPOT 的 TTL、SPI 还是 I2C

我开始尝试与一些外部组件(Skyetek M1 Mini 或 M1 RFID 扫描仪)接口,而不是支持以下协议 TTL、SPI 或 I2C。我想知道您会推荐其中哪一条路线。现场运行的应用程序需要大量的处理时间(一种持续运行的手势匹配算法)并且资源相当昂贵。

任何有关该主题的链接或来源将不胜感激。

我发现的有用链接:

时间:

谢谢你的帮助。


编辑:

如果它有助于我尝试连接的设备是 Skyetek M1M1 mini。平台/CPU 是 Sun SunSPOT

0 投票
4 回答
51905 浏览

c - 在 Linux 上使用 I2C 进行读/写

我正在尝试读取/写入FM24CL64-GTR FRAM通过地址上的 I2C 总线连接的芯片0b 1010 011

当我尝试写入 3 个字节(数据地址 2 个字节,+ 数据 1 个字节)时,我收到一条内核消息 ( [12406.360000] i2c-adapter i2c-0: sendbytes: NAK bailout.),并且写入返回 != 3。请参见下面的代码:

但是,当我写入 2 个字节,然后再写入另一个字节时,我没有收到内核错误,但是当尝试从 FRAM 读取时,我总是返回 0。这是从 FRAM 读取的代码:

这些函数都没有返回错误值,我也尝试过:

这也成功了,但总是返回 0。这是否表明硬件问题,或者我做错了什么?

在 Linux 上是否有任何用于 FM24CL64-GTR over I2C 的 FRAM 驱动程序,API 是什么?任何链接都会有所帮助。

0 投票
1 回答
3234 浏览

linux - 如何为 i2c 设备编写新的 Linux 驱动程序?

我有一个带有一些 i2c 控制功能的 USB 设备,我想添加一个用户空间 API 来处理这些位。如何将 i2c 支持添加到设备的现有驱动程序?

0 投票
3 回答
8243 浏览

c - I2C ISR 和中断

平台 - ARM9

我有一个通过 I2C 连接到 ARM9 的第三方设备。我的问题是 I2C 读/写发生了变化。看起来 IRQ 线已被断言,但在有数据要读取时从未被取消断言。由于第三方设备对地址包进行 NACK,读取失败。所以任何后续的写入都会失败。

我想知道我的中断处理是否正常。在为 IRQ 提供服务的 ISR 中,我禁用中断,取消注册中断处理程序,然后向任务发出信号以从 I2C 总线读取。最后,我重新启用中断。

当任务为上面发布的信号提供服务时,我尝试从 I2C 总线读取数据,但这失败了。最后,我总是在读取尝试后重新注册 ISR。在处理读取信号期间不会发生中断禁用/启用。

我的问题是读取/写入 I2C 总线时是否需要禁用中断?

选择的编程语言是使用专有 RTOS 的 c。

0 投票
2 回答
4830 浏览

embedded - PIC I2C 从机确认数据

我正在研究 PIC16F88X 的 I2C 协议。我想做的是根据 I2C 上接收到的数据使 I2C 从机能够进行 ACK 或 NACK。

PIC 可以对在线发送的 I2C 地址进行 ACK 或 NACK,但从我读到的内容来看,它总是会在后续接收到的字节上进行 ACK。那是对的吗?

在以下通讯中:

我希望从站能够根据寄存器_值中的值进行确认或确认。如果从机不了解寄存器_值,它不应该 Ack。

有人可以确认这是不可能的,还是告诉我该怎么做?

0 投票
2 回答
1055 浏览

avr - 如何在 AVR Studio 中打开文件?

我有两个 ATMEGA88(主机和从机)通过 I2C 发送测试 [] 正常工作。

工作环境:AVR Studio 使用 C.

我需要的是让主服务器能够向从服务器发送指定的文件,例如 mydoc.txt。

我应该使用另一个应用程序来构建 UI 吗?如何连接不同的 IDE 并使其工作?有专业的吗?还是示例代码?

谢谢!

0 投票
2 回答
2272 浏览

linux - Linux 内核中的 I2C 写确认轮询

这里平淡无奇的反应让我想知道这一点

我一直背负着一个设备(Analog Devices 525x)(来自数据表,第 16 页):

在内部 [EEPROM] 写周期中禁用 I2C 接口。

这似乎不公平,例如“我现在要从沙发上下来,所以暂时不要使用它,因为我让座垫裂开了一个”。老实说,为什么这应该是我的问题?

无论如何,数据表表明确认轮询是答案 - 进入 Linux 内核...... Linux GPIO bit bashed I2C 驱动程序是否提供了这样做的机制? 本质上是发送一个设置了写入位的地址并继续这样做,直到出现 ACK。

我在 ARM 上使用 2.6.14 并带有反向移植的 GPIO 位抨击驱动程序(我认为来自 2.6.19)。

0 投票
5 回答
784 浏览

c - 制作一个指向两个字节的指针

除了呼吸之外,我在所有方面都是新手,如果我不清楚,很抱歉,但这里是:

我在 C 中有一个函数,它通过 I2C 总线将字节写入电路,在头文件中它看起来像这样:

  • hJida:板把手。
  • dwType:I2C 总线的从零开始的编号。
  • bAddr:I2C 总线上设备的地址,写入总线时的完整 8 位。
  • pBytes:指向包含字节的位置的指针。
  • dwLen:要写入的字节数。

如果我只想将一个字节写入地址为 0x98 的电路,我会这样做:

这似乎可行,但如果我想写两个字节,比如 0x10FF,它不会。那么如何创建一个指向两个字节而不是一个字节的指针呢?

谢谢

0 投票
2 回答
309 浏览

communication - 关于基于中断的通信

我们有一个简单的架构:

  1. 主芯片(基于arm9)
  2. PIC控制器

PIC 通过基于中断的 I2C 通信协议与 ARM 通信以传输数据。在中断内部,我们发出一个从 I2C 层(总线)读取数据的任务。

如果数据有限,我们通常不会有太大的问题来读取数据并将其发送到上层。如果这个数据非常大,中断将被捆绑很长时间。

第一个问题是:

  1. 我对吗?

  2. 如果我是对的,如何避免同样的情况?...或者我们可以采取不同的解决方案吗?