Saturday, April 30, 2022

Conquering the very first challenge for the Sparkfun Edge board

A couple of months back, I became interested to learn TinyML to build machine learning "edge" applications on microcontrollers. I got hold of the book "TinyML" by Peter Warden [ISBN: 9352139607] and started scanning through it. Among the three boards mentioned by Peter, I was attracted to "Sparkfun Edge" as the author stated the collaboration he had with Ambiq, the manufacturer of the Apollo 3 microcontroller and Sparkfun, the manufacturer of the board while writing this book. Also, I found the cost of this board to be reasonable - $16.5. Therefore I decided to buy it!    

Figure 1: Sparkfun Edge with USB to 3.3V TTL (CH340G) breakout

In case you are also using this board for the first time, here is a gist about the features of Sparkfun Edge: The board is based on the Apollo 3 MCU, which is built around an ARM Cortex-M4 core, that can run at 48 MHz and up to even 96 MHz in TurboSPOT mode. This tiny 5 x 5 mm package comes with a load of features including an FPU, integrated BLE5. The functional block diagram of Ambiq's Apollo 3 MCU shows its features:

Figure: Block diagram of Apollo 3 MCU from Ambiq - Source: Datasheet 

Apart from the fairly powerful MCU, the board has 2 MEMs microphones, one 3-axis accelerometer, one camera connector for the HIMAX HM01B0 camera, four LEDs, GPIOs, and a coin cell (CR2032) connector. The BLE5 antenna is assembled on the board and it does not require an external antenna.

Well, all looked great, till I received the board I ordered. All the other boards I used so far came with either a USB connector or a pin-jack type of connector for applying power to the board. I realised that Sparkfun Edge was missing such an easy feature, which provides convenience to the users. Do not know why it was not done, but guessing, to keep the size of the board smaller? From the Sparkfun website, I found out that, I need to have a USB to TTL (3.3V) breakout board in order to program the MCU on the Edge board. Sparkfun recommends the USB-C to TTL (3.3V) breakout board ($9.95), based on the CH340C chip.

Figure 3: Sparkfun Serial Breakout Board - USB-C to TTL (CH340C)

[Picture Source: www.sparkfun.com]

I could find a $2 option for the USB to TTL breakout (branded as "WEMOS"), which has 5V as the default logic/power option for the TTL but can be configured by a jumper connection. The TTL connector has the exact pinout as the Sparkfun serial breakout board. There is one more jumper, which is needed to be configured to configure "CTS" as the data flow control signal. Ensure that you check the continuity with a multimeter after desoldering the default jumper pads and soldering the correct connections. I had to cut the default connection track (for 5V & RTS), before soldering the pads to select 3.3V and CTS.

Before connecting the serial breakout board to the Sparkfun Edge, you might want to double-check if you are getting 3.3V between the VCC and GND pin on the TTL connector while powering the serial breakout board alone. Once you are confirmed that the serial breakout board is correctly configured, connect it to the Sparkfun Edge board. As the Sparkfun Edge board comes preprogrammed with the speech recognition program, you might see the blue LED (GPIO# 37) blinking fast. That means, your Sparkfun Edge is powered up successfully.

Now here comes the challenge. The instructions for using Arduino IDE to program the SparkFun Edge board can be found on Sparkfun's webpage:

Programming the SparkFun Edge with Arduino - learn.sparkfun.com

But the instruction provided in the "The Upload Sequence" section is not entirely accurate. A small error in one step has cost me a week's effort. The instructions as written:

  • Press and hold the Reset button
  • While still holding down the Reset button, press and hold the 14 button
  • Release the Reset Button
  • Release the 14 button (Wrong!!!)
  • Hit Upload in the Arduino IDE (or use your keyboard shortcut)

The 4th step is not correct. If button# 14 is released before the upload is completed, the programming fails! It will only work if button# 14 is kept pressed and not released unless the upload is completed. In case you are struggling with the same matter, pay attention that button# 14 is kept pressed after 2nd step till the programming is completed. I got this clue after I posted this question in the forum:

Failing to upload to Sparkfun Edge board using Arduino IDE 1.8.19 · Issue #461 · sparkfun/Arduino_Apollo3 (github.com)

 

No comments: