i2c设备的读写地址换算
来源:互联网 发布:凸优化视频 编辑:程序博客网 时间:2024/05/17 23:34
#define MAX_17040_BATTERY_I2C_ADDR (0x36)
#define MAX_17040_BATTERY_WRITE_ADDR (MAX_17040_BATTERY_I2C_ADDR << 1)
#define MAX_17040_BATTERY_READ_ADDR ((MAX_17040_BATTERY_I2C_ADDR << 1) + 1)
一般给出i2c 写地址就可以,读地址i2c核心会去自己算出来。
ioctl函数的使用:原型:struct ioctl(struct file *file,unsigned int cmd,unsigned long arg); cmd有I2C_SLAVE,I2C_SLAVE_FORCE,I2C_TENBIT,I2C_S3C2410_SET_SPEED几个选项; I2C_SLAVE:对应的arg取值为I2C从机地址,用来设定I2C从机地址;
I2C_SLAVE_FORCE:对应的arg取值为I2C从机地址,用来修改I2C从机地址;
I2C_TENBIT:对应的arg取值为0:从机地址为7 bit;对应的arg取值为1:从机地址为10bit。用来指定I2C从机地址的位数;
I2C_S3C2410_SET_SPEED:对应的arg取值为I2C总线控制器分频值。用来设置I2C总线控制器时钟频率;
常用设置设置I2c从机地址为0xA0,如果选用at24c08设备,那么从机是7 bit地址,所以要右移1位,指定从机地址为7 bit,
ioctl(fd,I2C_TENBIT,0)。ioctl(fd,I2C_SLAVE,0xA0>>1);
read()与write()函数的使用 假设子地址为12,向有子地址的器件写进7个字节:
unsigned char buf[8]={12,'s','j','s','u','n','n','y');/*第1个字节12为子地址*/write(fd,buf,9);/*写进7个字节,第1个字节为子地址*/
从有子地址的I2C器件读取7个字节: unsigned char suba=0;recbuf[20]; write(fd,buf,1);/*发送子地址0*/ read(fd,recbuf,7);/*从子地址12开始读取7个字节*/
拿一个项目中的例子说,是一个CTP的i2c地址,
static const struct i2c_device_id tpd_id[] = {{TPD_DEVICE,0},{}};
unsigned short force[] = {0,0xb8,I2C_CLIENT_END,I2C_CLIENT_END}; //82 38 70
static const unsigned short * const forces_pixcir[] = { force, NULL };
static struct i2c_client_address_data addr_data = { .forces = forces_pixcir, };
根据其Datasheet来瞧,他的I2c地址是0x5C,但是你用这个地址在kernel中通过I2c控制器去访问的时候是访问不到的,
需要将这个5C 左移1位 ,得到I2c读地址, 写地址比读地址大1 ,那写地址就是(b8<<1)+1=B9,
#define MAX_17040_BATTERY_WRITE_ADDR (MAX_17040_BATTERY_I2C_ADDR << 1)
#define MAX_17040_BATTERY_READ_ADDR ((MAX_17040_BATTERY_I2C_ADDR << 1) + 1)
一般给出i2c 写地址就可以,读地址i2c核心会去自己算出来。
ioctl函数的使用:原型:struct ioctl(struct file *file,unsigned int cmd,unsigned long arg); cmd有I2C_SLAVE,I2C_SLAVE_FORCE,I2C_TENBIT,I2C_S3C2410_SET_SPEED几个选项; I2C_SLAVE:对应的arg取值为I2C从机地址,用来设定I2C从机地址;
I2C_SLAVE_FORCE:对应的arg取值为I2C从机地址,用来修改I2C从机地址;
I2C_TENBIT:对应的arg取值为0:从机地址为7 bit;对应的arg取值为1:从机地址为10bit。用来指定I2C从机地址的位数;
I2C_S3C2410_SET_SPEED:对应的arg取值为I2C总线控制器分频值。用来设置I2C总线控制器时钟频率;
常用设置设置I2c从机地址为0xA0,如果选用at24c08设备,那么从机是7 bit地址,所以要右移1位,指定从机地址为7 bit,
ioctl(fd,I2C_TENBIT,0)。ioctl(fd,I2C_SLAVE,0xA0>>1);
read()与write()函数的使用 假设子地址为12,向有子地址的器件写进7个字节:
unsigned char buf[8]={12,'s','j','s','u','n','n','y');/*第1个字节12为子地址*/write(fd,buf,9);/*写进7个字节,第1个字节为子地址*/
从有子地址的I2C器件读取7个字节: unsigned char suba=0;recbuf[20]; write(fd,buf,1);/*发送子地址0*/ read(fd,recbuf,7);/*从子地址12开始读取7个字节*/
拿一个项目中的例子说,是一个CTP的i2c地址,
static const struct i2c_device_id tpd_id[] = {{TPD_DEVICE,0},{}};
unsigned short force[] = {0,0xb8,I2C_CLIENT_END,I2C_CLIENT_END}; //82 38 70
static const unsigned short * const forces_pixcir[] = { force, NULL };
static struct i2c_client_address_data addr_data = { .forces = forces_pixcir, };
根据其Datasheet来瞧,他的I2c地址是0x5C,但是你用这个地址在kernel中通过I2c控制器去访问的时候是访问不到的,
需要将这个5C 左移1位 ,得到I2c读地址, 写地址比读地址大1 ,那写地址就是(b8<<1)+1=B9,
- i2c设备的读写地址换算
- I2C设备,读写地址换算
- I2C设备、读写地址的关系
- I2C设备、读写地址的关系
- I2C设备地址的设定
- I2C器件的从设备地址设置
- I2C器件的从设备地址设置
- I2C器件的从设备地址设置
- Arduino 快速 寻找设备的I2C地址
- I2c读写地址
- I2C设备地址
- I2C设备地址
- I2C设备地址介绍
- I2C 设备地址求解
- I2C设备地址注意
- I2C设备地址详解
- I2C设备地址查询
- I2C 设备地址求解
- Linux下Apache+cgi的配置方法。(转) ---设置cgi-bin
- WinCE下测试程序运行时间的方法
- 第一章 .Net 控件开发(WebForm) 开发简单自定义控件(9) 流程和生命周期
- Android Monkey简介
- c控制台学生管理系统
- i2c设备的读写地址换算
- asp.net连接SQL SERVER
- win7让本本更可靠
- 解决Navicat数据传输问题:The‘InnoDB’feature is disabled; you need MySQL built with ‘InnoDB'...
- 200多个js技巧代码
- VB 查询SQL SERVER数据库内容源码 工程下载
- sliverlight学习博客
- SCCM远程控制用户电脑时, 提示Remote Tools is disabled
- C++模版