Cannot upload same program twice on macOS High Sierra


#1

SPOILER ALERT: this has a happy ending :wink:

My daughter, Rylie, and I ran into some challenges with her Jewelbot when we went to program it for the first time.

It didn’t seem to be possible to upload to the Jewelbot from Arduino IDE twice from our iMac (running macOS High Sierra).

I wanted to come up with a process that Rylie could follow to work around this issue. She’s very excited to try things with this, but having the Jewelbot appear to die twice already today and have me have to rescue makes me worry that she’ll be discouraged.

If I upload the following sketch to the Jewelbot (from https://jewelbots.com/pages/samples):

void setup() {
  // put your setup code here, to run once:
}

void loop() {
  // put your main code here, to run repeatedly:
  LED led;
  led.turn_on_single(SW, GREEN);
}

It works the first time. The sketch work (lights the southwest LED green). Wow. What a reaction! Rylie is SOO excited :smile:

With the 1.16 firmware, I haven’t fully bricked it again with my experiments. It seems to reliably recover after the 2 minute upload mode timeout and show the rainbow sequence.

When the Jewelbot is reconnected and we upload the same sketch to it again, it doesn’t work. The LEDs stay unlit and the Jewelbot hits the two minute upload mode timeout and recovers (thankfully).

After I’d written it off and decided to get a replacement, Rylie said to me:
“I’m sure it still works, Dad. Let me try again.”

Future engineer for sure! She did try again, it didn’t work, but she said she’d try again tomorrow.

She was inspired, I was on fire, I had to make this work!

If I reboot the iMac, I can upload another sketch to the Jewelbot. It’s finicky and I’m not sure I can really be sure it will work and the set-piece, Rylie’s color-rotating sketch, won’t upload no matter what I do. I’m baffled, but I think back to what she said “I’m sure it still works, Dad.” I can’t let her down.

I dig in. I think… hmm. If rebooting the iMac fixes it, maybe there’s a way to reset the USB serial ports without rebooting. Maybe that will make it work. I look around and stumble on a total gem; a working fix:

It turns out, Apple broke USB serial support for lots of dev boards in High Sierra.

The fix is NOT straight-forward, but it is fully worth it.

  1. You’ll need these instructions while your Mac is unusable, so bring it up on another machine or smartphone, print it out, or write it down
  2. Download and install FTDI’s latest “Mac OS X 10.9 and Above” driver (version 2.4.2 as of this writing) from http://www.ftdichip.com/Drivers/VCP.htm
  3. Install that (you’ll need an administrator’s username and password for your Mac, if you don’t know, you probably are)
  4. Apple menu > Shutdown… (not restart, it won’t work)
  5. Start the Mac up and hold Command-R (this will go into Recovery Mode, it might take several minutes on an older Mac)
  6. Utilities > Terminal (launch the Terminal)
  7. Run the following command to disable System Integrity Protection (we’ll turn it back on before we’re done)
    csrutil disable
  8. Quit Terminal
  9. Apple menu > Restart…
  10. Log into an administrator account and launch Terminal
  11. Run the following commands:
    cd /System/Library/Extensions/
    sudo mv AppleUSBFTDI.kext AppleUSBFTDI.disabled
    sudo touch /System/Library/Extensions
  12. Apple menu > Shutdown…
  13. Start the Mac up and hold Command-R (this will go into Recovery Mode, it might take several minutes on an older Mac)
  14. Utilities > Terminal (launch the Terminal)
  15. Run the following command to re-enable System Integrity Protection:
    csrutil enable

After this, you can code a sketch, upload it, experiment, and loop around until you get the result you want or you get bored. (PS, if you get bored, look at all the cool stuff people have done here on the community!)


Help using Arduino to code my Jewelbot
My Jewelbot Won't Show any Buzzes or Lights!
Not working on Macs
#2

This is SUPER HELPFUL, thank you! We will point people in the direction of this post if they reach out with problems. Kudos for charging forward and figuring it out! Future engineer for sure.