[英]How to get data of BH1750 (light sensor) via on I2C interface using i2c-tools
[英]Cannot use write() or read() calls on I2C device, but echo and i2c-tools work
我試圖從嵌入式Linux(4.6)上的I2C設備讀取和寫入。 我可以使用i2cset
, i2cget
和i2cdetect
與我的設備進行良好的交互。 我也可以使用echo
和ca
t從設備驅動程序讀取/寫入( i2c-ocores
)。
但是,我構建的任何試圖通過調用write()
和read()
來執行此操作的代碼始終會因“連接超時”而失敗。 打開設備文件有效:
fd = open("/dev/i2c-10", O_RDWR);
設置從站地址有效:
ioctl(fd, I2C_SLAVE, addr);
但是寫入或讀取返回-1
並將errno設置為“Connection timed out”
write(fd, buffer, len);
此外,一旦我嘗試以這種方式進行寫入或讀取,它就會破壞I2C總線,我必須重新加載模塊才能讓它再次使用i2c-tools
。 我也嘗試使用各種其他方式寫入i2c驅動程序( ioctl
調用i2c_rdwr_ioctl_data
消息, i2c_smbus_ioctl_data
消息)無濟於事,它們返回相同的錯誤消息。
在我的生活中,我無法想到write()
和read()
調用在我的代碼中的工作方式與i2c-tools
和echo
相比有任何不同。 事實上,我甚至使用i2c-tools
源代碼(busybox 1.26.2)編譯了我的程序,並直接使用了i2cset
和i2cget
使用的相同功能......但它仍然不起作用。
我們非常歡迎任何幫助或建議。
在echo或i2cset調用中使用strace。 在代碼中使用strace。 比較系統調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.