<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 測(cè)試基于linux-2.6.27的9G9260開(kāi)發(fā)板I2C驅(qū)動(dòng)

          測(cè)試基于linux-2.6.27的9G9260開(kāi)發(fā)板I2C驅(qū)動(dòng)

          作者: 時(shí)間:2012-09-11 來(lái)源:網(wǎng)絡(luò) 收藏

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

          本文引用地址:http://www.ex-cimer.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.

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

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

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

          進(jìn)入配置菜單添加到內(nèi)核:

          Device Drivers --->

          *> I2C support --->

          *> I2C device interface

          I2C Hardware Bus support --->

          *> GPIO-based bitbanging I2C

          4, 編譯內(nèi)核生成

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

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

          i2c /dev entries driver

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

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

          # cat /proc/devices

          會(huì)看到

          Character devices:

          ...

          89 i2c

          ...

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

          i2c-gpio-1

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

          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,運(yùn)行代碼

          # /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操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();