/***************************************************************
Copyright 2024-2029. All rights reserved.
文件名 : test_15_at24cxx.c
作者 : [email protected]
版本 : V1.0
描述 : 测试at24cxx驱动程序
其他 : 无
日志 : 初版V1.0 2024/02/15
https://blog.csdn.net/mftang/article/details/136203925
***************************************************************/
#include <sys/types.h>
#include <sys/stat.h>
#include <linux/types.h>
#include <linux/i2c-dev.h>
#include <linux/i2c.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <stdlib.h>
#include <linux/fs.h>
#include <unistd.h>
#include <errno.h>
#include <assert.h>
#include <string.h>
#include <time.h>
#define DEV_FILE "/dev/at24cxx"
#define i2c_dev "/dev/i2c-1"
#define AT24CXX_ADDR 0x50
static int fd = -1;
static int at24cxx_drv_init(void)
{
fd = open(i2c_dev, O_RDWR);
if( fd < 0 )
{
close( fd );
printf("%s %s i2c device open failure: %s\n", __FILE__, __FUNCTION__, strerror(errno));
return -1;
}
ioctl(fd, I2C_TENBIT, 0);
ioctl(fd, I2C_SLAVE, AT24CXX_ADDR);
printf("init at24cxx!\r\n");
return fd;
}
int read_page( unsigned char page, unsigned char *rbuff, unsigned char length )
{
unsigned char tempbuff[1];
int i = 0, ret;
tempbuff[0] = page; // address
ret = write(fd, tempbuff, 1);
if( ret < 0 )
{
printf("%d %s %s i2c device write address fail: %s\n", __LINE__, __FILE__, __FUNCTION__, strerror(errno));
close(fd);
return -1;
}
ret = read(fd, rbuff, length);
if( ret < 0 )
{
printf("%d %s %s i2c device read data fail: %s\n", __LINE__ , __FILE__, __FUNCTION__, strerror(errno));
close(fd);
return -1;
}
printf(" read data to at24c02 in address = %d \r\n ", page);
for( i=0; i< length; i++ )
{
printf(" %x \t ", rbuff[i]);
}
printf(" \r\n ");
return 0;
}
int write_page( unsigned char page, unsigned char *buff, unsigned char len)
{
unsigned char tempbuff[len+1];
int i = 0, ret;
printf(" write data to at24c02 in address = %d \r\n ", page);
// step-1: write
tempbuff[0] = page;
for( i=1; i< sizeof(tempbuff); i++ )
{
tempbuff[i] = buff[i-1];
printf(" %x \t ", tempbuff[i]);
}
printf(" \r\n ");
ret = write(fd, tempbuff, sizeof(tempbuff));
if( ret < 0 )
{
printf("%d %s %s i2c device write data failure: %s\n",__LINE__, __FILE__, __FUNCTION__, strerror(errno));
close(fd);
return -1;
}
return 0;
}
/*
int main(void)
{
#define LEN 8 //定义一个page的字节个数
unsigned startpage = 8; // 起始页地址
unsigned char buff[LEN];
unsigned char rbuff[LEN];
int i = 0, index = 0, j= 0;
fd = at24cxx_drv_init();
for( j=0; j < 5; j++ )
{
// write data
for(i = 0; i < sizeof( buff); i++ )
{
buff[i] = 0x20 + index;
index++;
}
write_page( startpage, buff, sizeof( buff));
printf(" \r\n \r\n ");
startpage += 8;
usleep(20000); //20ms
}
startpage = 8;
for( j=0; j < 5; j++ )
{
read_page( startpage, rbuff, sizeof( rbuff));
printf(" \r\n \r\n ");
startpage += 8;
usleep(20000); //20ms
}
return 0;
}
*/
/*
int main(void)
{
#define LEN 8 //定义一个page的字节个数
unsigned startpage = 8; // 起始页地址
unsigned char buff[LEN];
unsigned char rbuff[LEN];
int i = 0, index = 0, j= 0;
fd = at24cxx_drv_init();
// 填充要写的数据
for(i = 0; i < sizeof( buff); i++ )
{
buff[i] = 0x20 + index;
index++;
}
write_page( startpage, buff, sizeof( buff));
printf(" \r\n \r\n ");
usleep(20000); //20ms
// 读取当前页的数据
startpage = 8; // 起始页地址
read_page( startpage, rbuff, sizeof( rbuff));
printf(" \r\n \r\n ");
usleep(20000); //20ms
return 0;
}
*/
int main(void)
{
int fd, ret;
int i = 0;
unsigned char databuff[9];
unsigned char rdatabuff[8];
fd = open(DEV_FILE, O_RDWR);
if (fd == -1){
printf("can not open file: %s \n", DEV_FILE);
return -1;
}
printf("write to at24cxx: \r\n ");
for( i=0; i< sizeof(databuff); i++ )
{
databuff[i] = i;
printf(" %x \t ", databuff[i]);
}
printf(" \r\n \r\n ");
ret = write(fd, databuff, sizeof(databuff));
if( ret < 0 )
{
printf("%d %s %s i2c device write data failure: %s\n",__LINE__, __FILE__, __FUNCTION__, strerror(errno));
close(fd);
return -1;
}
sleep(1);
rdatabuff[0] = 0;
ret = read( fd, rdatabuff, sizeof(rdatabuff));
if( ret < 0 )
{
printf("%d %s %s i2c device read data failure: %s\n",__LINE__, __FILE__, __FUNCTION__, strerror(errno));
close(fd);
return -1;
}
printf("read from at24cxx: \r\n ");
for( i=0; i< sizeof(rdatabuff); i++ )
{
printf(" %x \t ", rdatabuff[i]);
}
printf(" \r\n \r\n ");
sleep(1);
close(fd);
return 0;
}
驱动drv-15-at24c02 对应的测试程序
需积分: 0 38 浏览量
2024-02-21
13:58:56
上传
评论
收藏 2KB ZIP 举报
mftang
- 粉丝: 2777
- 资源: 82
最新资源
- rdf0412-kcu116-pcie-c-2019-1.zip(XILINX KCU116 源码)
- 基于C#语言的winform界面火车票订票系统(源码+实验报告)
- 【华为OD部分真题及讲解】华为OD部分真题及讲解
- 基于Python+Django的京东商品比价系统源码+全部资料(毕业设计).zip
- G460 G560 Z460 Z560的最新BIOS 2.18版(无白名单)
- MetaJUI v0.4
- 基于Python+Django的京东商品比价系统源码+全部资料(毕业设计).zip
- linux常用命令大全
- 立体相机标定-使用OpenCV+Cpp对立体相机进行标定-calibration-附项目源码+流程教程-优质项目实战.zip
- 基于SpringBoot+Mysql开发的酒店管理系统
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈