I2C總線(xiàn)在Linux系統中的驅動(dòng)設計
由于各模塊間有上下層關(guān)系,則加載模塊順序應是從上到下,最先加載i2c-core,最后加載i2c-s3c2410。而卸載則順序相反。加載模塊i2c-algo-s3c2410時(shí),必須延時(shí)1 s以等待該模塊初始化完成,否則無(wú)法加載下一個(gè)模塊i2c-s3c2410。
5 對驅動(dòng)文件的使用
Linux的/dev/目錄下創(chuàng )建設備節點(diǎn)i2c成功后,就可使用LINUX提供的一系列函數實(shí)現驅動(dòng),這些函數包括ioctl(),open(),close(),read()與write()等。
5.1 ioctl()函數的使用
I2C總線(xiàn)控制器驅動(dòng)(字符型)提供ioctl()函數用于設定I2C總線(xiàn)控制器的一些參數,該函數常用命令有:
(1)I2C_SLAVE第2參數取值為I2C從機地址,用來(lái)設定I2C從機地址;I2C_SLAVE_FORCE:第2參數取值為I2C從機地址,用來(lái)修改I2C從機地址;I2C_TENBIT:第2參數取值為0:從機地址為7 bit;第2參數取值為1:從機地址為10bit。用來(lái)指定I2C從機地址的位數;I2C_S3C2410_SET_SPEED:第2參數取值為I2C總線(xiàn)控制器分頻值。用來(lái)設置I2C總線(xiàn)控制器時(shí)鐘頻率;
(2)常用設置設置I2c從機地址為0xA0,由于是7 bit地址,所以要右移1位:ret=ioctl(fd,I2C_SLAVE,0xA0>>1);指定從機地址為7 bit,ret=ioctl(fd,I2C_TENBIT,0)。
5.2 open(),close()的使用
應用程序要使用本驅動(dòng)來(lái)訪(fǎng)問(wèn)外部I2C器件,首先要通過(guò)open()來(lái)打開(kāi)其驅動(dòng),使用完畢后使用close()將其關(guān)閉。打開(kāi)與關(guān)閉I2C總線(xiàn)控制器驅動(dòng):
5.3 read()與write()函數的使用
用read()與write()函數讀/寫(xiě)I2C總線(xiàn),常用設置如下:
write(fd,data,1);向I2C總線(xiàn)發(fā)送1字節數據data;
假設子地址為0,向有子地址的FC器件寫(xiě)入8個(gè)字節:unsigned char sendbuf[9]={0,1,2,3,4,5,6,7,8);/*第1個(gè)字節0為子地址*/write(fd,sendbuf,9);/*寫(xiě)入8個(gè)字節,第1個(gè)字節為子地址*/從有子地址的I2C器件讀取8個(gè)字節,假設子地址為0:
unsigned char suba=0;recbuf[8];
write(fd,suba,1);/*發(fā)送子地址0*/
read(fd,recbuf,8);/*從子地址0開(kāi)始讀取8個(gè)字節*/
6 結束語(yǔ)
設備驅動(dòng)程序是操作系統內核和機器硬件之間的接口,通過(guò)它可使設備文件化。本文首先介紹I2C總線(xiàn)接口的工作模式和特點(diǎn),簡(jiǎn)要介紹I2C字符型驅動(dòng)模塊的特點(diǎn),研究ARM Linux下的鍵盤(pán)擴展器件ZLG7290驅動(dòng)程序,詳細描述了基于I2C總線(xiàn)通信的鍵值讀取過(guò)程,具有廣泛的應用價(jià)值。
評論