Photon flashed once, now can't flash again

Ugh. Had a RED FLASH SOS + HARD FAULT. Resolved that using DFU mode and Particle Update. Yay.

So I wanted to test that things are OK. I flashed some test code using Particle Dev, and it seemed to upload fine.

// --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//

//#include <Wire.h
#include "application.h"

int scanning_count = 0;

void setup()
{
  Wire.begin();

  Serial.begin(9600);
  Serial.println("\nI2C Scanner");

  pinMode(D7, OUTPUT);
  digitalWrite(D7, LOW);

}


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

  scanning_count++;

  Serial.print(scanning_count);
  Serial.println(" Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Wire.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("  !");


        digitalWrite(D7, HIGH);
        delay(1000);
        digitalWrite(D7, LOW);

      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(10000);           // wait 10 seconds for next scan
}

Note that this code works perfectly on a Particle Core.

However, the Photon starts to run the code through one loop() then flashes and re-starts running the loop().

So I want to play with it. Revised the code and tried to upload. Compiles OK, but now it won’t flash. I get ‘Flashing via the cloud…’, no response from the Photon, then a status of “undefined…”

My Photon is now breathing happily, then doing something - yellow? pulse, cyan? flash (I’m color blind, so guessing…), and breathing cyan again. And I can’t upload new code.

Is it possible it’s related to my i2c test code? Does this happen to anyone else? Any workarounds?

If you can’t distinguish the colors, just post a short video of it.

The delay(10000) will also not help with OTA flashing.

SOLUTION (part 1) - I was able to flash new code by entering Safe Mode:

To put your device in Safe Mode:
• Hold down BOTH buttons
• Release only the RESET button, while holding down the SETUP button.
• Wait for the LED to start blinking magenta
• Release the SETUP button

This put the Photon in a state that was easily flashed.

ISSUE (color flashes) - Here are the two flashes that I'm getting when I run the code above:

&

PROBLEM (I2C issue) - Code that eliminates the Wire.beginTransmission(); and Wire.endTransmission(); statements just sits there, prints to Serial.print(), and pulses like it should.

So I'll start trying to dissect what the problem is, and will update. I've noticed I2C issues previously.

SOLUTION (part 2) - Looks like the flashing was happening because I tried running my i2c test code (i2c_scanner) on a bare Photon sitting on my desk, no SCL/SDA pull-up resistors in sight.

After I plugged it into my old protoboard that has pull-ups to both I2C pins, I’m getting a nice pulsing cyan with no flashes, like I should.

So that’s good.

2 Likes