linux I2C读写EEPROM

发布者:数字冒险最新更新时间:2018-07-15 来源: eefocus关键字:linux  I2C读写  EEPROM 手机看文章 扫描二维码
随时随地手机看文章


/************************************************************/

//文件名:app_at24c02.c

//功能:测试linux下iic读写at24c02程序

/************************************************************/

//包含头文件

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

 

//宏定义

#define Address 0x50                  //at24c02地址

 

#define I2C_RETRIES   0x0701

#define I2C_TIMEOUT   0x0702

#define I2C_SLAVE     0x0703       //IIC从器件的地址设置

#define I2C_BUS_MODE   0x0780

 

typedef unsigned char uint8;

 

uint8 rbuf[8] = {0x00}; //读出缓存

uint8 wbuf[8] = {0x01,0x05,0x06,0x04,0x01,0x01,0x03,0x0d}; //写入缓存

int fd = -1;

 

//函数声明

static uint8 AT24C02_Init(void);

static uint8 i2c_write(int fd, uint8 reg, uint8 val);

static uint8 i2c_read(int fd, uint8 reg, uint8 *val);

static uint8 printarray(uint8 Array[], uint8 Num);

 

 

//at24c02初始化

static uint8 AT24C02_Init(void)

{

  fd = open("/dev/i2c/0", O_RDWR);   //允许读写

  

  if(fd < 0)

    {

        perror("Can't open /dev/nrf24l01 \n"); //打开iic设备文件失败

        exit(1);

    }

    

    printf("open /dev/i2c/0 success !\n");   //打开iic设备文件成功

    

  if(ioctl(fd, I2C_SLAVE, Address)<0) {    //设置iic从器件地址

                printf("fail to set i2c device slave address!\n");

                close(fd);

                return -1;

        }

        

  printf("set slave address to 0x%x success!\n", Address);

        

    if(ioctl(fd, I2C_BUS_MODE, 1)<0)     //设置iic总线模式

            printf("set bus mode fail!\n");

    else

            printf("set bus mode ok!\n");

    

    return(1);

}

 

/*

uint8 AT24C02_Write(uint8 *nData, uint8 Reg, uint8 Num)

{

  write(fd, &Reg, 1);  //

  usleep(100);              //延时100us

  write(fd, nData, Num);

  usleep(1000*4);             //延时 4ms

  

  return(1);

}

uint8 AT24C02_Read(uint8 nData[], uint8 Reg, uint8 Num)

{

  write(fd, &Reg, 1); 

  usleep(100);              //延时100us

  read(fd, nData, Num);

  usleep(1000*4);             //延时 4ms

  

  return(1);

}

*/

 

//at24c02写入一字节

static uint8 i2c_write(int fd, uint8 reg, uint8 val)

{

        int retries;

        uint8 data[2];

 

        data[0] = reg;

        data[1] = val;

        for(retries=5; retries; retries--) {

                if(write(fd, data, 2)==2)

                        return 0;

                usleep(1000*10);

        }

        return -1;

}

 

//at24c02读取一字节

static uint8 i2c_read(int fd, uint8 reg, uint8 *val)

{

        int retries;

 

        for(retries=5; retries; retries--)

                if(write(fd, ®, 1)==1)

                        if(read(fd, val, 1)==1)

                                return 0;

        return -1;

}

 

//输出数组

static uint8 printarray(uint8 Array[], uint8 Num)

{

  uint8 i;

  

  for(i=0;i

  {

    printf("Data [%d] is %d \n", i ,Array[i]);

  }

  

  return(1);

}

 

//主函数

int main(int argc, char *argv[])

{

  int i;

 

  AT24C02_Init();

  usleep(1000*100);

    for(i=0; i

            if(i2c_read(fd, i, &rbuf[i]))

                    break;

  printarray(rbuf ,8);

  printf("Before Write Data \n");

  sleep(1);

    for(i=0; i

            if(i2c_write(fd, i, wbuf[i]))

                    break;

  printarray(wbuf ,8);

  printf("Writing Data \n");

  sleep(1);

    for(i=0; i

            if(i2c_read(fd, i, &rbuf[i]))

                    break;

  printarray(rbuf ,8);

  printf("After Write Data \n");

  

  close(fd);

}


关键字:linux  I2C读写  EEPROM 引用地址:linux I2C读写EEPROM

上一篇:使用I2C读写EEPROM流程总结
下一篇:I2C eeprom调试经验

推荐阅读最新更新时间:2024-03-16 16:08

单片机STC89C52RC 内部EEPROM
单片机运行时的数据都存在于RAM(随机存储器)中,在掉电后RAM 中的数据是无法保留的,那么怎 样使数据在掉电后不丢失呢?这就需要使用EEPROM 或FLASHROM 等存储器来实现。 在传统的单片机系统中,一般是在片外扩展存储器,单片机与存储器之间通过IIC 或SPI 等接口来进行数据通信。 这样不光会增加开发成本,同时在程序开发上也要花更多的心思。在STC 单片机中内置了EEPROM(其实是采用 ISP/IAP 技术读写内部FLASH 来实现EEPROM),这样就节省了片外资源,使用起来也更加方便。下面 就详细介绍STC 单片机内置EEPROM 及其使用方法 STC 各型号单片机内置的EEPROM 的容量最小
[单片机]
单片机STC89C52RC 内部<font color='red'>EEPROM</font>
嵌入式linux在工业控制领域中的应用
摘要:针对嵌入网络设备的应用特点,介绍了嵌入式linux的主要技术及在工业控制领域的应用方法。结合硬件平台详细说明了嵌入式linux系统的主要实现方法同时也简要介绍了该嵌入式系统的实时内核、内存机制和文件系统的设计等内容。 关键词:嵌入式系统;嵌入式linux;工业控制 1 前言 随着Internet的飞速发展,网络应用越来越广泛,对各种工业控制设备的网络功能要求也越来越高。当前的要求是希望工业控制设备能够支持TCP/IP以及其它Internet协议,从而能够通过用户熟悉的浏览器查看设备状态、设置设备参数,或者将设备采集到的数据通过网络传送到Windows或Unix/Linux服务器上的数据库中。这就要求工控系统必须具备两
[嵌入式]
构建arm-linux-gnueabi-gcc-4.6.3交叉编译链
一、准备工作 1、准备文件 binutils-2.22.tar.bz2 gcc-4.6.3.tar.bz2 glibc-2.14.1.tar.xz glibc-ports-2.14.1.tar.gz glibc-linuxthreads-2.5.tar.bz2 gdb-7.4.1.tar.bz2 linux-2.6.38.8.tar.bz2 mpfr-3.1.1.tar.bz2 mpc-1.0.1.tar.gz gmp-5.1.0.tar.bz2 2、建立以下变量,方便稍候的输入 #vim ~/.bashrc export TARGET=arm-linux-gnueabi export PREFIX=/usr/local/ar
[单片机]
ARM矩阵键盘设计及其linux驱动实现
在嵌入式系统开发中,经常通过键盘来实现人机交互。本文介绍了一种直接利用ARM的I/O口扩展矩阵键盘的方法。同时以TQ2440开发板为例,对硬件电路连接和相应的linux驱动设计方法都作了详细说明。 1.引言 ARM微处理器已广泛应用于工业控制、消费类电子产品、通信系统等领域。矩阵键盘是一种常用的键盘形式,它将按键设计成M行N列,这样共需M+N根信号线,却可驱动M×N个按键,大大节约了I/O资源。本文介绍了一种利用TQ2440开发板的GPIO口扩展5×4矩阵键盘的方法,并将所有按键重新布局成手持终端的键盘形式,方便操作。 2.硬件设计 本设计扩展5行4列的矩阵键盘,如图1所示。其中行线ROW1-ROW5连接S3C24
[单片机]
ARM矩阵键盘设计及其<font color='red'>linux</font>驱动实现
Linux基金会宣布出席欧洲LinuxCon + CloudOpen大会的演讲嘉宾
Linux创始人Linus Torvalds和Amazon、ownCloud、XPRIZE等机构的负责人将介绍Linux和开源在各行各业的发展。 Marketwired 2014年6月30日德国杜塞尔多夫消息----致力于促进Linux和协作发展的非营利性组织Linux基金会今天公布了出席欧洲LinuxCon + CloudOpen + Embedded Linux大会的演讲嘉宾名单。大会定于10月13日至15日在杜塞尔多夫会议中心举行。 欧洲LinuxCon大会是欧洲最重要的Linux技术会议,是群英荟萃之地,Linux社区的领先维护者、开发者和项目负责人将在会上作演讲。参加会议的开发者、系统管理员、架构师及各类专
[嵌入式]
MSP430F249硬件I2C查询法读写AT24C02
/****************************************************************** ** ** File : I2C.c | Master Read Write | ** Version : 1.0 ** Description : I2C 查询法读写24C02 ** Author : LightWu ** Date : 2013-4-26
[单片机]
MSP430F249硬件<font color='red'>I2C</font>查询法<font color='red'>读写</font>AT24C02
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved