【问题标题】:Android Things to Arduino using I2C - error 6: No such device or address使用 I2C 到 Arduino 的 Android Things - 错误 6:没有这样的设备或地址
【发布时间】:2019-07-26 23:55:28
【问题描述】:

我尝试使用 I2C 将运行 Android Things 的 NXP i.MX7D 连接到 Arduino UNO。从属代码相当简单:


#include <Wire.h>

void setup() {
  Wire.begin(0x08);                // join i2c bus with address #8
  Wire.onRequest(requestEvent); // register event
}

void loop() {
  delay(100);
}

// function that executes whenever data is requested by master
// this function is registered as an event, see setup()
void requestEvent() {
  Wire.write("hello "); // respond with message of 6 bytes
  // as expected by master
}

两个设备是这样连接的:

NPX SDA Pin ---> 3.3v 电平转换器 5v ----> Arduino PIN A4 NPX SCL Pin ---> 3.3v 电平转换器 5v ----> Arduino PIN A5

当我使用 PIO 工具时,我似乎无法连接或读取 Arduino 从站。 NPX上有两个BUS(I2C1,I2C2)我都试过了,结果一样:

imx7d_pico:/ $ pio i2c I2C1 0x08 read-reg-byte 0x00                                                                   
[WARNING:client_errors.cc(35)] error 6: No such device or address
6|imx7d_pico:/ $ pio i2c I2C2 0x08 read-reg-byte 0x00                                                                 
[WARNING:client_errors.cc(35)] error 6: No such device or address

我假设电平转换器工作正常我确实在 UART 连接方面取得了有限的成功(Arduino 能够发射到 NPX,但不能发射到 Arduino,稍后将对此进行调查)

这里是一些连接的图片。

【问题讨论】:

    标签: arduino i2c android-things


    【解决方案1】:

    尝试添加 Wire.onReceive 回调(连同 onRequest)到您的 arduino 代码。

    像这样:

    #include <Wire.h>
    
    void setup() {
      Wire.begin(8);                // join i2c bus with address #8
      Wire.onReceive(receiveEvent); // register event
      Serial.begin(9600);           // start serial for output
    }
    
    void loop() {
      delay(100);
    }
    
    // function that executes whenever data is received from master
    // this function is registered as an event, see setup()
    void receiveEvent(int howMany) {
      while (1 < Wire.available()) { // loop through all but the last
        char c = Wire.read(); // receive byte as a character
        Serial.print(c);         // print the character
      }
      int x = Wire.read();    // receive byte as an integer
      Serial.println(x);         // print the integer
    }
    

    【讨论】:

    • 遗憾的是仍然无法被 NPX 检测到。
    • 你有逻辑分析仪吗?或另一个 arduino 板以确保您的 i2c 线路真正处于活动状态?不建议这样做,您可能会损坏您的 SOC,但您可以尝试直接连接下拉电阻(~4.7k),仅用于验证。您也可以尝试检查您的 TTL 同步板,施加 5v 并用电压表检查输出(应该是 3.3)
    • 我将尝试将两个 arduino 连接在一起以帮助调试,我没有逻辑分析仪,所以我有点摸不着头脑。我想如果这两个 arduino 能够一起说话,NPX 方面就会有些可疑。请继续关注并感谢您的宝贵时间!
    • I2C 在两个 Arduino 之间运行良好,我看到电平转换器的连接存在一些问题,我使用了这个文档:learn.sparkfun.com/tutorials/…。但仍然没有成功,我现在认为问题确实在 NPX 方面我会继续挖掘
    • 好的,看起来我必须在连接到 NPX 的同时重置 Arduino 才能工作。不完全确定为什么我假设在设置中设置从地址时会发生一些握手?!现在它似乎可以与上面的代码一起正常工作。谢谢!
    猜你喜欢
    • 2021-11-14
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    相关资源
    最近更新 更多