Chinaunix首页 | 论坛 | 博客
  • 博客访问: 131039
  • 博文数量: 22
  • 博客积分: 949
  • 博客等级: 准尉
  • 技术积分: 266
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-10 22:31
文章分类

全部博文(22)

文章存档

2012年(1)

2011年(2)

2010年(19)

分类: 嵌入式

2010-12-28 18:11:28

前两天,客户的YACD511SBDBC与我们的芯片无法通信,根据分析是,hold time 的问题,顺便测了几个好使的OV7670的SCCB(其实就是I2C) 读写的波形(数字模式),反正也不能浪费了,在此以记之,供以后参考。

1.     几个基本概念
A)  在数据传输阶段,SDA的变化只能在SCK为低电平的时候,如果在SCK高电平的时候有SDA的变化,则可能表示的是I2C的Start或者Stop
B) Start:当SCK为高时,SDA从高跳变到低表示I2C总线的Start
C) Stop:当SCK为高时,SDA从低跳变到高表示总线的Stop
D)ACK:每次传输8个bit以后,接收方都会有一个回应,如果为低表示ACK,表示OK,如果为高表示NACK,但不表示就有问题,比如Master接收Slave的数据的过程中不想接收了,就可以发送NACK
E)  地址 Address:在寻址段,在7位格式的地址中,发送的8位数据前七位为地址,如下图中的0x42, 最后一位表示此次发起的是读还是写,读为高电平,写为低电平。
F)  子地址 SubAddress:这个东东在I2C的规范里面其实是没有的,不过很多厂家都喜欢整这个,其实就是地址段后面的一个或者两个自己的数据(一般使用写入R/W=0)。比如俺们以前的BB没有这个概率,现在新的BB有了这个概念,还支持8位和16位。
 
 

1.     一个写时序

下面是一个写的地址段,加两个数据段的波形,先发送芯片ID0x42R/W=0, 然后发送两个写入的数据:0x320xb6。

 

 

 

1.     一个写加一个读

先写一个地址段,0x42,然后写入(RW=0subaddress 0x0B。然后重新启动一次传输,发送地址段,0x42, 读取之前写入的subaddress里面的值,读出的值为0x76,因为Master此时为receiver,要终止传输了,所以MasterSalve的回应为NACK。也就是SCCB规范里面的一个2-phase write加一个2-phase read.

 

 

 

4.最后来一个总线上没有设备的波形,上拉很弱

 

 

 

 

 

 

 

 

 

 

 
阅读(4550) | 评论(0) | 转发(0) |
0

上一篇:用FPGA设计LCD 转 VGA

下一篇:I2S波形记录

给主人留下些什么吧!~~