您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關Linux I2C App開發的示例分析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
1 , 頭文件
/linux/i2c-dev.h
2 , 打開文件,請看示例代碼
int file; int adapter_nr = 1; /* I2C適配器編號 */ char filename[20]; snprintf(filename, 19, "/dev/i2c-%d", adapter_nr); file = open(filename, O_RDWR); if (file < 0) { /* 打開失敗 */ exit(1); }
3 , 指定I2C從設備地址
int addr = 0x40; /* I2C 從機地址 */ if (ioctl(file, I2C_SLAVE, addr) < 0) { /* 打開失敗 */ exit(1); }
4 , 使用SMBUS API 訪問設備
5 , SMBUS 詳細接口時序說明
標記符 | 長度 | 說明 |
---|---|---|
S | 1 bit | I2C啟動 |
P | 1 bit | I2C停止 |
Rd/Wr | 1 bit | 控制字中的讀寫標志位,讀操作為1,寫操作為0 |
A, NA | 1 bit | 應答標志 |
Addr | 7 bits | 7位I2C地址 |
Data | 8 bits | 字節數據 |
Comm | 8 bits | 命令字節,可理解為I2C設備寄存器地址 |
[..] | N char | I2C設備返回的數據 |
6 , 相關接口及相應時序說明
【1】__s32 i2c_smbus_write_quick(int file, __u8 value);
發送一個寫控制字,可用于測試I2C設備是否存在。
S Addr Rd [A] [Data] NA P
【2】__s32 i2c_smbus_read_byte(int file);
發送一個讀控制字,并從I2C設備中讀取一個字節。
S Addr Rd [A] [Data] NA P
【3】__s32 i2c_smbus_write_byte(int file, __u8 value);
發送一個寫控制字,并向I2C設備中寫入一個字節。
S Addr Wr [A] Data [A] P
【4】__s32 i2c_smbus_read_byte_data(int file, __u8 command);
向I2C設備發送一個寫控制字+控制指令(寄存器地址),再發送一個讀控制字,此時I2C從設備內部的讀寫指針轉移到指定的位置,并返回一個字節,最后返回一個無應答NA。
S Addr Wr [A] Comm [A] S Addr Rd [A] [Data] NA P
【5】__s32 i2c_smbus_write_byte_data(int file, __u8 command, __u8 value);
向I2C設備發送一個寫控制字+控制指令(寄存器地址),緊接著發送指令內容(寄存器內容,單字節)。
S Addr Wr [A] Comm [A] Data [A] P
【6】__s32 i2c_smbus_read_i2c_block_data(int file, __u8 command, __u8 *values);
向I2C設備發送一個寫控制字+控制指令(寄存器地址),再發送一個讀控制字,此時I2C從設備內部的讀寫指針轉移到指定的位置,并連續返回多個字節,I2C主機讀取到一定數量字節內容之后發送無應答NA。
S Addr Wr [A] Comm [A] S Addr Rd [A] [Data] A [Data] A ... A [Data] NA P
【7】__s32 i2c_smbus_write_i2c_block_data(int file, __u8 command, __u8 length, __u8 *values);
向I2C設備發送一個寫控制字+控制指令(寄存器地址),接著發送發送指令內容(寄存器內容,多字節)
S Addr Wr [A] Comm [A] Data [A] Data [A] ... [A] Data [A] P
【注意點1】
這些函數如果返回-1代表操作失敗。在一些具有寫功能的函數中,返回0代表操作成功,在具有讀功能的函數中,返回讀取的字節數(除i2c_smbus_read_block_data)。讀塊(block)操作時不應超過32個字節。
看完上述內容,你們對Linux I2C App開發的示例分析有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。