No announcement yet.

Firmware Update over UART without power cycle

  • Filter
  • Time
  • Show
Clear All
new posts

  • Firmware Update over UART without power cycle

    I'm trying to update the firmware of the xPico in the field. Unfortunately the OTA method is very unreliable, so I'm looking into updating the xPico firmware over UART as described in the Wiki.

    I can control the RESET and the DEFAULT pin from my MCU, but I can not control the power, so I was hoping the following procedure would suffice:
    1. hold down RESET pin
    2. hold down DEFAULT pin
    3. wait for 50ms
    4. release RESET pin
    I would now expect the xPico to output "Polling" on Line 1. But instead I get "Command Line started." and "mux" respectively - the xPico is booting normally and not starting booting into recovery mode.

    Am I missing something or is it really not possible to update the xPico firmware over UART without a power cycle?

  • #2
    Yes, you can do this with just RESET and DEFAULT, you don't need to cut power off. You need to send the string "!SL\r" repeatedly as you release the RESET pin. The xPico Wi-Fi will respond with "G", and then you can send the recovery loader ROM.

    See the Tera Term macro example here:



    • #3
      Thank you, it is working!

      There are still some strange issues remaining: When I keep flow control enabled (RTS & CTS), the firmware upload will stall after ~3800 bytes.
      Without flow control the entire firmware gets transfered, after "Send image now ...", but I don't get a response. Does that mean some bytes are missing and xPico is waiting for them, or do I have to send another command to actually flash the firmware?


      • #4
        You have to use hardware flow control for the firmware update. If it is stalling, make sure that the RTS and CTS connections on your serial port are working correctly.


        • #5
          My problem was that I was not reading the response from xPico when transferring the firmware file. With flow control enabled this would then stall. Now I have implemented it properly and the firmware update is working