我正在寫一個用戶空間程序來使用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