//`timescale 1ns / 1ps
module i2c_control(
clk,
i2c_sclk,
i2c_sdat,
i2c_data,
start,
tr_end,
ack,
rst,
counter,
sdo)
input clk
input [23:0]i2c_data
input start
input rst
// input w_r
inout i2c_sdat
output i2c_sclk
output tr_end
output ack
output [5:0]counter
output sdo
reg sdo
reg sclk
reg tr_end
reg [23:0]sd
reg [5:0]counter
assign i2c_sclk=sclk |(((counter>=4)&(counter<=30))?~clk:0)
assign i2c_sdat=sdo?1'bz:0
reg ack1,ack2,ack3
wire ack=ack1 |ack2 |ack3
always@(negedge rst or posedge clk)begin
if(!rst)counter<=6'b111111
else begin
if(start==0)
counter<=0
else
if(counter<6'b111111)counter<=counter+1
end
end
always@(negedge rst or posedge clk)begin
if(!rst)begin sclk<=1sdo<=1ack1<=0ack2<=0ack3<=0tr_end<=0end
else
case(counter)
6'd0 :begin ack1<=0ack2<=0ack3<=0tr_end<=0sdo<=1sclk<=1end
6'd1 :begin sd<=i2c_datasdo<=0end
6'd2 :sclk=0
6'd3 :sdo<=sd[23]
6'd4 :sdo<=sd[22]
6'd5 :sdo<=sd[21]
6'd6 :sdo<=sd[20]
6'd7 :sdo<=sd[19]
6'd8 :sdo<=sd[18]
6'd9 :sdo<=sd[17]
6'd10 :sdo<=sd[16]
6'd11 :sdo<=1'b1
6'd12 :begin sdo<=sd[15]ack1<=i2c_sdatend
6'd13 :sdo<=sd[14]
6'd14 :sdo<=sd[13]
6'd15 :sdo<=sd[12]
6'd16 :sdo<=sd[11]
6'd17 :sdo<=sd[10]
6'd18 :sdo<=sd[9]
6'd19 :sdo<=sd[8]
6'd20 :sdo<=1'b1
6'd21 :begin sdo<=sd[7]ack2<=i2c_sdatend
6'd22 :sdo<=sd[6]
6'd23 :sdo<=sd[5]
6'd24 :sdo<=sd[4]
6'd25 :sdo<=sd[3]
6'd26 :sdo<=sd[2]
6'd27 :sdo<=sd[1]
6'd28 :sdo<=sd[0]
6'd29 :sdo<=1'b1
6'd30 :begin sdo<=1'b0sclk<=1'b0ack3<=i2c_sdatend
6'd31 :sclk<=1'b1
6'd32 :begin sdo<=1'b1tr_end<=1end
endcase
end
endmodule
I2C总线的最大长度是:小于200mm~300mm,跟传输速度、布线等有关系,延长距离可以用I2C中继器芯片,NXP如P82B715、P82B96等等;在标准上没有看到明确规定有效的传输距离。
I2C传输的距离应该取决信号的稳定性,而稳定性由总线负载,传输速度,总线电容,甚至外部干扰等因素决定,因此有可能出现5米的通讯距离换个位置或者加个设备就出问题。
扩展资料:
Hs 模式主机器件有一个SDAH 信号的开漏输出缓冲器和一个在SCLH 输出的开漏极下拉和电流源上拉电路,这个电流源电路缩短了SCLH 信号的上升时间,任何时候在Hs 模式,只有一个主机的电流源有效。
在多主机系统的Hs 模式中,不执行仲裁和时钟同步,以加速位处理能力。仲裁过程一般在前面用F/S 模式传输主机码后结束。
Hs 模式主机器件以高电平和低电平是1:2 的比率产生一个串行时钟信号。解除了建立和保持时间的时序要求,
可以选择Hs 模式器件有内建的电桥。在Hs 模式传输中,Hs 模式器件的高速数据(SDAH)和高速串行时钟(SCLH )线通过这个电桥与F/S 模式器件的SDA 和SCL 线分隔开来,减轻了SDAH 和SCLH 线的电容负载,使上升和下降时间更快。
Hs 模式从机器件与F/S 从机器件的唯一差别是它们工作的速度。Hs 模式从机在SCLH 和SDAH输出有开漏输出的缓冲器。SCLH 管脚可选的下拉晶体管可以用于拉长SCLH 信号的低电平,但只允许在Hs 模式传输的响应位后进行。
Hs 模式器件的输出可以抑制毛刺,而且SDAH 和SCLH 输出有一个施密特触发器;Hs 模式器件的输出缓冲器对SDAH 和SCLH 信号的下降沿有斜率控制功能。
参考资料来源:百度百科-I2C总线
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)