I2C slave address

1. 同一 I2C bus device 之 I2C slaver address 不可一样.
2. 检查 这些 devices , 是否可以变更 I2C slaver address (hardware pin control or software register setting).
3. 若相同 I2C slaver address 之 devices , 要一起使用, 则必须增加 IO pin (device enable signal, ...) 以控制区隔 这些 devices.
 
 
 

I2C设备地址

协议格式中第一个字节(为slave address)由7位地址和一位R/W读写位组成的,这字节是个器件地址。

 

常用IIC接口通用器件的器件地址是由种类型号,及寻址码组成的,共7位。

如格式如下:

D7 D6 D5 D4 D3 D2 D1 D0

1、器件类型:D7-D4 共4位决定的。这是由半导公司生产时就已固定此类型的了,也就是说这4位已是固定的。

 

2、用户自定义地址码:D3-D1共3位。这是由用户自己设置的,通常的作法如EEPROM这些器件是由外部IC的3个引脚所组合电平决定的(用常用的名字如A0,A1,A2)。这也就是寻址码。所以为什么同一IIC总线上同一型号的IC只能最多共挂8片同种类芯片的原因了。

 

3、最低一位就是R/W位,,“0”表示写,“1”表示读(通常读写信号中写上面有一横线,表示低电平)。所以I2C设备通常有两个地址,即读地址和写地址

引用<<i2c 源代码情景分析>>里的话:“i2c 设备的7 位地址是就当前i2c 总线而言的,是“相对地址”。不同的i2c 总线上的设备可以使用相同的7 位地址,但是它们所在的i2c 总线不同。所以在系统中一个i2c 设备的“绝对地址”由二元组(i2c 适配器的ID 和设备在该总线上的7 位地址)表示。”,所以这个函数的作用主要是排除同一i2c总线上出现多个地址相同的设备。

在Verilog中编写I2C(Inter-Integrated Circuit)从设备的代码,通常涉及定义接口、数据传输以及响应主机命令。以下是一个简化的I2C从设备slave端的基本结构: ```verilog module i2c_slave #(parameter ADDRESS = 0x70) ( input wire clk, // I2C时钟信号 input wire sda, // SDA(数据线)输入和输出 input wire scl, // SCL(串行时钟)信号 input wire start, // I2C起始信号 input wire stop, // I2C停止信号 input wire read_write, // 读写指示信号(0=写,1=读) input wire [7:0] data_in, // 当write = 1时的数据输入 output reg [7:0] data_out // 当read = 1时的数据输出 ); // 数据缓冲区 reg [7:0] buffer; // 当处于从模式且收到起始信号时的处理 always @(posedge clk or negedge scl) begin if (start && scl == '0') begin // 初始化标志位 is_transmitting <= 1; address_phase <= 1'b1; data_phase <= 1'b0; end else if (address_phase && scl == '0') begin // 接收地址并进行比较 address <= sda; address_phase <= address_phase + 1; end else if (data_phase && scl == '0') begin // 接收数据或发送缓冲区数据 if (read_write) buffer <= data_in; else sda <= buffer; data_phase <= data_phase + 1; end else if (scl == '1') begin // 数据传输完成后处理停止信号 if (is_transmitting && !stop) begin is_transmitting <= 0; address_phase <= 1'b0; data_phase <= 1'b0; end else begin // 从设备结束响应 stop <= 1; end end end // 其他必要的同步和控制逻辑... // ... endmodule ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值