• I hope, you can help me. I'm beginner in programming java script. So I bought a pico with ST32F401. The first tings what I did, made an upgrade. I could not activate the bootloader (In order of the instructions) - the port was not recognised.
    Have anyone a good idea.
    Thanks for help.

  • Tue 2018.10.02

    Hello @jm, how are you attempting the upgrade? It is straight forward using the IDE.


    Under heading 'Firmware Updates'

    We'd strongly recommend that you use the Web IDE to update the firmware on this board - See >The Download page for instructions.


    Locate the link 'Web IDE' for the quickest method.

    If this is the method you attempted, what OS are you using, (e.g.Windows10 Mac etc.) and what is the version of the IDE? Native app or Chrome WebIDE?

    What is the URL of the instructions you used and what is the paragraph that gave you the first indication that you were stuck?

    Are you using a USB cable or a USB-TTL converter?

  • @jm, it can be tricky at times to really press the tiny little button on pico between all the other 'things' going around it for the right amount of time and power it on. I usually use a A-A USB Extension cable with PICO always plugged in and do the plugging and un-plugging on the computer side (in order to minimally stress PICOS's contacts on on the one side and the insulation lacquer cover on the other side - too many ins and outs wear the plating off of the contacts and the lacquer on the opposite side).

    If your PICO is pinned you can stick it onto a breadboard and tape the breadboard onto the working surface... if it is dangling free, I tape the cable to the surface in order to make sure PICO does not the wrong things, such as the (st...d) metal housing of the Apple laptop and create the ultimate and final (lethal) short cut.

    A plain (BIC) plastic ball pen (with retracted mine) does the job to press the button. You should feel the movements so you can control the press duration. Do it several times to get the feel before you start to fiddle with the other end of the cable for connecting. Of course you need to connect with icon in top-left corner of IDE to the PICO after wiring it with your computer.

    Worst case, the button may not work - always or never off... but you can find that out (virtually) no matter what the current firmware PICO is on: copy-paste this little 1-liner program below into the Web IDE's editor - in Chrome Browser - (right) pane and upload it - or paste it into the console (left) pane and press Enter. Either way will do the job.

    var iid = setInterval(function(){ LED1.write(BTN1.read()); }, 100);

    Then press the button. The red LED1 should come on when pressed and go out when not pressed. You will notice a bit a delay, but that is only from how (simple) the program is written.

    All - non-BLE (Bluetooth Low Energy) Espruino boards - Original,PICO, WiFi - use USB directly to communicate w/ the IDE - that is one of the core promises @Gordon made and implemented to make mc life easy.

  • Hi! What type of computer do you have?

    Also, what are the lights on the Pico doing? Are both of them on? are they pulsing? are both off? and did they flash at all?

    If you have a Windows PC, you will probably have to install some drivers first (even for the bootloader). Also if you're using a USB extension lead it's worth making sure it works by plugging some other device like a USB key into it (sometimes they'll charge stuff, but are no good for data).

    There's info about the drivers in the Quick Start guide here

  • Many thanks for the fast answers.
    Sorry, that I ditn't discribe my environment. I use Windows10 and the Espruino IDE in google chrom. I installed the usb-driver, restart the PC, opened the settings and choosed the flasher. Then I followed the instructions . I connect the pico with a usb-cable on the one side. Then I connected the 3,3V to the golden tap on the top (like a teardrop) an pressed the resetbutton. In the next step I put the other side of the usb-cable in to the PC. The lights are not flashing, they are off. The usb-device was not recognised.

  • If you use a normal USB cable - one that connects the data, ground, and 5V power pins on both sides of the cable, you do not need extra power... PICO has a power regulator that makes 3.3V from the 5V.

    When you plug PICO in, do you see a brief flash of the red LED?

  • Yes, I see the red led, she is blinking when I plug in the pico.

  • ...that's a regular behavior and thus already a good sign.

    Now push and hold the button while plugin-in the cable and let button go as soon as you see LED(s) flashing. If the red and green flash alternating like the lights at a rail road crossing, your PICO is ready for accepting firmware update.

    In IDE, click settings- FLASHER - Flash Firmware

    1. When FIRMWARE UPDATE pop-up w/ Espruino Board drop-down list shows, pick Espruino Pico... and click Next

    2. When FIRMWARE UPDATE pop-up w/ firmware options drop-down list shows, pick WIZNet... and click Next (It may not matter to you (yet) what you pick, but you have to pick one... ;) )

    3. When FIRMWARE UPDATE pop-up w/ request to put board into bootloader mode, just click Next, because your board IS already in bootloader mode... ;)

    4. When SELECT A Port... pop-up shows, pick and click the one that shows something w/ COM# or usbmodem and Espruino board - or a-like (COM# Espruino board for Windows, /dev/cu.usbmodem14111 Espruino board for OS X, Linux,...)

    5. When FIRMWARE UPDATE pop-up w/ The Firmware was updated successfully ! shows, you are done. Since there is no reset button on Pico, just unplug the board and click Next.

    6. Replug and connect and you should be fine.

    Between the steps things happen, like reading what board is connected, downloading the firmware from espruino.com - requires to be connected to the internet, erasing the flash and writing the new, downloaded Firmware. etc.

    As @Gordon pointed out for Windows, you have to have some driver installed. I assume that you have done that and are already able to connect to the board... otherwise, how would you know about the back-version 1.93... Said that, your setup should work.

    Btw, found this site https://www.smart-prototyping.com/blog/A­n-Espruino-Pico-Quick-Start-Guide which shows some Windows context: COM w/ Espruino board to connect to in one of the pop-ups.

    Attached is a screenshot showing the progressing firmware update in flashing phase.

    1 Attachment

    • flashingInProgress.png
  • thanks for the detailed advices. All these steps I have done. You wrote that I should press the button. Do you mean, that I connect the 3,3V to the golden tap (teardrop)? In this procedure nothing happens only that windows did not accept the device.

  • I would not do any additional connection. Just the USB cable is enough.

    Do you have the USB to COM driver installed on your Windows machine? Which driver(s) did you install for that purpose? From where did you get them? What is the Windows version you use?

    When you connect the pico to you windows machine - directly plug into a USB A socket, then pico flashes once - as you confirmed.

    In chrome go to https://chrome.google.com/webstore/detai­l/espruino-web-ide/bleoifhkdalbjfbobjack­fdifdneehpo?hl=en and click the Launch button.

    Then click on the yellow/.orange Connect Icon in top-left corner. What can you see in in the pop-up? (Can you provide a screenshot?).

    If chrome does not get you there, you can also install the Windows native IDE... see https://www.espruino.com/Web+IDE - but that is for BLE, and I'm not sure if it helps w/ PICO.

  • Wed 2018.10.03

    Lets get something going so that you stay excited about the Pico. Let's write some code! When you look back, it might become obvious what is not quite right with the firmware upgrade procedure. It shouldn't be this difficult, it is as simple as just plugging in the device.

    "Do you mean, that I connect the 3,3V to the golden tap (teardrop)?"

    No. As the others have explained, the power is supplied by the USB port itself.

    "In this procedure nothing happens only that windows did not accept the device."

    What do you mean by "Windows did not accept the device"? What did you see in the IDE left hand panel?

    I have learned that disconnecting the Pico from the PC before clicking on the green IDE disconnect button, will give Windows the creeps. Start the IDE. Connect the Pico. Click on the orange IDE connect button. Do the reverse for powering down. Click the green IDE dis-connect button. Unplug the Pico. Close the IDE. Do not deviate for Windows10.

    As you were able to get a blinking red LED, I suggest to just try communicating through the IDE first, and wait a bit for the firmware upgrade. Doing this will prove that the Port is being recognized by Windows, the IDE is aware (after clicking the orange connect button) of what ports are available, after connection the fact the IDE is communicating with the Pico, then try to enter a Javascript command to verify everything is a go, i.e. Windows10, Port, cable, Pico are all okay. Then take a stab at attempting to do the firmware upgrade. (follow the link from #8 above, then if necessary follow the steps as outlined in #10 above)

    Also, may I ask where in the documentation it was felt necessary to wire or connect to the 3.3v tap as you put it? or, are the plans to tap off the 3.3v line to power other devices perhaps?

  • Hi @jm,

    Looks like you were following the advice for 'advanced flashing': https://www.espruino.com/Pico#advanced-r­eflashing

    That is for very low-level flashing that overwrites everything on the device, and is used to recover if something has gone very wrong! For all normal firmware updates, all you need to do is press the button while plugging the board in - no connection to any pads or pins on the board is required.

    I bet if you follow @allObjects' advice above, the update will work great.

  • Hi Gordon,
    If I press the button on the top of the pcb during plug in, nothing happens. The blinking led not changing. It's the same, when I insert the pico without pressing a button.
    How can I insert a image in the post so that I can show you the messages. If I write a link to the image a picture is not to be seen.

  • Thr 2018.10.04

    'How can I insert a image in the post'

    Deploy your image to a hosting service that allows public access. Click the 'image' button in the row of buttons just below 'Post a reply' in the forum Reply window. Enter the absolute URL that points to that image. To make sure you have the right URL, enter the http://......myImage.jpg address where the image is located in a browser first and make sure the image is visible.

    ' If I write a link to the image a picture is not to be seen'

    Is the link an absolute URL and not a relative one? Is it possible that a local hard drive file:/// specifier was used in error? Link must start with 'http'

    'so that I can show you the messages'

    If the messages you are referring to are in the left hand pane of the IDE, you are able to mouse rollover and highlight that section, Ctrl+A Ctrl+C to copy to the clipboard, then place the insertion caret here in the forum Reply area and paste, Ctrl+V Then, highlight that text here and press the 'code' button in the row of buttons above the posting area.

  • If the messages you are referring to are in the left hand pane of the IDE, you are able to mouse rollover and highlight that section, Ctrl+A Ctrl+C to copy to the clipboard,

    Just so you know, just clicking and dragging to highlight text in the IDE automatically copies it to the clipboard. Ctrl-C issues a 'break' command to the Espruino interpreter which will break out of the currently running code.

    If I press the button on the top of the pcb during plug in, nothing happens. The blinking led not changing. It's the same, when I insert the pico without pressing a button.

    So: You get the red LED flashing once when you plug the board in, but pressing the button while plugging it in makes absolutely no difference at all? Still just one red flash?

    Are you sure that the button really is being held down? It seems amazingly unlikely but I guess it's possible that the button is broken.

    You could try plugging in while shorting across the button:

    A<|   ___   |>C
      |  |___|  |

    So either shorting A and B, or C and D.

  • many thanks for your patience with my problem.
    The following text are my messages in the ide.

    Found PICO_R1_3, 1v93
    Loading 2929 bytes from flash...

    New Firmware available (1.93 installed, 1v99 available)
    Connected to COM4

    Connected to COM4
    Error Flashing: Can't find STM32 bootloader. Make sure the chip is reset into bootloader mode by holding down BTN1 while pressing RST

    I shorted the two contacs ab and then cd. No changes with the leds. Then I took my voltmeter. A=3,3V B=open. Then I pressed the button and B=3,3V. The same with cd. I think, the button must be ok. After that I controlled the voltage of the Pin (I think it's PC13) on the µP with is connected with the button =0V. If I pressed the button voltage=3,3V .
    I made another test. I load a programm into to RAM and pressed the resetbutton. Nomally the code was lost, in this case not. I think, the button has no function.

  • Fri 2018.10.05

    @jm, a quick note on posting style, not sure if you were aware, but when you place a blank line between the end of a quoted text block and the next text line in succession, the subsequent text will return in original font and not in the quoted smaller Italics font.

    Do you wish to continue with the firmware flash process? May I ask, were you attempting the 'Advanced Flashing' found on page:


    We knowing this is crucial to moving forward.

    At what step from #8 above is the last completed step before your error occurs?

    While trying not to deviate too much from the original thread post, from the content that is displayed from the IDE output, it appears (to me anyway) that the technique for holding the button down while plugging the device in, may not be held down long enough while plugging in. What does the LED do as you continue to hold down the button at least half a second after connecting?

    Now deviating:

    re: ' I think, the button has no function.'

    It appears you have established communications between the IDE and the Pico. Have you tried any of the tutorials found at:


    and specifically the Pico button tutorial:


    which should prove the button on the Pico is just that, a button and I'm sure you'll find the one on your Pico is working fine as you proved with your voltage measurements.

  • Hi Robin,
    that was a good advice for me with the blank line and also the tutorial with the buttons. I found that what I think. The button has no function for the µP.

    digitalRead(BTN) <--no pressing the button
    digitalRead(BTN) <--Here I pressed the button
    digitalRead(B4) <--no pressing the button
    digitalRead(B4) <--Here I pressed the button

    The extension button works fine like in the tutorial but not the BTN. That's why I can not do the Update, but what is the cause?

  • Sat 2018.10.06

    @jm, as you may have discovered, the onboard button may be suspect. I just tried this on my Pico and either works for me. Can you try the BTN test again with BTN1 for comparison please.

    digitalRead(BTN) vs digitalRead(BTN1)

    Both worked for me. Worth a try. . . .

    ref #16: ' The same with cd. I think, the button must be ok'

    In #16 it seemed you were able to get voltage across the button, so is it possible the button is just spongy? There are many times it doesn't feel like contact is made, so just have to try again. Have you tried a fingernail or a match stick/toothpick. I find the back edge of a plastic knife is sometimes needed. Do you feel the detent 'click' when using a fingernail?

    As @Gordon explained in #15 above, are you able to manually jumper the button and get the above digitalRead() to work? If so, are you able to flash that way?

  • I made the same procedure and i feel the detent 'click'. In #16 I wrote, there is a changing on Pin C13 from 0V to 3,3V, wenn I pressed the button. In this sense, the button must be ok.

    DigitalRead(BTN1) <--no pressing the button
    digitalRead(BTN1) <--Here I pressed the button

    Both worked for me. Worth a try. . . .

    What are the differences between the two switches? Do you can explain that for me?

    As @Gordon explained in #15 above, are you able to manually jumper the button and get the above digitalRead() to work? If so, are you able to flash that way?

    When I manually jumper the button it's the same. No changes of the level.

  • Sat 2018.10.06

    'What are the differences between the two switches'

    That is a good question. I stumbled across that when using setWatch() to detect the Pico button press. My Pico would only recognize BTN1 and not BTN as the docs indicate for digitalRead()

    I noticed in the documentation that for the original board both BTN and BTN1 are used. So must be leftover or duplication, such that the two are in fact equal in memory. Don't know. A question for the source designer.


    Just checked C13 as you indicated and that page indicates BTN1

    and further down the page . . .

    Button accessible using the built-in variable BTN

    Must be leftover documentation as I found the doc with the original reference BTN1:


    This is interesting, only BTN1 is referenced:



    Thought the schematic might help, but is BTN the switch at bottom center?

    'there is a changing on Pin C13 from 0V to 3,3V, . . . In this sense, the button must be ok.'

    This would indicate that the onboard button is in fact working. So, when you attempt to flash, are you holding down the button as the USB cable is applied and keep holding for at least half a second after the connection is made? and, . . . what do the LEDs do?

  • In the datasheet of the STM32 page 35 I also found the double assignment of the pins. There are also boot0 and boot1 as well as C13 and B13 for BTN and BTN1. If I measure the voltages at b13 and c13, then one of them is inactive when pressing the button.
    I suspect that might have something to do with the on-board version. The IDE recognizes the board with V1.3. If I look at the bottom of the board, then there is V1.4b. Maybe there are any changes.
    If I connect the Pico to USB and keep BTN pressed, then the status of the LEDs will not change.

  • Sun 2018.10.07

    @jm, what do we know does work at this point? It appears the IDE is communicating, otherwise digitalRead() would not have worked. So that others may be able to garner additional insight, would you please type process.memory() and process.env in the left hand console pane of the IDE and post those responses.

  • Here I give you the appropriate information.

    ={ "free": 5053, "usage": 47, "total": 5100, "history": 26,
    "stackEndAddress": 536958472, "flash_start": 134217728, "flash_binary_end": 380528, "flash_code_start": 134234112, "flash_length": 393216 }
    "VERSION": "1v93",
    "BUILD_DATE": "Jul 10 2017",
    "BUILD_TIME": "16:50:43",
    "GIT_COMMIT": "d504008aa8305ef0cd95225c4482bd2166c7999­3",
    "BOARD": "PICO_R1_3",
    "CHIP": "STM32F401CDU6",
    "CHIP_FAMILY": "STM32F4",
    "FLASH": 393216, "RAM": 98304,
    "SERIAL": "43006b00-04513634-30323836",
    "CONSOLE": "USB",
    "EXPORTS": { "jsvLock": 284169, "jsvLockAgainSafe": 284155, "jsvUnLock": 284129, "jsvSkipName": 128085,

    "jsvMathsOp": 76299, "jsvMathsOpSkipNames": 76349, "jsvNewFromFloat": 284485, "jsvNewFromInteger": 284521, "jsvNewFromString": 287041,
    "jsvNewFromBool": 284505, "jsvGetFloat": 128453, "jsvGetInteger": 124561, "jsvGetBool": 129445, "jspeiFindInScopes": 80285,
    "jspReplaceWith": 84649, "jspeFunctionCall": 87137, "jspGetNamedVariable": 80345, "jspGetNamedField": 81617, "jspGetVarNamedField": 81209,
    "jsvNewWithFlags": 284325 }


  • Sun 2018.10.07

    Not defeated, but am running out of ideas. Looks okay. Was hoping others would assist here.

    I have no experience doing the following. Caveat Emptor

    From #5 above, it was mentioned that voltage was applied to the tear drop pad. I suppose it is possible that a partial flash was performed and the bootloader became corrupt. As I see it, one might attempt the 'Advanced Reflashing' section, but would hold off until I had confirmation from others. @Gordon will most likely respond in the next few days and from these exchanges may be able
    to provide additional steps to take. If you are able to code with the Pico as is, I might try some of the tutorials in the meantime.

    On a long shot:
    Do you have a YouTube account or other public access video repository and would you/are you able to provide a ten second video of you plugging the board in, the LEDs flashing and at the step in the IDE flash process from the PC monitor? If you are willing, that would provide definitive proof for Gordon and make for a more timely response back to you.

  • Post a reply
    • Bold
    • Italics
    • Link
    • Image
    • List
    • Quote
    • code
    • Preview

My pico ist unable to activate the bootloader to upgrade the firmware 1.93 to 1.99

Posted by Avatar for jm @jm