网站首页 > 资源文章 正文
i2c_msg标志位 路径:linux-2.6.38/include/linux/i2c.h
- I2C_M_IGNORE_NAK:
设置这个标志意味当前i2c_msg忽略I2C器件的ack和nack信号。
- I2C_M_NOSTART:
设置这个标志意味当前i2c_msg不发送start信号。注意,其实调用bit_xfer的一开始就已经发了start信号了(程序第10行),这个标记无非就是标志是否发送地址第18行。其次,如果一个i2c_msg没有定义I2C_M_NOSTART而且又不是msgs序列里的第一个i2c_msg,则回发送重复start信号,我想这就是这个标志起这个名的原因。我们可以猜想,
- msgs序列第一个数据必须是地址,同时必须不定义这个标志位
- 在进行读数据,要从写操作转变为读操作时,会发重复start信号和器件地址时,必须不定义这个标志位
- 其它情况下一的i2c_msg必须定义这个标志
以上只是我看完这个函数的理解,不一定正确。同时1和2总结下来就是发器件地址(注意,是器件地址,不是像EEPROM那样的EEPROM地址,这个地址是当数据发的)时会不设置I2C_M_NOSTART, 发数据时就设置I2C_M_NOSTART这个标志。
- I2C_M_NO_RD_ACK:
这个标识表示在正行读操作时不去ACK,我不知道其它芯片如果,如果是AT24C04则一定不能设这个标志位了。
(下面三个标志为均为bit_doAddress函数使用,结合上面的说明,也就是这时I2C_M_NOSTART一定没有设置。)
- I2C_M_RD: 表示这是一个读操作,默认是把相应的位置1
- I2C_M_REV_DIR_ADDR: 表示把读写标志位反转,也就是读是把相应位置0
- I2C_M_TEN: 表示这个器件的器件地址是10Bit的。一定要搞清,这是器件地址,不是指EEPROM的ROM地址。24C02等芯片真正的器件地址只有4位永远有效(0xA),低4位用来放其它东西了(根据容量有可能是器件地址的低3位,或ROM地址的高3位)。也是说,无论什么容量,这类器件的地址只是器件地址我们只选7位模式(内核只区分10位模式和其它模式)
如果要发送以下的序列的话:
则必须用I2C_M_NOSTART | I2C_M_RD一起使用,否则会导致读位依然是写位;
变成以下类型:
参考文章:
Linux I2C framework(2)_I2C provider
猜你喜欢
- 2024-09-27 侧方位停车技巧,可以这样修正方向一把入库
- 2024-09-27 把PLC程序一步步讲明白了,那么PLC编程还会很难嘛?
- 2024-09-27 食品生产日期怎么标示?(食品生产日期怎么写)
- 2024-09-27 为什么CAN一致性测试中这几项如此重要?
- 2024-09-27 漫威6位超级英雄的独有标志,最后一个漫威粉也猜不出来!
- 2024-09-27 IP地址、子网掩码、及ip段-如192.168.0.1/24是什么意思?
- 2024-09-27 美式橄榄球球场的每条线的名称和作用?
- 2024-09-27 老司机用心总结,汽车上按钮图解,收藏起来随时看
- 2024-09-27 形位公差符号:掌握精度,铸就精工制造品质
- 2024-09-27 机械:产品形、位公差及符号分类图解,看公差图不求人
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)