Малинка не определяется компьютером

Всем доброго времени суток! Заказал у китайцев дешевую и привлекательную по характеристикам плату waveshare rp2040-zero. Тем более, что Arduino IDE также поддерживает эту плату(в ней и пишу код). Неделю проработала прекрасно, потом внезапно перестала определяться компьютером как виртуальный com-порт. При подключении с зажатой кнопкой boot в проводнике появляется диск RPI-RP2. Уже почти неделю пытаюсь что-то найти на данную тему на просторах интернета - безрезультатно. Нашел только, что надо на этот диск в проводнике скинуть прошивку для платы, которую я не смог нигде найти. Нашел только файл, который стирает все из памяти. Сейчас при обычном подключении к компьютеру плата появляется в диспетчере задач в виде “Неизвестное USB-устройство. Сбой запроса дескриптора USB-устройства.” Кстати, делаю на этой плате проект - gps-трекер. Подскажите, пожалуйста, где взять этот файл прошивки, или, может ещё какой финт ушами надо сделать…

Если в проекте будет указано что использовать USB как Serial, то и после заливки будет виртуальный ком порт.

PS
С платой raspberry pi pico происходит то же самое - я не понимаю, в чем проблема. При этом, если попытаться залить скетч, когда плата подключена в режиме boot - плата отвалится в процессе загрузки скетча.

Так и должно быть !

Не понял вас, поясните, пожалуйста

Прошивка RP2040 происходит переводом платы в режим BOOT и копировании файла на появившийся накопитель !
Виртуальный порт должна создать ВАША прошивка !!!
Rasberry PI PICO (RP2040) продолжение темы - Аппаратные вопросы - Arduino.ru

Она отвалится не “в процессе”, а после заливки.

  1. Подключаете с зажатой кнопкой БУТ
  2. Нажимаете Upload в Ардуино ИДЕ - и все прошивается. Бут режим при этом отваливается.

ТС у Вас такая строчка в скетче есть ???

вот код проекта, прошу не ругать за криворукость, это пока пробная версия

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>
#include <TinyGPS++.h>

Adafruit_SH1107 display = Adafruit_SH1107(64, 128, &Wire);
TinyGPSPlus gps;

int sat = 0, hour = 0, minute = 0, second = 0;
float lat = 0.0, lng = 0.0;
//char data[182];

bool flagA = 0, flagB = 0, flagC = 0;
bool blink = 0, sleep = 0;

static unsigned long int t = 0, v = 0, s = 0;

byte curScreen = 2, maxScreen = 6;

void mainScreen() {
  display.clearDisplay();
  display.setTextSize(4);
  display.setCursor(5, 18);
  display.print(hour);
  if (blink) display.print(":");
  else display.print(" ");
  display.print(minute);
  display.setTextSize(1);
  display.setCursor(100, 0);
  display.print("---");
  display.print("%");
  display.display();
}

void gpsScreen() {
  display.clearDisplay();
  display.setTextSize(4);
  display.setCursor(5, 18);
  display.print("GPS");
  display.display();
}

void timerScreen() {
  display.clearDisplay();
  display.setTextSize(4);
  display.setCursor(5, 18);
  display.print("timer");
  display.display();
}

void page1() {
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print("sensorValue=");
  display.display();
}

void page2() {
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print("Voltage=");
  display.display();
}

void page3() {
  display.clearDisplay();
  display.setTextSize(3);
  display.setCursor(0, 0);
  display.print("page 3");
  display.display();
}

static void smartDelay(unsigned long ms) {
  unsigned long start = millis();
  do {
    while (Serial1.available())
      gps.encode(Serial1.read());
  } while (millis() - start < ms);
}

void setup() {
  pinMode(7, INPUT_PULLUP);
  pinMode(8, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);
  Serial.begin(9600);
  Serial.print("Hello");
}

void loop() {
  if (!digitalRead(7) and !flagA) {
    flagA = !flagA;
    s = millis();
  }
  if (digitalRead(7) and flagA) {
    flagA = !flagA;
    s = millis();
    curScreen--;
    if (curScreen < 1) curScreen = maxScreen;
  }
  if (!digitalRead(8) and !flagB) {
    flagB = !flagB;
    s = millis();
  }
  if (digitalRead(8) and flagB) {
    flagB = !flagB;
    s = millis();
    curScreen = 2;
  }
  if (!digitalRead(9) and !flagC) {
    flagC = !flagC;
    s = millis();
  }
  if (digitalRead(9) and flagC) {
    flagC = !flagC;
    s = millis();
    curScreen++;
    if (curScreen > maxScreen) curScreen = 1;
  }
  if (millis() - v >= 500) {
    v = millis();
    blink = !blink;
  }
  if (millis() - t >= 100) {
    t = millis();
    if (sleep) {
      goto label;
      display.clearDisplay();
      display.display();
    } else {
label:
      switch (curScreen) {
        case 1: gpsScreen(); break;
        case 2: mainScreen(); break;
        case 3: timerScreen(); break;
        case 4: page1(); break;
        case 5: page2(); break;
        case 6: page3(); break;
      }
    }
  }
  if (millis() - s > 5000) {
    sleep = 1;
    Serial.print("satellites - ");
    Serial.println(sat);
    Serial.print(hour);
    Serial.print(":");
    Serial.print(minute);
    Serial.print(":");
    Serial.println(second);
    Serial.print(lat);
    Serial.print("/");
    Serial.println(lng);
    Serial.println("---------------------------------");
    //Serial.println(data);
  }
}

// Running on core1
void setup1() {
  Serial1.begin(9600);
  Serial1.print("Hello from core1");
}

void loop1() {
  //Serial1.print("1");
  //Serial1.readBytes(data, 180);
  sat = gps.satellites.value();
  hour = gps.time.hour();
  minute = gps.time.minute();
  second = gps.time.second();
  lat = gps.location.lat();
  lng = gps.location.lng();
  smartDelay(1000);
}

У меня не выходит так. Arduino IDE пишет, что все окей, но код не работает - экранчик молчит

Код работает так как вы его наиисали.

Не уверен что допустимо инициализировать Serial сразу с двух ядер одновременно.
Оставтье Serial.begin только в одном setup.

Не уверен что дисплей работает без инициализации. Где у вас display.begin ???
Для начала погоняйте примеры из библиотеки дисплея, а уж потом всё остальное.

Gps куда подключен физически ?

Вам бы диодиком помигать для начала, а вы уже в программисты себя записали …

ну так с чего вы взяли, что ваш код правильный?

Для проверки попробуйте загрузить что-нибудь простое, например код мигания светодиодом.

Плюс схема - её мы то же не видели…без шара…

Проблема решилась, из сетапа куда-то пропала инициализация дисплея. До этого плата определялась как ком-порт, я думал, что с ней что-то не так. Спасибо всем ответившим!

В форуме есть механизм Вопрос решен !