差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
智能接近系统设计 [2018/10/23 15:57]
anran [实验现象]
智能接近系统设计 [2018/10/23 16:00]
anran [实验原理]
行 31: 行 31:
 主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。 主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。
  
-{{:​9-I2C通信时序.png?​500|I2C通信时序}}+{{:​9-I2C通信时序.png?​600|I2C通信时序}}
  
 **<wrap hi>​字节格式</​wrap>​** **<wrap hi>​字节格式</​wrap>​**
行 37: 行 37:
 发送到SDA 线上的每个字节必须为8 位,每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位。首先传输的是数据的最高位(MSB),如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线SCL 保持低电平,迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线SCL 后数据传输继续。 发送到SDA 线上的每个字节必须为8 位,每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位。首先传输的是数据的最高位(MSB),如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线SCL 保持低电平,迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线SCL 后数据传输继续。
  
-{{:​9-I2C字节格式.png?​500|I2C字节格式}}+{{:​9-I2C字节格式.png?​450|I2C字节格式}}
  
 **<wrap hi>​启动和停止</​wrap>​** **<wrap hi>​启动和停止</​wrap>​**
行 98: 行 98:
 通过前面的了解,我们对于整个I2C总线的驱动原理有了一定的了解,接下来我们根据APDS-9901的芯片手册了解其驱动方法及参数要点。 通过前面的了解,我们对于整个I2C总线的驱动原理有了一定的了解,接下来我们根据APDS-9901的芯片手册了解其驱动方法及参数要点。
  
-{{:​9-APDS-9901时序.png?​600|APDS-9901时序}}+{{:​9-APDS-9901时序.png?​700|APDS-9901时序}}
  
 {{:​9-APDS-9901时序参数.png?​600|APDS-9901时序参数}} {{:​9-APDS-9901时序参数.png?​600|APDS-9901时序参数}}
行 318: 行 318:
  
 <code verilog> <code verilog>
-4'd0: begin dev_addr<​=7'​h39;​reg_addr<​=8'​h80|8'​h00;​reg_data<​=8'​h00;​state<​=MODE1;​ end  +4'​d0: ​  ​begin dev_addr<​=7'​h39;​reg_addr<​=8'​h80|8'​h00;​reg_data<​=8'​h00;​state<​=MODE1;​ end  
-4'd1: begin dev_addr<​=7'​h39;​reg_addr<​=8'​h80|8'​h01;​reg_data<​=8'​hff;​state<​=MODE1;​ end  +4'​d1: ​  ​begin dev_addr<​=7'​h39;​reg_addr<​=8'​h80|8'​h01;​reg_data<​=8'​hff;​state<​=MODE1;​ end  
-4'd2: begin dev_addr<​=7'​h39;​reg_addr<​=8'​h80|8'​h02;​reg_data<​=8'​hff;​state<​=MODE1;​ end  +4'​d2: ​  ​begin dev_addr<​=7'​h39;​reg_addr<​=8'​h80|8'​h02;​reg_data<​=8'​hff;​state<​=MODE1;​ end  
-4'd3: begin dev_addr<​=7'​h39;​reg_addr<​=8'​h80|8'​h03;​reg_data<​=8'​hff;​state<​=MODE1;​ end  +4'​d3: ​  ​begin dev_addr<​=7'​h39;​reg_addr<​=8'​h80|8'​h03;​reg_data<​=8'​hff;​state<​=MODE1;​ end  
-4'd4: begin dev_addr<​=7'​h39;​reg_addr<​=8'​h80|8'​h0e;​reg_data<​=8'​h01;​state<​=MODE1;​ end  +4'​d4: ​  ​begin dev_addr<​=7'​h39;​reg_addr<​=8'​h80|8'​h0e;​reg_data<​=8'​h01;​state<​=MODE1;​ end  
-4'd5: begin dev_addr<​=7'​h39;​reg_addr<​=8'​h80|8'​h0f;​reg_data<​=8'​h20;​state<​=MODE1;​ end  +4'​d5: ​  ​begin dev_addr<​=7'​h39;​reg_addr<​=8'​h80|8'​h0f;​reg_data<​=8'​h20;​state<​=MODE1;​ end  
-4'd6: begin dev_addr<​=7'​h39;​reg_addr<​=8'​h80|8'​h00;​reg_data<​=8'​h0f;​state<​=MODE1;​ end +4'​d6: ​  ​begin dev_addr<​=7'​h39;​reg_addr<​=8'​h80|8'​h00;​reg_data<​=8'​h0f;​state<​=MODE1;​ end 
 4'​d7: ​  begin state <= DELAY; dat_valid <= 1'b0; end    //​12ms延时 4'​d7: ​  begin state <= DELAY; dat_valid <= 1'b0; end    //​12ms延时
 4'​d8: ​  begin dev_addr <= 7'h39; reg_addr <= 8'​ha0|8'​h14; ​ state <= MODE2; end  4'​d8: ​  begin dev_addr <= 7'h39; reg_addr <= 8'​ha0|8'​h14; ​ state <= MODE2; end 
行 392: 行 392:
 综合后的设计框图如下: 综合后的设计框图如下:
  
-{{:​9-RTL设计框图.png?​500|RTL设计框图}}+{{:​9-RTL设计框图.png?​800|RTL设计框图}}