Skip to main content
tom239955_st
Associate III
October 17, 2016
Question

SPWF01SA firmware update issue

  • October 17, 2016
  • 2 replies
  • 2258 views
Posted on October 17, 2016 at 10:59

Hi,

I am working on win10 using the STEVAL-IDW001V1 Evaluation module. Application development has been fine, but now I would like to update the firmware to the latest to use the extra features.

I have tried both the UART bootloader method and the AT command OTA using Apache server and both have their own problems.

I reverted to trying the UART method because I could not get the OTA method to work.

OTA Method - I am not able to tell whether my module is *.11 or *.21

1. Connect module to Wifi network

2. Start Apache 2.4 server on PC (also connected to same network)

3. Confirm server running by opening browser 127.0.0.1

4. Place .ota file in htdocs folder of the server

5. Use AT+S.FWUPDATE=127.0.0.1,/SPWF01S-160129-c5bf5ce-RELEASE-main.ota

What returns is:

ERROR: connect() failed, aborting<CR><LF>

 

 

UART Method

 

1. Place J4 so BOOT 0 is high.

2. HW reset the module

3. Run the FW_update.bat

4. I make the on screen selection as follows, but it hangs here

0690X00000605ZfQAI.png

Any pointers on either method?

Here are my AT&V and AT+S.STS

♯ Dumping All Configuration Keys:<CR><LF>

♯  nv_manuf = ST<CR><LF>

♯  nv_model = SPWF01SA1<CR><LF>

♯  nv_serial = 3514D37752<CR><LF>

♯  nv_wifi_macaddr = 00:80:E1:B4:A4:F1<CR><LF>

♯  blink_led = 0<CR><LF>

♯  wind_off_low = 0x00000000<CR><LF>

♯  wind_off_medium = 0x00000000<CR><LF>

♯  wind_off_high = 0x00000000<CR><LF>

♯  user_desc = anonymous<CR><LF>

♯  escape_seq = at+s.<CR><LF>

♯  localecho1 = 0<CR><LF>

♯  console1_speed = 115200<CR><LF>

♯  console1_hwfc = 0<CR><LF>

♯  console1_enabled = 1<CR><LF>

♯  sleep_enabled = 0<CR><LF>

♯  standby_enabled = 0<CR><LF>

♯  standby_time = 10<CR><LF>

♯  wifi_tx_msdu_lifetime = 0<CR><LF>

♯  wifi_rx_msdu_lifetime = 0<CR><LF>

♯  wifi_operational_mode = 0x00000011<CR><LF>

♯  wifi_beacon_wakeup = 1<CR><LF>

♯  wifi_beacon_interval = 100<CR><LF>

♯  wifi_listen_interval = 0<CR><LF>

♯  wifi_rts_threshold = 3000<CR><LF>

♯  wifi_ssid = 42:54:48:75:62:33:2D:57:52:48:38:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00<CR><LF>

♯  wifi_ssid_len = 11<CR><LF>

♯  wifi_channelnum = 6<CR><LF>

♯  wifi_opr_rate_mask = 0x00003FCF<CR><LF>

♯  wifi_bas_rate_mask = 0x0000000F<CR><LF>

♯  wifi_mode = 1<CR><LF>

♯  wifi_auth_type = 0<CR><LF>

♯  wifi_atim_window = 0<CR><LF>

♯  wifi_powersave = 0<CR><LF>

♯  wifi_tx_power = 18<CR><LF>

♯  wifi_rssi_thresh = 0<CR><LF>

♯  wifi_rssi_hyst = 0<CR><LF>

♯  wifi_ap_idle_timeout = 120<CR><LF>

♯  wifi_beacon_loss_thresh = 10<CR><LF>

♯  wifi_priv_mode = 2<CR><LF>

♯  wifi_wep_keys[0] = 12:34:56:78:90:5C:40:00:00:00:00:00:00:00:00:00<CR><LF>

♯  wifi_wep_keys[1] = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00<CR><LF>

♯  wifi_wep_keys[2] = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00<CR><LF>

♯  wifi_wep_keys[3] = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00<CR><LF>

♯  wifi_wep_key_lens = 05:00:00:00<CR><LF>

♯  wifi_wep_default_key = 0<CR><LF>

♯  wifi_wpa_psk_raw = XXXXXXXXX<CR><LF>

♯  wifi_wpa_psk_text = XXXXXXXXX<CR><LF>

♯  ip_use_dhcp = 1<CR><LF>

♯  ip_use_httpd = 1<CR><LF>

♯  ip_mtu = 1500<CR><LF>

♯  ip_hostname = embeddedbrd<CR><LF>

♯  ip_apdomainname = captiveportal.net<CR><LF>

♯  ip_ipaddr = 255.255.255.255<CR><LF>

♯  ip_netmask = 255.255.255.255<CR><LF>

♯  ip_gw = 255.255.255.255<CR><LF>

♯  ip_dns = 255.255.255.255<CR><LF>

♯  ip_http_get_recv_timeout = 3000<CR><LF>

♯  ip_dhcp_timeout = 20<CR><LF>

♯  ip_sockd_timeout = 250<CR><LF>

♯ Status & Statistics:<CR><LF>

♯  version = 141106-0950875-SPWF01S <CR><LF>

♯  reset_reason = 0<CR><LF>

♯  conf_flag = 5<CR><LF>

♯  system_uptime = 3017<CR><LF>

♯  system_sleeptime = 0<CR><LF>

♯  gpio_enable = 0<CR><LF>

♯  captiveportal = 0<CR><LF>

♯  wifi_state = 10<CR><LF>

♯  wifi_bssid = 00:01:3B:9F:1A:82<CR><LF>

♯  wifi_aid = 2<CR><LF>

♯  wifi_channelnum = 11<CR><LF>

♯  wifi_sup_rate_mask = 0x003FFFCF<CR><LF>

♯  wifi_bas_rate_mask = 0x0000000F<CR><LF>

♯  wifi_chan_activity2 = 0x00003FFF<CR><LF>

♯  wifi_max_tx_power = 18<CR><LF>

♯  wifi_reg_country = GB <CR><LF>

♯  wifi_dtim_period = 3<CR><LF>

♯  wifi_sleeping = 1<CR><LF>

♯  wifi_num_assoc = 0<CR><LF>

♯  ip_ipaddr = 192.168.1.94<CR><LF>

♯  ip_netmask = 255.255.255.0<CR><LF>

♯  ip_gw = 192.168.1.254<CR><LF>

♯  ip_dns = 192.168.1.254<CR><LF>

♯  ip_sock_open = 0<CR><LF>

♯  ip_sockd_port = 0<CR><LF>

♯  free_heap = 20752<CR><LF>

♯  min_heap = 20008<CR><LF>

♯  current_time = 3017<CR><LF>

#spwf01sa #ota
    This topic has been closed for replies.

    2 replies

    davedave94
    Associate
    October 17, 2016
    Posted on October 17, 2016 at 15:31

    Tom,

    The .11 module has the onboard flash that allows for OTA programming.  Check which module you bought.  The .21 module has 0.5MB flash as opposed to the 1.5MB for the .11 module.

    I didn't risk the UART method as I read that you can brick your module.  I was (eventually) successful in updating via the OTA method.  I followed the ''Lab 2a: FOTA update'' in the ST FW 3.5 WiFi Training - Hands On PDF.  

    https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwijtc7t9-HPAhUI1oMKHYAxA5YQFggeMAA&url=http://www.st.com/resource/en/product_presentation/stsw-idw002_wifi_training.pdf&usg=AFQjCNFfwR4KCk0CkxgeWTvwHJX1u7fe8w&sig2=jCjP-YbO3LksYo8PHUtkVw

    The issues I ran into were

    1) running on our internal company server didn't work, as the firmware wouldn't download correctly.

    2) Setting up Apache on my local computer was painless, but it didn't work until I opened the port on the Windows Firewall.

    After those fixes the firmware update was fast and painless!  Don't forget to reload factory defaults after the update.  Also, I read that some people's hardware causes the update to hang because they don't properly set levels on certain pins.  If you are using ST's demo board (STEVAL-IDW001V1), then this is not an issue.

    Gerardo GALLUCCI
    ST Employee
    October 18, 2016
    Posted on October 18, 2016 at 22:24

    Hi,

    UART method is safe if/when writing AFTER address 0x08002800.

    - using batch script (inside firmware package), there is no way to brick the module (starting address is transparent)

    - using STM32 Flasher, pay attention to starting address (MUST be set)

    Regards

    jerry

    valentin
    Associate III
    February 15, 2017
    Posted on February 15, 2017 at 20:24

    Hi

    ‌,

    it seems I just bricked my .21 module doing exactly that.

    I was trying the batch script but it would just say 'COM10 no error'. So I then got the STM32flasher and applied the exact same commands from the batch file and it worked but hang at a few percent.

    THEN I read here that the -s 0x08002800 is mandatory - why isn't that in the original upgrade script then? And why wouldn't the original flasher work?

    Original flasher .bat content:

    @echo off

    cls

    echo ****************************************************

    echo * FW update via UART *

    echo * To place the module in firmware download mode *

    echo * the BOOT0 pin needs to be pulled high (3.3v). *

    echo ****************************************************

    echo.

    @set /P VARIABLEA=TYPE THE FULL PATH WHERE .bin FILE IS LOCATED (i.e. C:/ , C:/Documents):

    echo.

    @set /P VARIABLEB=TYPE THE NUMBER OF THE COM PORT ALLOCATED (i.e. 9):

    echo.

    cd '%VARIABLEA%'

    1203flash.exe -b 115200 -w SPWF01S-160129-c5bf5ce-RELEASE-main.bin COM%VARIABLEB%

    echo *

    echo *

    echo * Press a key to exit...

    pause>nul

    -> My used command line:

    stm32flash -w SPWF01S-160129-c5bf5ce-RELEASE-main.bin -b 115200 COM10

    -> The error message of stm32flash:

    stm32flash 0.5

    http://stm32flash.sourceforge.net/

    Using Parser : Raw BINARY

    Interface serial_w32: 115200 8E1

    Version : 0x22

    Option 1 : 0x00

    Option 2 : 0x00

    Device ID : 0x0414 (STM32F10xxx High-density)

    - RAM : 64KiB (512b reserved by bootloader)

    - Flash : 512KiB (size first sector: 2x2048)

    - Option RAM : 16b

    - System RAM : 2KiB

    Write to memory

    Erasing memory

    Failed to write memory at address 0x08000000

    And the error message of the first attempt using the original batch file:

    ****************************************************

    * FW update via UART *

    * To place the module in firmware download mode *

    * the BOOT0 pin needs to be pulled high (3.3v). *

    ****************************************************

    stm32flash - http://stm32flash.googlecode.com/

    Using Parser : Raw BINARY

    COM10: No error

    *

    *

    * Press a key to exit...

    Any ideas? It seems that the active bootloader is the default one in ROM, so I don't see why I cannot just write the .bin file in to flash.

    If I try to dump flash contents, I get only 0xFF (512KB of it). But it works.

    I attached the log of the actual bus communication @9600baud. Maybe that explains why I can't write?

    ________________

    Attachments :

    spwf_error.xlsx : https://st--c.eu10.content.force.com/sfc/dist/version/download/?oid=00Db0000000YtG6&ids=0680X000006HyvM&d=%2Fa%2F0X0000000bDu%2F8HMwjDttlzwoXJxOXAv95UqZ60qZzgfx8Aht24PgybA&asPdf=false
    Gerardo GALLUCCI
    ST Employee
    February 16, 2017
    Posted on February 16, 2017 at 10:11

    Hi,

    SPWF01S-xxx.bin is for *.11 modules. You should use SPWF02S-xxx.bin for your *.21 module.

    If we are lucky, module's bootloader is sane. Otherwise, contact ST office/distributor to get the bootloader application.