我正在写一个用户空间程序来使用open(),ioctl(),read()和write()对EEPROM进行读取和写入,但它不会我似乎没有按我期望的方式工作。I2C用户空间读/写问题
我想我首先要问的是整个I2C protocol for read and write通过调用read()和write()来处理I2C文件描述符? According to the link here,整个事务由read()和write()处理。
如果是这样,那么read()和write()如何知道从哪个寄存器地址读取?我读过的大多数地方都说要使用传递给read()和write()的数据缓冲区的第一个字节来存储要读取或写入的寄存器地址。但是,如果我正在使用的设备使用16位寄存器地址和寄存器数据呢? read()和write()如何知道地址是8位还是16位?
谢谢,如果需要,我可以提供一些代码片段。
寄存器地址不是I2C协议的一部分,它们是消息的一部分。每个设备都可以为消息定义自己的协议和格式,并根据您使用的设备进行适当的操作。 'read'和'write'不需要*知道寄存器地址有多长,或者*是什么,它们只是移动位。 – hobbs 2014-09-19 20:33:17
设备的规格书/数据表应该包含编程它的信息。 – egur 2014-09-19 20:38:50
你必须错过[你发布的第二个链接]中的这一行代码(https://xgoat.com/wp/2007/11/11/using-i2c-from-userspace-in-linux/):'ioctl (fd,I2C_SLAVE,ADDRESS)' – 2014-09-19 20:44:43