日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]測試基于linux-2.6.27的9G9260開發(fā)板I2C驅(qū)動

1,找到drivers/i2c/busses/i2c-at91.c文件

root@yuanxh-desktop:/home/yuanxh/sam9260/linux-2.6.27-9g9260# vi drivers/i2c/busses/Makefile

在第28行看到:

obj-$(CONFIG_I2C_AT91) += i2c-at91.o

2, 找到drivers/i2c/busses/Kconfig文件

root@yuanxh-desktop:/home/yuanxh/sam9260/linux-2.6.27-9g9260# vi drivers/i2c/busses/Kconfig

在第259行看到:

config I2C_AT91

tristate "Atmel AT91 I2C Two-Wire interface (TWI)"

depends on ARCH_AT91 && EXPERIMENTAL && BROKEN

help

This supports the use of the I2C interface on Atmel AT91

processors.

This driver is BROKEN because the controller which it uses

will easily trigger RX overrun and TX underrun errors. Using

low I2C clock rates may partially work around those issues

on some systems. Another serious problem is that there is no

documented way to issue repeated START conditions, as needed

to support combined I2C messages. Use the i2c-gpio driver

unless your system can cope with those limitations.

說明AT91 I2C標(biāo)準(zhǔn)驅(qū)動不穩(wěn)定,需要用GPIO模擬!!!

3,編譯配置內(nèi)核

root@yuanxh-desktop:/home/yuanxh/sam9260/linux-2.6.27-9g9260# make menuconfig

進入配置菜單添加驅(qū)動到內(nèi)核:

Device Drivers --->

<*> I2C support --->

<*> I2C device interface

I2C Hardware Bus support --->

<*> GPIO-based bitbanging I2C

4, 編譯內(nèi)核生成驅(qū)動

root@yuanxh-desktop:/home/yuanxh/sam9260/linux-2.6.27-9g9260# make

5, 查看內(nèi)核啟動信息

i2c /dev entries driver

i2c-gpio i2c-gpio: using pins 55 (SDA) and 56 (SCL)

6,查看內(nèi)核系統(tǒng)信息

# cat /proc/devices

會看到

Character devices:

...

89 i2c

...

# cat /sys/devices/platform/i2c-gpio/i2c-adapter:i2c-0/name

i2c-gpio-1

7,建立設(shè)備結(jié)點

mknod /dev/i2c-0 c 89 0

8,編譯測試代碼

root@yuanxh-desktop:/home/yuanxh/sam9260/i2ctest-1.0-9g9260# arm-linux-gcc -o i2ctest i2ctest.c

root@yuanxh-desktop:/home/yuanxh/sam9260/i2ctest-1.0-9g9260# cp i2ctest /nfsboot/rootfs/app

9,運行測試代碼

# /app/i2ctest

I2C Test version 1.0-9g9260 (yuanxihua@21cn.com) Buile on Jan 5 2009 00:54:45

buf[0x00] = 0x46

...

附件:

//i2ctest.c

#include

#include

#include

#include

#include

#include linux>

#define CHIP_ADDR 0x50 //24C64

#define PAGE_SIZE 32

#define I2C_DEV "/dev/i2c-0"

static int read_eeprom(int fd,char buff[],int addr,int count)

{

int res;

if (write(fd,&addr,1)!=1)

{

printf("Can't write %s's addr %dn",I2C_DEV,addr);

return -1;

}

res = read(fd,buff,count);

printf("read %d bytes at 0x%02xnr",res,addr);

return res;

}

static int write_eeprom(int fd,char buff[],int addr,int count)

{

int res;

int i;

static char sendbuffer[PAGE_SIZE+1];

memcpy(sendbuffer+1,buff,count);

sendbuffer[0]=addr;

res = write(fd,&addr,count+1);

printf("write %d bytes at 0x%02xnr",res,addr);

return res;

}

int main(void)

{

int fd,i,res;

unsigned char buf[PAGE_SIZE];

printf("I2C Test version 1.0-9g9260 (yuanxihua@21cn.com) Buile on %s %snr",__DATE__,__TIME__);

fd=open(I2C_DEV,O_RDWR);

if(fd<0)

{

printf("Can't Open %s !!!nr",I2C_DEV);

return -1;

}

res = ioctl(fd,I2C_TENBIT,0);

res = ioctl(fd,I2C_SLAVE,CHIP_ADDR);

for(i=0;i

{

// write_eeprom(fd,buf,i,1);

}

for(i=0;i

{

read_eeprom (fd,buf+i,i,1);

printf("buf[0x%02x] = 0x%02xnr",i,buf[i]);

}

close(fd);

return 0;

}

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉