linux下i2c操作例程

树莓派i2c操作例程,设备文件为:/dev/i2c-1

/*************************************************************************
 *
*************************************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

//---------------------------------------------------------------
#define    ADDR_SLAVE1    0x48
#define    ADDR_SLAVE2    0X49
#define    ADDR_SLAVE3    0X4B


/*****************************************************************
 *
 * **************************************************************/
int openI2CDev(char *dev, int *fd)
{
    int filed;

    filed = open(dev, O_RDWR);
    if ( filed<0 )
    {
        printf("Failed to open %s. \n",dev);
        *fd = (int)NULL;
        return -1;
    } 
    else 
    {
        printf("%s opened \n",dev);
        *fd = filed;
        return 0;
    }
}


/*****************************************************************
 *
 * **************************************************************/
int setI2CSlave(int fd, unsigned char addr_slave)
{
    int ret;

    ret = ioctl(fd, I2C_SLAVE, addr_slave);

    return(ret);
}


/*****************************************************************
 *
 * **************************************************************/
int main(int argc, char *argv[])
{
    int fd;
    int adapter_nr = 1;        // the number of adapter
    char filename[20];
    int ret;
    unsigned char addr_reg = 0x00;
    char buf_i2c[100] = {0};
    unsigned Flag;

    snprintf(filename, 19, "/dev/i2c-%d", adapter_nr);

    ret = openI2CDev(filename,&fd);                                // 打开设备文件
    if ( ret )
    {
        printf("Failed to open %s. \n",filename);
        return -1;
    } 

    ret = setI2CSlave(fd,ADDR_SLAVE1);                            // 设置从机地址
    if( ret )
    {
        printf("Failed to set I2C_SLAVE at address: 0x%x. \n", ADDR_SLAVE1);
        close(fd);
        return -1;
    } 

    buf_i2c[0] = 0x01;                                    // 写寄存器地址(将要读取的地址)
    ret = write(fd, buf_i2c, 1);
    if( ret!=1 )
    {
        printf("write to i2c device failed!\n");
        close(fd);
        return -1;
    }

    ret = read(fd, buf_i2c, 2);                            // 读取数据
    if( ret!= 2 )                                        // read data and check error
    {
        printf("Error : transmit Error \n");
        close(fd);
        return -1;
    }
    else
    {
        Flag = buf_i2c[0] << 8 | buf_i2c[1]; 
        printf("the config register value is: 0x%x.\n",Flag);
    }
    
    close(fd);
    
    return(0);
}

你可能感兴趣的:(linux学习,linux)