(二十)linux中i2c的ioctl,write,read函數的使用


一、ioctl函數的使用:
原型:struct ioctl(struct file *file,unsigned int cmd,unsigned long arg);
cmd有I2C_SLAVE,I2C_SLAVE_FORCE,I2C_TENBIT,I2C_S3C2410_SET_SPEED幾個選項;
I2C_SLAVE:對應的arg取值為I2C從機地址,用來設定I2C從機地址;

I2C_SLAVE_FORCE:對應的arg取值為I2C從機地址,用來修改I2C從機地址;

I2C_TENBIT:對應的arg取值為0:從機地址為7 bit;對應的arg取值為1:從機地址為10bit。用來指定I2C從機地址的位數;  

I2C_S3C2410_SET_SPEED:對應的arg取值為I2C總線控制器分頻值。用來設置I2C總線控制器時鍾頻率;
 

常用設置設置I2c從機地址為0xA0,如果選用at24c08設備,那么從機是7 bit地址,所以要右移1位,指定從機地址為7 bit,

ioctl(fd,I2C_TENBIT,0)。
ioctl(fd,I2C_SLAVE,0xA0>>1);

read()與write()函數的使用
假設子地址為12,向有子地址的器件寫進7個字節:

unsigned char buf[8]={12,'s','j','s','u','n','n','y');write(fd,buf,9);/*寫進7個字節,第1個字節為子地址*/

從有子地址的I2C器件讀取7個字節:
unsigned char suba=0;recbuf[20];
write(fd,buf,1);/*發送子地址0*/
read(fd,recbuf,7);/*從子地址12開始讀取7個字節*/

 

二、ioctl同read和write區別

ioctl被譽為Unix系統的"瑞士軍刀",他被當作擴充Linux系統功
能一個通用的方法,在Linux系統中被廣泛使用。

ioctl一般用來用戶空間程序和驅動程序模塊之間傳遞控制數
據,ioctl同read和write區別是:
1、ioctl一般是用來傳遞控制參數的,比如:串口的波特率、串口的流控方法(xon/xoff、DTR/DSR、RTS/CTS)等等,一般不
用來傳遞“主要的”數據(我不到合適的詞來說明:)。

2、ioctl的語義一般是非阻塞的,read和write卻省是阻塞的。

3、ioctl的接口是萬能的,ioctl(fd, cmd, arg)第三個參數可以是一個整形變量,也可以是一個指向某種數據結構的指針。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM