🛠 Scanner les deux bus I2C de la Due (Wire sur 20/21, Wire1 sur 70/71)

Arduino Due · intermediaire · Schéma : IMG-due-intermediaire-2-scanner-deux-bus-i2c.svg — Arduino Due avec deux bus I2C distincts : Wire/TWI1 sur les broches 20 (SDA) et 21 (SCL) près de AREF, Wire1/TWI0 sur le connecteur 4 broches 70/71 près du RESET, résistances de pull-up 4,7 kΩ annotées.

Objetivos

La Due dispone de DOS controladores I2C por hardware, con una peculiaridad de numeración documentada en el core: el objeto Wire corresponde al controlador TWI1 (pines 20 = SDA, 21 = SCL, cerca de AREF), mientras que Wire1 corresponde a TWI0 (pines 70/71, pequeño conector de 4 pines cerca de RESET). Este tutorial escribe un escáner que recorre ambos buses e informa las direcciones de 7 bits que responden — la base de cualquier diagnóstico de sensores I2C.

Material

Código completo

// Scanner Wire (TWI1: 20/21) et Wire1 (TWI0: 70/71)
#include <Wire.h>

uint8_t scanner(TwoWire &w, const char *nom) {
  uint8_t trouves = 0;
  SerialUSB.print(nom); SerialUSB.print(" : ");
  for (uint8_t a = 1; a < 127; a++) {
    w.beginTransmission(a);
    if (w.endTransmission == 0) {       // 0 = ACK reçu
      SerialUSB.print("0x"); SerialUSB.print(a, HEX); SerialUSB.print(" ");
      trouves++;
    }
  }
  if (!trouves) SerialUSB.print("(aucun) ");
  SerialUSB.println;
  return trouves;
}

void setup {
  SerialUSB.begin(115200);
  delay(1500);                             // laisser le CDC s'énumérer
  SerialUSB.println("=== Scan I2C Due ===");
  Wire.begin;    // TWI1 -> broches 20 (SDA) / 21 (SCL)
  Wire1.begin;   // TWI0 -> broches 70 / 71 (connecteur pres RESET)
  scanner(Wire,  "Wire  (TWI1, broches 20/21)");
  scanner(Wire1, "Wire1 (TWI0, broches 70/71)");
  SerialUSB.println("Fin de scan.");
}

void loop { }

Verificación esperada

Con un módulo en el conector I2C clásico (20/21), la línea « Wire » muestra su dirección (por ejemplo, 0x68 para un DS3231, 0x3C para un SSD1306) y la línea « Wire1 » muestra (ninguno). Mover el módulo al conector de 4 pines 70/71 invierte los resultados. Sin dispositivo conectado, ambas líneas muestran (ninguno).

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales