差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
智能接近系统设计 [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设计框图}} |