I am testing a very very simple i2c wire code for the raspberry pi pico using the arduino IDE, This simple code breaks the pico and after uploading it, it will make the pico into an unrecognized usb device.
#include <Wire.h>
void setup() {
Wire.begin(0x53); // join i2c bus (address optional for master)
Serial.begin(9600); // start serial for output
}
void loop() {
Wire.requestFrom(0x53, 6); // request 6 bytes from slave device #8
while (Wire.available()) { // slave may send less than requested
char c = Wire.read(); // receive a byte as character
Serial.print(c); // print the character
}
delay(50);
}
Something to note, the led indicator is blinking in an irregular pattern.
What makes it weird is i have uploaded successfuly i2c code that doesnt break , for example this i2c sniffer
#include <Wire.h> //include Wire.h library
void setup()
{
Wire.begin(); // Wire communication begin
Wire.setClock(100000);
Serial.begin(9600); // The baudrate of Serial monitor is set in 9600
while (!Serial); // Waiting for Serial Monitor
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address; //variable for error and I2C address
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for (address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address < 16)
Serial.print("0");
Serial.print(address, HEX);
Serial.println(" !");
nDevices++;
}
else if (error == 4)
{
Serial.print("Unknown error at address 0x");
if (address < 16)
Serial.print("0");
Serial.println(address, HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for the next I2C scan
}
Luckily i can revert it by pressig the bootsel and upload a known working code like fo example the blink sketch.