Chinaunix首页 | 论坛 | 博客
  • 博客访问: 161367
  • 博文数量: 36
  • 博客积分: 830
  • 博客等级: 准尉
  • 技术积分: 409
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-10 16:23
文章分类
文章存档

2013年(1)

2012年(35)

分类: 嵌入式

2012-11-26 16:50:34

欢迎转载和指导,然后再吐槽!!!

 

重要的符号标志

——————————————

S          1位) :开始位

P           (1 )  :停止位

Rd/Wr       (1 )  :读写位,读,它就等于1,写,它就等于0

A,NA         1位) :应答和非应答位

Addr       7位) I2C 7位地址。注意此地址也可以扩展到10位地址。

Comm        8位) :命令字节,就是一个数据用来选择设备上面的一个寄存器

Data           8位) :普通数据字节。如果是16位数据,我也会写高数据位和低数据位

Count         8位) :  包含块操作长度的数据字节

[. .]                :   I2C设备的数据发送,与之对应的,主控制器数据的发送

 

 

 

简单发送事务

————————————————

这个相当于i2c_master_send

 

S  Addr  Wr  [A]  Data  [A]  Data  [A]  ...  [A]  Data  [A]  P

 

简单接收事务

————————————————

这个就相当于i2c_master_recv

 

       S  Addr  Rd  [A]  [Data]  A  [Data]  A  ...  A [ Data]  NA  P

 

组合事务传输

————————————————

这个就相当于i2c_transfer

 

他们就像上面说的事务那样,但是不是一个停止位P,而是接着一个开始位S发送,然后事务继续进行。一个字节写后面跟着一个字节读得例子:

      

      S  Addr  Rd  [A]  [Data]  NA  S  Addr  Wr  [A]  Data  [A]  P

 

改进的事务传输

————————————————

我们发现一些I2C 设备需要进入如下的修改。

 

       标志 I2C_M_NOSTART

              在一个组合传输中,在某些点上,‘S Addr Wr/Rd [A]’不会产生。例如,在第二部分消息设置I2C_M_NOSTART,产生如下所示的东西:

              S  Addr  Rd  [A]  [Data]  NA  Data  [A]  P

        如果你在第一个部分消息中设置了I2C_M_NOSTART变量,我们不会产生地址,但是会产生开始位S。这个可能会是你适配器上面的client设备产生混乱,所以不要试。

 

       标志 I2C_M_REV_DIR_ADDR

       这个用来切换Rd/Wr标志,也就是说,当你想写的时候,你需要发送Rd而不是Wr,反之亦然。例如:

       S  Addr  Rd  [A]  Data [A]  Data  [A]  ...  [A]  Data  [A]  P

 

标志 I2C_M_IGNORE_NAK

如果从client设备传回的是一个[NA]的话,那么正常的消息就会被马上打断。设置这个的话,就把所有[NA]当做[A]来处理,那么所有的消息继续发送。

 

标志I2C_M_NO_RD_ACK

在读消息中,master控制器的A/NA会被跳过。

阅读(1514) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~