linux内核上已有iic的驱动,因此只需要对该iic设备文件进行读写则能够控制外围的iic器件。这里以AT24C02为对象,编写一个简单的

linux内核上已有iic的驱动,因此只需要对该iic设备文件进行读写则能够控制外围的iic器件。这里以AT24C02为对象,编写一个简单的读写应用程序。iic设备文件在我的开发板上 /dev/i2c/0  ,打开文件为可读写。AT24C02的器件地址为0x50 ,既是iic总线上从器件的地址,,每次只读写一字节数据。

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

//文件名:app_at24c02.c

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

//使用说明: (1)

//          (2)

//          (3)

//          (4)

//作者:jammy-lee

//日期:2010-02-08

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

//包含头文件

#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, &reg, 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下at24c02驱动程序,Linux下iic(i2c)读写AT24C02相关推荐

  1. linux编写gpio驱动程序,linux driver ------ GPIO的驱动编写和调用

    判断哪些文件被编译进内核: 1.通过 make menuconfig 查看 2.比如查看gpio类型的文件,输入 ls drivers/gpio/*.o,有生成.o文件表示被编译进内核 在编写驱动程序 ...

  2. linux cdc设备驱动程序,Linux Kernel 'cdc-wdm' USB设备驱动程序堆缓冲区溢出漏洞

    发布日期:2013-03-14 更新日期:2013-03-19 受影响系统: Linux kernel 3.x Linux kernel 2.6.x 描述: --------------------- ...

  3. STM32CubeMX学习教程之十:硬件I2C读写AT24C02

    完整源码下载: https://github.com/simonliu009/STM32CubeMX-hardware-I2C-AT24C02 网上有流传已久一种说法,就是STM的I2C有bug,不好 ...

  4. STM32基于HAL工程硬件I2C读写AT24C02/04/08数据

    STM32基于HAL工程硬件I2C读取AT24C02数据 ✨申明:本文章仅发表在CSDN网站,任何其他网站,未注明来源,见此内容均为盗链和爬取,请多多尊重和支持原创!

  5. linux usb 总线驱动程序,Linux下的USB总线驱动

    一.USB理论 1.      USB概念概述 USB1.0版本速度1.5Mbps(低速USB) USB1.1版本速度12Mbps(全速USB)  USB2.0版本速度480Mbps(高速USB) U ...

  6. linux下tp驱动程序,Linux安装TP-Link TL-WN722N 驱动

    TL-WN722N的芯片是AR9271,驱动型号是 ath9k_htc 下面是在Linux下安装过程: 01 root@linuxidc www.linuxidc.com:~# lsusb 02 Bu ...

  7. linux系统安装触摸驱动程序,fc8下怎么安装触摸屏驱动程序?

    Unique 于 2008-10-13 09:52:19发表: 参 Linux下触摸屏的简单使用和配置 不知道是不是大家都像我一样忽略了配置笔记本的触摸板,我似乎这些年都一直在用笔记本 工作,学习,娱 ...

  8. linux 核显驱动程序,支持下代核显 Intel放出Linux图形驱动

    [IT168 资讯]虽然Ivy Bridge处理器的发布因为策略原因被推迟到2012年3-4月份,但是Intel在硬件.软件的开发上进展颇为顺利,近日还放出了新款Linux开源图形驱动,已然支持Ivy ...

  9. linux串口配置驱动程序,Linux下安装PCI转串口卡及USB转串口器的驱动方法

    一.PCI转串口卡安装  型号NetMos Nm9835CV 1.插入PCI卡到主机 2.启动 Linux,打开终端 3.输入命令:#setserial  /dev/ttyS0 -a   (COM-1 ...

最新文章

  1. 探讨ASP.NET AJAX客户端开发技术
  2. 'pip' 不是内部或外部命令,也不是可运行的程序
  3. 关键词热度分析工具_亚马逊卖家: 产品关键词挖掘分析必备工具!
  4. SATA硬盘如何使用GHOST
  5. STM32开发 -- md5sum命令
  6. Byte和byte[]数组
  7. Kotlin 基础 - 数据类型
  8. 在自定义Java 9映像上运行Eclipse Neon
  9. c++两个数组对比去掉重复的元素_30 数组案例
  10. scala 类中的对象是类_Scala中的类和对象
  11. java 自动加载jar_JAVA 动态(手动)加载jar文件
  12. mysql 锁定表_MySQL表锁定
  13. linux macos 程序员,关于macos:Linux相当于Mac OS X“open”命令
  14. Java中Jsp和Servlet上传和下载文件
  15. POJ-1681 Painter's Problem 高消
  16. JAVA--异常(1)
  17. hadoop集群配置和在windows系统上运用java操作hdfs
  18. 家居物联网(IoT)接入控制与认证的再思考
  19. C# WinForm程序 PDF文档分割代码实现
  20. PNG-的IDAT解析

热门文章

  1. 未来计算机 教学反思,计算机基础教学反思.doc
  2. python实例练习(12)身体质量指数BMI计算
  3. 怎么给word插入页码,详细图文教学,轻松学会
  4. 自己动手写CSDN博客提取器源码分析之三:处理网页保存为pdf文件
  5. 《多元统计分析与R语言》实验2【因子分析】
  6. 面试官系列- 你真的了解 http 吗
  7. 从Hadoop到Spark、Flink,大数据处理框架十年激荡发展史!
  8. 洛谷[P3374] [P3368]树状数组(线段树解法)
  9. BUUCTF misc第二页WP
  10. 设计LDO电路需考虑因素