簡體   English   中英

不能在I2C設備上使用write()或read()調用,但echo和i2c-tools可以工作

[英]Cannot use write() or read() calls on I2C device, but echo and i2c-tools work

我試圖從嵌入式Linux(4.6)上的I2C設備讀取和寫入。 我可以使用i2cseti2cgeti2cdetect與我的設備進行良好的交互。 我也可以使用echoca 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-toolsecho相比有任何不同。 事實上,我甚至使用i2c-tools源代碼(busybox 1.26.2)編譯了我的程序,並直接使用了i2cseti2cget使用的相同功能......但它仍然不起作用。

我們非常歡迎任何幫助或建議。

在echo或i2cset調用中使用strace。 在代碼中使用strace。 比較系統調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM