This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AFE4404EVM:AFE4404EVM (I2C)的通信问题

Guru**** 2611705 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/668211/afe4404evm-communication-problems-with-afe4404evm-i2c

器件型号:AFE4404EVM

您好!

我正在尝试使用 Arduino 板控制 AFE 4404 EVM。 但我的 I2C 通信有问题。 我在发送地址和发送数据后恢复 ACK 脉冲,但设备不工作,如果我尝试读取寄存器(数据配置),我只得到0x0...

我已从 AFE 4404 EVM GUI 中复制配置寄存器。 电源如下:

RX_SUP=3.3V

IO_SUP=3.3V

TX_SUP=5V

I2C_SCL=4.8V

I2C_SDA=4.8V

I2C 时钟的工作频率为400kHz。


你知道我该怎么做吗?

提前感谢您、Joan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Joan、

    您能否验证 I2C 读取例程?
    向寄存器0x1D 写入一些值并尝试读取。 此外、在读取任何寄存器之前、必须设置 REG_READ 位(即0x00<0>)。
    如果您无法读取、则读取例程中出现了问题、您可以观察示波器上的 I2C 线路来验证/调试这一点。

    此致、
    Prabin。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Prabin、您好!

    首先、感谢您的快速回答。 我一直在努力执行您向我推荐的操作、但不幸的是、在将电路板连接到 PC 后、套件突然停止工作、甚至 LED 也无法工作。 那么、为什么要购买新的。 当我们获得一些结果时、我会告诉您。

    此致、Joan。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Prabin、您好!

    我有一个新的 AFE 4404 EVM 套件。 我看一下我使用的 I2C 转子、我注意到它是错误的(遵循 AFE 4404数据表)、因为我没有设置 R/W 位。 但是、它仍然不工作、我害怕将其连接到示波器、因为上次连接后它崩溃了(我知道这真的很奇怪)。 另一方面、您告诉我将 REG_READ 设置为0、但我在 AFE 4404的第21页中读取数据时显示:"在读取任何其他寄存器之前、需要将 REG_READbit 额外设置为"1"。 如果你看到我使用的两个函数、你可以告诉我一些线索。

    
    
    
    
    
    
    
    
    
    
    
    
    
    void I2C_write (int slave_address、byte reg_address、unsigned long configData){int ACK;Wire.beginTransmission (slave_address << 1);Wire.write (reg_address);Wire.write ((configData >> 16)& 0xFF);Wire.write (configData >> 8)& 0xFF);Wire.write="(Serial.transmission (configdata);print.end.ACK (Serial);print.end (<.ACK)
    
    int m=0;
    int byteCount=3;
    Int NACK;
    
    Wire.beginTransmission(0x58 <<< 1);
    Wire.write (0x1D);
    Wire.beginTransmission(0x58 <<1 |0x01);
    
    Wire.requestFrom (0x1D、3);
    while (Wire.Available ()&&(字节计数!= 0))
    {
    v_code.[m]=Wire.read ();
    
    字节计数--;
    M++;
    }
    Nack=Wire.endTransmission ();
    serial.print (";nack=");
    serial.print (NACK);
    
    
    return (V_code);
    
    
    } 

    提前感谢您、Joan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prabin、您好!

    最后、现在正在工作。 代码有问题。 这是一个有效的读/写函数、也许有人有同样的问题、代码可以帮助...

    空 I2C_WRITE (字节 SLAVE_ADDRESS、字节 REG_ADDRESS、无符号长整型 CONFIGData)


    int ACK;
    Wire.beginTransmission(slave_address);
    Wire.write (reg_address);
    Wire.write((configData >> 16)& 0xFF);
    Wire.write((configData >> 8)和0xFF);
    Wire.write((configData)& 0xFF);
    ACK=Wire.endTransmission ();
    serial.print (";线端传输=");
    serial.print (ACK);



    void I2C_read (byte slave_address、byte reg_address、byte byteCount){

    int m=0;

    Int NACK;
    Wire.beginTransmission(slave_address);
    Wire.write (reg_address);
    Wire.endTransmission (false);
    Wire.requestFrom (slave_address、byteCount、true);
    V_code.[2]= Wire.read ();
    V_code.[1]= Wire.read ();
    V_CODE[0]= Wire.read ();
    /*nack=Wire.endTransmission ();


    value=v_code[2]<<16 + v_code[1]<<8 + v_code[0];

    return (value);




    感谢你的帮助