是否有其他人在使用TCA9548A I2C多路复用器连接从属设备时遇到问题? 当我直接从微控制器连接到我正在使用的AD7746传感器时,我的代码工作正常,但如果我使用多路复用器,我会收到"I2C Error 2"(I2C错误2)错误。 我的代码和示例输出如下:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
示例输出
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
I2C错误:2-地址接收nack
0
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
代码
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include <i2c_T3.h>
void setup(){
//在此处输入您的设置代码,以便运行一次:
Wire.begin(I2C_MASTER,0x00,I2C_PINS_18_19,I2C_Pullup _EXT,10万);
Serial.begin(9600);
MUX_SELECT(7);//在i2c多路复用器上选择通道
Wire.beginTransmission(0x48);//准备i2c到ad7746设备的传输
wire.write (0x0A);//选择要读取的配置寄存器
wire.endTransmission (I2C_NOSTOP);//发送停止条件将重置ad7746上的地址指针,因此不要这样做
IF (Wire.getError()!= 0)//检查是否有i2c错误
{
Switch(Wire.getError()){
案例1:
serial.println ("I2C错误:1 --数据太长");
中断;
案例2:
serial.println ("I2C错误:2 --地址接收nack");
中断;
案例3:
serial.println ("I2C错误;3 --数据接收nack");
中断;
案例4:
serial.println ("I2C错误:4 --其他错误");
中断;
}
}
wire.requestFrom (0x48,1,I2C_NOSTOP);
UINT8_t数据;
数据= Wire.readByte();
serial.println (数据,bin);
MUX_DESelect ();
}
void loop(){
//将主代码放在此处,重复运行:
}
void mix_select (uint8_t i){
如果(i > 7)返回;
Wire.beginTransmission(0x70);
wire.write (1 << i);
// 上一行使用"位移"。实际上,我们将1乘以2^I,然后使用该值选择多路复用器上的输入
// 例如,I<0选择sda0和scl0等
wire.endTransmission (I2C_STOP);
}
void mix_Deselect (){
Wire.beginTransmission(0x70);
wire.write (B0万);
wire.endTransmission (I2C_STOP);
}