通过 I²C 写入 EEPROM 失败
我正在尝试从用户空间通过 I²C 写入 EEPROM。我正在使用 /dev
设备文件和 open
、read
、write
和 ioctl< /代码> 功能。读取工作没有问题,但是当我使用相同的代码进行写入时(只需将读取替换为写入),它就会失败。 EEPROM 没有写保护(回显到 EEPROM 驱动程序的设备文件中)。
我的代码如下。
if ((fd = open(write_destination, O_RDWR)) < 0) {
goto error;
}
if (ioctl(fd, I2C_SLAVE_FORCE, 0x50) < 0) {
goto error_fd;
}
while((n = write(fd, self->fields[i].buf, self->fields[i].size)) != self->fields[i].size)
perror("");
我在忽略什么?
I'm trying to write into an EEPROM via I²C from user space. I'm using the /dev
device file and the open
, read
, write
and ioctl
functions. Reading works without a problem, but when I use the same code for writing (just replacing read with write), it fails. The EEPROM is not write protected (echoing into the device file of the EEPROM driver works).
The code I have is as follows.
if ((fd = open(write_destination, O_RDWR)) < 0) {
goto error;
}
if (ioctl(fd, I2C_SLAVE_FORCE, 0x50) < 0) {
goto error_fd;
}
while((n = write(fd, self->fields[i].buf, self->fields[i].size)) != self->fields[i].size)
perror("");
What am I overlooking?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
有些 EEPROM 只允许写入少量数据,然后等待,然后再写入更多数据。检查数据表以确定。另外,我建议使用逻辑分析仪来检查发送到 I²C 的命令是否正确 - 我喜欢 www.salae.com 上的分析仪。
Some EEPROMs only allow writing small amounts, then wait, and then write more. Check the datasheet to be sure. Also, I recommend to use a logic analyzer to check the correct commands are going to the I²C - I love the analyzer at www.salae.com.