• 大小: 61KB
    文件类型: .gz
    金币: 1
    下载: 0 次
    发布日期: 2021-06-06
  • 语言: 其他
  • 标签: I2C  

资源简介

I2C-tools-3.0.0 测试工具。可以检测I2C,显示I2C设备地址,以及对I2C进行通讯测试等

资源截图

代码片段和文件信息

/***************************************************************************
    copyright            : (C) by 2002-2003 Stefano Barbato
    email                : stefano@codesink.org

    $Id: 24cXX.c 4230 2006-11-10 09:22:12Z khali $
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include “24cXX.h“

static int i2c_write_1b(struct eeprom *e __u8 buf)
{
int r;
// we must simulate a plain I2C byte write with SMBus functions
r = i2c_smbus_write_byte(e->fd buf);
if(r < 0)
fprintf(stderr “Error i2c_write_1b: %s\n“ strerror(errno));
usleep(10);
return r;
}

static int i2c_write_2b(struct eeprom *e __u8 buf[2])
{
int r;
// we must simulate a plain I2C byte write with SMBus functions
r = i2c_smbus_write_byte_data(e->fd buf[0] buf[1]);
if(r < 0)
fprintf(stderr “Error i2c_write_2b: %s\n“ strerror(errno));
usleep(10);
return r;
}

static int i2c_write_3b(struct eeprom *e __u8 buf[3])
{
int r;
// we must simulate a plain I2C byte write with SMBus functions
// the __u16 data field will be byte swapped by the SMBus protocol
r = i2c_smbus_write_word_data(e->fd buf[0] buf[2] << 8 | buf[1]);
if(r < 0)
fprintf(stderr “Error i2c_write_3b: %s\n“ strerror(errno));
usleep(10);
return r;
}


#define CHECK_I2C_FUNC( var label ) \
do {  if(0 == (var & label)) { \
fprintf(stderr “\nError: “ \
#label “ function is required. Program halted.\n\n“); \
exit(1); } \
} while(0);

int eeprom_open(char *dev_fqn int addr int type struct eeprom* e)
{
int fd r;
unsigned long funcs;
e->fd = e->addr = 0;
e->dev = 0;

fd = open(dev_fqn O_RDWR);
if(fd <= 0)
return -1;

// get funcs list
if((r = ioctl(fd I2C_FUNCS &funcs) < 0))
return r;


// check for req funcs
CHECK_I2C_FUNC( funcs I2C_FUNC_SMBUS_READ_BYTE );
CHECK_I2C_FUNC( funcs I2C_FUNC_SMBUS_WRITE_BYTE );
CHECK_I2C_FUNC( funcs I2C_FUNC_SMBUS_READ_BYTE_DATA );
CHECK_I2C_FUNC( funcs I2C_FUNC_SMBUS_WRITE_BYTE_DATA );
CHECK_I2C_FUNC( funcs I2C_FUNC_SMBUS_READ_WORD_DATA );
CHECK_I2C_FUNC( funcs I2C_FUNC_SMBUS_WRITE_WORD_DATA );

// set working device
if( ( r = ioctl(fd I2C_SLAVE addr)) < 0)
return r;
e->fd = 

评论

共有 条评论