今天就跟大家聊聊有關(guān)Linux I2C App開發(fā)的示例分析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、網(wǎng)站制作、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、安陽縣ssl等。為成百上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的安陽縣網(wǎng)站制作公司
1 , 頭文件
/linux/i2c-dev.h
2 , 打開文件,請(qǐng)看示例代碼
int file; int adapter_nr = 1; /* I2C適配器編號(hào) */ char filename[20]; snprintf(filename, 19, "/dev/i2c-%d", adapter_nr); file = open(filename, O_RDWR); if (file < 0) { /* 打開失敗 */ exit(1); }
3 , 指定I2C從設(shè)備地址
int addr = 0x40; /* I2C 從機(jī)地址 */ if (ioctl(file, I2C_SLAVE, addr) < 0) { /* 打開失敗 */ exit(1); }
4 , 使用SMBUS API 訪問設(shè)備
5 , SMBUS 詳細(xì)接口時(shí)序說明
標(biāo)記符 | 長度 | 說明 |
---|---|---|
S | 1 bit | I2C啟動(dòng) |
P | 1 bit | I2C停止 |
Rd/Wr | 1 bit | 控制字中的讀寫標(biāo)志位,讀操作為1,寫操作為0 |
A, NA | 1 bit | 應(yīng)答標(biāo)志 |
Addr | 7 bits | 7位I2C地址 |
Data | 8 bits | 字節(jié)數(shù)據(jù) |
Comm | 8 bits | 命令字節(jié),可理解為I2C設(shè)備寄存器地址 |
[..] | N char | I2C設(shè)備返回的數(shù)據(jù) |
6 , 相關(guān)接口及相應(yīng)時(shí)序說明
【1】__s32 i2c_smbus_write_quick(int file, __u8 value);
發(fā)送一個(gè)寫控制字,可用于測(cè)試I2C設(shè)備是否存在。
S Addr Rd [A] [Data] NA P
【2】__s32 i2c_smbus_read_byte(int file);
發(fā)送一個(gè)讀控制字,并從I2C設(shè)備中讀取一個(gè)字節(jié)。
S Addr Rd [A] [Data] NA P
【3】__s32 i2c_smbus_write_byte(int file, __u8 value);
發(fā)送一個(gè)寫控制字,并向I2C設(shè)備中寫入一個(gè)字節(jié)。
S Addr Wr [A] Data [A] P
【4】__s32 i2c_smbus_read_byte_data(int file, __u8 command);
向I2C設(shè)備發(fā)送一個(gè)寫控制字+控制指令(寄存器地址),再發(fā)送一個(gè)讀控制字,此時(shí)I2C從設(shè)備內(nèi)部的讀寫指針轉(zhuǎn)移到指定的位置,并返回一個(gè)字節(jié),最后返回一個(gè)無應(yīng)答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設(shè)備發(fā)送一個(gè)寫控制字+控制指令(寄存器地址),緊接著發(fā)送指令內(nèi)容(寄存器內(nèi)容,單字節(jié))。
S Addr Wr [A] Comm [A] Data [A] P
【6】__s32 i2c_smbus_read_i2c_block_data(int file, __u8 command, __u8 *values);
向I2C設(shè)備發(fā)送一個(gè)寫控制字+控制指令(寄存器地址),再發(fā)送一個(gè)讀控制字,此時(shí)I2C從設(shè)備內(nèi)部的讀寫指針轉(zhuǎn)移到指定的位置,并連續(xù)返回多個(gè)字節(jié),I2C主機(jī)讀取到一定數(shù)量字節(jié)內(nèi)容之后發(fā)送無應(yīng)答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設(shè)備發(fā)送一個(gè)寫控制字+控制指令(寄存器地址),接著發(fā)送發(fā)送指令內(nèi)容(寄存器內(nèi)容,多字節(jié))
S Addr Wr [A] Comm [A] Data [A] Data [A] ... [A] Data [A] P
【注意點(diǎn)1】
這些函數(shù)如果返回-1代表操作失敗。在一些具有寫功能的函數(shù)中,返回0代表操作成功,在具有讀功能的函數(shù)中,返回讀取的字節(jié)數(shù)(除i2c_smbus_read_block_data)。讀塊(block)操作時(shí)不應(yīng)超過32個(gè)字節(jié)。
看完上述內(nèi)容,你們對(duì)Linux I2C App開發(fā)的示例分析有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。