新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 測試基于linux-2.6.27的9G9260開發板I2C驅動

        測試基于linux-2.6.27的9G9260開發板I2C驅動

        作者: 時間:2012-09-11 來源:網絡 收藏

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

        本文引用地址:http://www.104case.com/article/148411.htm

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

        在第28行看到:

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

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

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

        在第259行看到:

        config _AT91

        tristate Atmel AT91 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標準不穩定,需要用GPIO模擬!!!

        3,編譯配置內核

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

        進入配置菜單添加到內核:

        Device Drivers --->

        *> I2C support --->

        *> I2C device interface

        I2C Hardware Bus support --->

        *> GPIO-based bitbanging I2C

        4, 編譯內核生成

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

        5, 查看內核啟動信息

        i2c /dev entries driver

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

        6,查看內核系統信息

        # cat /proc/devices

        會看到

        Character devices:

        ...

        89 i2c

        ...

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

        i2c-gpio-1

        7,建立設備結點

        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

        #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(fd0)

        {

        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;

        }

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 新田县| 乳源| 祁连县| 江达县| 呼和浩特市| 延吉市| 繁峙县| 巨野县| 肥乡县| 瑞安市| 万州区| 彭阳县| 乌恰县| 开封县| 靖安县| 姜堰市| 德惠市| 漠河县| 肃宁县| 苏尼特左旗| 扶余县| 富蕴县| 谷城县| 磐安县| 隆德县| 桂阳县| 靖州| 上犹县| 三门县| 咸阳市| 平度市| 麟游县| 沭阳县| 桑植县| 佛坪县| 墨江| 双鸭山市| 叙永县| 琼结县| 富宁县| 仲巴县|