I2C не находит девайс

Привет, всем!

У меня возникла неприятная проблема с кастомной платой, на которой стоит микроконтроллер ATSAMD21G18A. Я пытаюсь подключить чип ATECC508A через I²C, но он просто не хочет определяться.

На линии SDA и SCL у меня стоят подтягивающие резисторы по 4.7kΩ, так что, по идее, с этим должно быть все в порядке. Но, к сожалению, никакой связи с ATECC508A у меня нет.
Пробовал различные бутлоадеры, но тоже не принесло успеха, сам адрес в библиотеках тоже пробовал менять (0x60)

Код я использую обычный i2c scanner:

#include <Wire.h>

void setup() 
{
  Wire.begin();
  SerialUSB.begin(9600);
  while (!SerialUSB); // Wait for Serial to be ready
  SerialUSB.println("\nI2C Scanner");
}

void loop() 
{
  byte error, address;
  int nDevices;

  SerialUSB.println("Scanning...");

  nDevices = 0;
  for (address = 1; address < 127; address++ ) 
  {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0) 
    {
      SerialUSB.print("I2C device found at address 0x");
      if (address < 16)
        SerialUSB.print("0");
      SerialUSB.print(address, HEX);
      SerialUSB.println(" !");

      nDevices++;
    } 
    else if (error == 4) 
    {
      SerialUSB.print("Unknown error at address 0x");
      if (address < 16)
        SerialUSB.print("0");
      SerialUSB.println(address, HEX);
    }
  }
  
  if (nDevices == 0)
    SerialUSB.println("No I2C devices found\n");
  else
    SerialUSB.println("done\n");

  delay(5000); // Wait 5 seconds for next scan
}

Так-же прикладываю скрины схемы, плата штамповалась в pcbway


а в аддоне как I2C прописан?

#define WIRE_INTERFACES_COUNT 1

#define PIN_WIRE_SDA         (20u)
#define PIN_WIRE_SCL         (21u)
#define PERIPH_WIRE          sercom3
#define WIRE_IT_HANDLER      SERCOM3_Handler

static const uint8_t SDA = PIN_WIRE_SDA;
static const uint8_t SCL = PIN_WIRE_SCL;

Не до конца понял что имеется ввиду, если имеется ввиду что прописано в variant.h файле для платы которую я выбираю в arduino ide, то вот такие значнеия там:

#define WIRE_INTERFACES_COUNT 1

#define PIN_WIRE_SDA         (20u)
#define PIN_WIRE_SCL         (21u)
#define PERIPH_WIRE          sercom3
#define WIRE_IT_HANDLER      SERCOM3_Handler

static const uint8_t SDA = PIN_WIRE_SDA;
static const uint8_t SCL = PIN_WIRE_SCL;

а у вас они физически на 22 и 23 пинах, и как это заработает?

Я дилетант в этих вопросах, и только набираюсь опыта, понимаю ваше недоумения касательно пинов 20 21 в либе и 22-23 на плате, но на каком-то из форумов я вычитал что для чипов samd21 ардино ide сам понимает пины для чипов sam21g и что 20, 21 пины == 22, 23.
Поправьте меня если ошибаюсь, я сейчас попробую изменю пины в variant и попробую

попробуйте, я с этим контроллером не знаком, но если пины переназначать, они должны быть указаны

Попробовал, к сожалению не дало результатов, единственное что, до изменения пинов в variant.h (с 20, 21 на 22, 23), к serial консоль приходило:

I2C Scanner
Scanning...
No I2C devices found

а после изменения пишет:

I2C Scanner
Scanning...

и не выдает больше ничего. Так-же заметил описание пинов в файле variant.cpp, где так-же указано что 20, 21 пина это 22, 23 на чипе:

Значит пины правильно назначены PA22 = 20 (SDA) PA23 = 21(SCL)
тогда осциллограф и смотреть, что там на пинах

Эх, к сожалению осциллографа еще не приобрел к себе в арсенал, пока только набираюсь знаний и опыта. Спасибо за попытку помощи, буду дальше капать, может кто еще идейку подкинет что может быть, а то уже 3 день в поисках зацепок))

Подкину индейку: купи овцелограф. Срочно.

может логанализатором можно обойтись бюджетно.

Опять же таки, возможно, глупый вопрос, но у меня есть прогармматор jlink mini, возможно ли как-то им дополнительно отдебажить есть ли какие-то сигналы на пинах sda scl?

А если эту зверушку к “более традиционной” ардуине подключить, она сканером обнаружится?

Как же Вы собираетесь налаживать электронное устройство без осциллографа?

А если серьезно, для цифровых устройств осциллограф процентов на 90 можно заменить логическим анализатором. Примерно таким:


Стоит копейки, а цифровые протоколы им анализировать даже намного удобнее, чем осциллографом.

а что у тебя есть - идей-то накидать можно

Вместо того чтобы исходник аддона менять, лучше пины на плате смени. Пины 20 и 21 куда-нибудь выведены? Если да -подключи ATECC508A к ним и пробуй.
Если заработает - будешь думать как треки на плате переделать.

Что за идиотизм разводить плату, не протестировав работу на макетке???

Первый вывод означает, что I2c запускается, но девайс не находит, а второй - что I2c на измененных пинах вовсе не работает.

Проверьте мультиметром наличие подтяжки, там случаем перемычку паять не надо?

Есть полный даташит на ATECC508A, глянул, там целый день разбираться можно.
Кстати , микросхема может работать также в режиме
Single-Wire Interface mode , выбирается записью бита в EEPROM. Так что с этим может быть проблемма связана

Я выше и предложил её с какой-нибудь обычной ардуиной попробовать. К его контроллеру тоже можно что-нибудь простенькое с I2C подключить. А то автор сразу два неизвестных устройства соединяет - всё не работает. Грешит почему-то на одно. А может виновато другое? А может оба? Сначала надо бы их порознь тестировать.

физически подключить твой девайс надо к PA22 и PA23 контроллера