Arduino Nano RP2040 Connect stops responding after upload of sketch

Every time I upload a OneWire.h example sketch, my Arduino Nano RP2040 Connect stops responding and after I upload "Blink.ino.elf.uf2" sketch with Windows 11 file explorer, the board works again.
When the board is not responding, the onboard led shows 4 short blinks and 4 long ones continuously.
Here is the sketch:

#include <OneWire.h>

// OneWire DS18S20, DS18B20, DS1822 Temperature Example
//
// http://www.pjrc.com/teensy/td_libs_OneWire.html
//
// The DallasTemperature library can do all this work for you!
// https://github.com/milesburton/Arduino-Temperature-Control-Library

OneWire  ds(10);  // on pin 10 (a 4.7K resistor is necessary)

void setup(void) {
  Serial.begin(9600);
}

void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
  
  if ( !ds.search(addr)) {
    Serial.println("No more addresses.");
    Serial.println();
    ds.reset_search();
    delay(250);
    return;
  }
  
  Serial.print("ROM =");
  for( i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return;
  }
  Serial.println();
 
  // the first ROM byte indicates which chip
  switch (addr[0]) {
    case 0x10:
      Serial.println("  Chip = DS18S20");  // or old DS1820
      type_s = 1;
      break;
    case 0x28:
      Serial.println("  Chip = DS18B20");
      type_s = 0;
      break;
    case 0x22:
      Serial.println("  Chip = DS1822");
      type_s = 0;
      break;
    default:
      Serial.println("Device is not a DS18x20 family device.");
      return;
  } 

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end
  
  delay(1000);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
  
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // Read Scratchpad

  Serial.print("  Data = ");
  Serial.print(present, HEX);
  Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
    Serial.print(data[i], HEX);
    Serial.print(" ");
  }
  Serial.print(" CRC=");
  Serial.print(OneWire::crc8(data, 8), HEX);
  Serial.println();

  // Convert the data to actual temperature
  // because the result is a 16 bit signed integer, it should
  // be stored to an "int16_t" type, which is always 16 bits
  // even when compiled on a 32 bit processor.
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;
  Serial.print("  Temperature = ");
  Serial.print(celsius);
  Serial.print(" Celsius, ");
  Serial.print(fahrenheit);
  Serial.println(" Fahrenheit");
}

The same happens also with some other sketches.
Is there something I'm doing wrong or is this some kind of firmware error?

This is the indicator that the Mbed OS that runs underneath your sketch has crashed.

You can recover from this by the following technique:

  1. Press and release the reset button on your board quickly twice. You should now see the LED on the board stop doing that Mbed OS crash signal blink.
    The double reset causes the board to stay in this recovery state indefinitely (until the board is reset, powered off, or an upload is done), which means you don't need to get the timing of the reset just right.
  2. Select Sketch > Upload from the Arduino IDE's menus.

The upload should now complete successfully. However, if you upload the same sketch you were running when you had the problem, the crash will probably just occur again. You will need to figure out what part of the sketch is crashing Mbed OS. Now that you know how to recover the board from a crash, you can start working on that.


Debug information is printed on Serial1 at 115200 baud when Mbed OS crashes. You can view the debug output by connecting a USB to serial adapter to the "TX1" pin on the Nano RP2040 Connect, but I have not found the information very useful in the occasions when I did that.

If I downgrade Arduino Mbed Nano Boards to version 2.3.1, there is no Mbed OS crash signal blink and the same sketch uploads correctly. Is there a way to get it working properly with the latest version (2.6.1) or do I have to use 2.3.1 if I want to have DS18S20 temperature sensor in my project?

Did you bisect the issue down to that exact release (i.e., the crash occurs if you use the next release Arduino Mbed Nano Boards 2.4.1)?

Sorry, I tested it again. It seems to work with other versions too, also with 2.5.2 (not with 2.6.1).
I just got 2.3.1 from some another forum, can't remember where.

Unfortunately, I don't know the cause of the problem, but I do think this is valuable information. At best, it could help you to identify the specific change between the two versions that causes the problem:

https://github.com/arduino/ArduinoCore-mbed/compare/2.5.2...2.6.1

At worst, it allows you to use a relatively modern version if you are unable to use 2.6.1.

Once you have these 'orange leds of hell', it is hard to re-load new sketches.
Best reset is to double click reset botton, and copy the flash_nuke.utf2 in the open usb-drive window.

flash_nuke.utf2

EmbedOS on RP2040 is the worst arduino product ever, buy something else :slight_smile: