您的位置:網站首頁 > 電器維修資料網 > 正文 >
測試9G9260開發板I2C驅動
來源: 日期:2013-12-12 11:13:56 人氣:標簽:
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標準驅動不穩定,需要用GPIO模擬!!!
3,編譯配置內核
root@yuanxh-desktop:/home/yuanxh/sam9260/linux-2.6.27-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(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;
}
【看看這篇文章在百度的收錄情況】
相關文章
- 上一篇: 正確選用壓力變送器六點因素
- 下一篇: 天線的幾個特性