Я пишу программу пространства пользователя для чтения и записи в/из EEPROM с помощью open(), ioctl(), read() и write(), но это doesn Кажется, я работаю так, как я ожидаю.Проблемы чтения/записи пользовательского пространства I2C
Я предполагаю, что в первую очередь я должен спросить, есть ли все I2C protocol for read and write, обрабатываемые вызовами read() и write() с дескриптором файла I2C? According to the link here, вся транзакция обрабатывается read() и write().
Если это так, то как читать() и write() знать, какой адрес регистра читать? Большинство мест, которые я прочитал, говорят, чтобы использовать первый байт буфера данных, переданный в read() и write(), чтобы сохранить адрес регистра для чтения или записи. Но что, если устройство, с которым я общаюсь, использует 16-битные регистры и регистровые данные? Как читать() и write() знать, если адрес имеет длину 8 или 16 бит?
Спасибо, и я могу предоставить некоторые фрагменты кода, если необходимо.
Адреса регистра не являются частью протокола I2C, они являются частью сообщения. Каждое устройство может определять свой собственный протокол и формат сообщений, и вы делаете то, что подходит для используемого устройства. 'read' и' write' не нуждаются *, чтобы знать, как долго находится адрес регистра, или * что * один, они просто движутся битами. – hobbs
Спецификация/лист данных вашего устройства должен содержать информацию для его программирования. – egur
Вы, должно быть, пропустили эту строку кода в [второй ссылке, которую вы опубликовали] (https://xgoat.com/wp/2007/11/11/using-i2c-from-userspace-in-linux/): 'ioctl (fd, I2C_SLAVE, ADDRESS) ' –