linux下at24c02驱动程序,Linux下iic(i2c)读写AT24C02
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, ®, 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相关推荐
- linux编写gpio驱动程序,linux driver ------ GPIO的驱动编写和调用
判断哪些文件被编译进内核: 1.通过 make menuconfig 查看 2.比如查看gpio类型的文件,输入 ls drivers/gpio/*.o,有生成.o文件表示被编译进内核 在编写驱动程序 ...
- linux cdc设备驱动程序,Linux Kernel 'cdc-wdm' USB设备驱动程序堆缓冲区溢出漏洞
发布日期:2013-03-14 更新日期:2013-03-19 受影响系统: Linux kernel 3.x Linux kernel 2.6.x 描述: --------------------- ...
- STM32CubeMX学习教程之十:硬件I2C读写AT24C02
完整源码下载: https://github.com/simonliu009/STM32CubeMX-hardware-I2C-AT24C02 网上有流传已久一种说法,就是STM的I2C有bug,不好 ...
- STM32基于HAL工程硬件I2C读写AT24C02/04/08数据
STM32基于HAL工程硬件I2C读取AT24C02数据 ✨申明:本文章仅发表在CSDN网站,任何其他网站,未注明来源,见此内容均为盗链和爬取,请多多尊重和支持原创!
- linux usb 总线驱动程序,Linux下的USB总线驱动
一.USB理论 1. USB概念概述 USB1.0版本速度1.5Mbps(低速USB) USB1.1版本速度12Mbps(全速USB) USB2.0版本速度480Mbps(高速USB) U ...
- linux下tp驱动程序,Linux安装TP-Link TL-WN722N 驱动
TL-WN722N的芯片是AR9271,驱动型号是 ath9k_htc 下面是在Linux下安装过程: 01 root@linuxidc www.linuxidc.com:~# lsusb 02 Bu ...
- linux系统安装触摸驱动程序,fc8下怎么安装触摸屏驱动程序?
Unique 于 2008-10-13 09:52:19发表: 参 Linux下触摸屏的简单使用和配置 不知道是不是大家都像我一样忽略了配置笔记本的触摸板,我似乎这些年都一直在用笔记本 工作,学习,娱 ...
- linux 核显驱动程序,支持下代核显 Intel放出Linux图形驱动
[IT168 资讯]虽然Ivy Bridge处理器的发布因为策略原因被推迟到2012年3-4月份,但是Intel在硬件.软件的开发上进展颇为顺利,近日还放出了新款Linux开源图形驱动,已然支持Ivy ...
- linux串口配置驱动程序,Linux下安装PCI转串口卡及USB转串口器的驱动方法
一.PCI转串口卡安装 型号NetMos Nm9835CV 1.插入PCI卡到主机 2.启动 Linux,打开终端 3.输入命令:#setserial /dev/ttyS0 -a (COM-1 ...
最新文章
- 探讨ASP.NET AJAX客户端开发技术
- 'pip' 不是内部或外部命令,也不是可运行的程序
- 关键词热度分析工具_亚马逊卖家: 产品关键词挖掘分析必备工具!
- SATA硬盘如何使用GHOST
- STM32开发 -- md5sum命令
- Byte和byte[]数组
- Kotlin 基础 - 数据类型
- 在自定义Java 9映像上运行Eclipse Neon
- c++两个数组对比去掉重复的元素_30 数组案例
- scala 类中的对象是类_Scala中的类和对象
- java 自动加载jar_JAVA 动态(手动)加载jar文件
- mysql 锁定表_MySQL表锁定
- linux macos 程序员,关于macos:Linux相当于Mac OS X“open”命令
- Java中Jsp和Servlet上传和下载文件
- POJ-1681 Painter's Problem 高消
- JAVA--异常(1)
- hadoop集群配置和在windows系统上运用java操作hdfs
- 家居物联网(IoT)接入控制与认证的再思考
- C# WinForm程序 PDF文档分割代码实现
- PNG-的IDAT解析