cancel
Showing results for 
Search instead for 
Did you mean: 

How to update firmware FPWF01SA via OTP?

mbortole9
Associate II
Posted on July 28, 2015 at 15:54

Hi,

I am wondering how to update FPWF01SA firmware via OTA? I saw the command in the user manual, but I could not find the ST website to download the firmware. And how is the sequence to upgrade the firmare? Moreover, how can I know the last firmware version available?

One more thing: I am trying to communicate the module over UDP and it is not sending/receiving anything. I am wondering if an firmware upgrade will solve this issue.

I really appreciate any help.

Thanks!

Here is AT&V dump:

# Dumping All Configuration Keys:

#  nv_manuf = ST

#  nv_model = SPWF01SA1

#  nv_serial = 2914D34571

#  nv_wifi_macaddr = 00:80:E1:FF:CC:B4

#  blink_led = 0

#  wind_off_low = 0x00000000

#  wind_off_medium = 0x00000000

#  wind_off_high = 0x00000000

#  user_desc = exo

#  escape_seq = at+s.

#  localecho1 = 0

#  console1_speed = 921600

#  console1_hwfc = 0

#  console1_enabled = 1

#  sleep_enabled = 0

#  standby_enabled = 0

#  standby_time = 10

#  wifi_tx_msdu_lifetime = 0

#  wifi_rx_msdu_lifetime = 0

#  wifi_operational_mode = 0x00000011

#  wifi_beacon_wakeup = 1

#  wifi_beacon_interval = 100

#  wifi_listen_interval = 0

#  wifi_rts_threshold = 3000

#  wifi_ssid = 48:32:43:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00

#  wifi_ssid_len = 3

#  wifi_channelnum = 6

#  wifi_opr_rate_mask = 0x00003FCF

#  wifi_bas_rate_mask = 0x0000000F

#  wifi_mode = 3

#  wifi_auth_type = 0

#  wifi_atim_window = 0

#  wifi_powersave = 0

#  wifi_tx_power = 18

#  wifi_rssi_thresh = 0

#  wifi_rssi_hyst = 0

#  wifi_ap_idle_timeout = 15000

#  wifi_beacon_loss_thresh = 10

#  wifi_priv_mode = 0

#  wifi_wep_keys[0] = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00

#  wifi_wep_keys[1] = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00

#  wifi_wep_keys[2] = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00

#  wifi_wep_keys[3] = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00

#  wifi_wep_key_lens = 00:00:00:00

#  wifi_wep_default_key = 0

#  wifi_wpa_psk_raw = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00

#  wifi_wpa_psk_text = 

#  ip_use_dhcp = 2

#  ip_use_httpd = 0

#  ip_mtu = 1500

#  ip_hostname = H2C

#  ip_apdomainname = captiveportal.net

#  ip_ipaddr = 192.168.1.1

#  ip_netmask = 255.255.255.0

#  ip_gw = 192.168.1.1

#  ip_dns = 192.168.1.1

#  ip_http_get_recv_timeout = 3000

#  ip_dhcp_timeout = 20
16 REPLIES 16
Posted on July 28, 2015 at 20:08

Hi,

- run AT+S.FWUPDATE command for OTA update

- you cannot perform the OTA update directly from ST servers. Download the zip file containing the FW, unzip the package, move OTA file to your own webserver, than use the FWUPDATE command

- download hands-on manuals, and follow tutorials

- last FW release is the 3.4 (150410-c2e37a3). Check AT+S.STS. For sure you are not using FW3.4 (AT&V dump miss some new variable)

- set client (AT+S.SOCKx) and/or server (AT+S.SOCKD) to use TCP/UDP sockets

j
mbortole9
Associate II
Posted on July 30, 2015 at 17:19

Hi Jerry,

First of all, thanks for the quick answer. 

I updated the firmware to version 3.4 via UART (below are the AT&V content after update and new parameters configuration). However, I couldn't get the module working yet.

So, here is my setup: I want the module to create a AP (can be an open network) and allow a laptop to connect to it. Until here I could succeed on my configuration. Next step is, after I detect that the laptop (client) is connected, I want to, periodically, send UDP packets to it. And occasionally receive UDP packets from the laptop application. But here is the problem, neither of these two tasks work. I tried by using the commands:

at+s.sockon=192.168.1.2,3000,u<CR>

The module answer with an ok any give me an ID=00. Then I try:

at+s.sockw=00,10<CR>

1234567890<CR>

The module answer with an ok but I don't get nothing on the laptop.

And if I send UDP packets from the laptop to the module, I get nothing too.

at+s.sockq=00

This returns me datalen=00

Can you help me try to figure out what is wrong? Am I missing some detail or my configuration is wrong in any way?

Thanks in advance,

Bortole.

# Dumping All Configuration Keys:

#  nv_manuf = ST

#  nv_model = SPWF01SA1

#  nv_serial = 2914D34571

#  nv_wifi_macaddr = 00:80:E1:FF:CC:B4

#  blink_led = 0

#  wind_off_low = 0x00000000

#  wind_off_medium = 0x00000000

#  wind_off_high = 0x00000000

#  user_desc = anonymous

#  escape_seq = at+s.

#  localecho1 = 0

#  console1_speed = 921600

#  console1_hwfc = 0

#  console1_enabled = 1

#  sleep_enabled = 0

#  standby_enabled = 0

#  standby_time = 10

#  wifi_tx_msdu_lifetime = 0

#  wifi_rx_msdu_lifetime = 0

#  wifi_operational_mode = 0x00000011

#  wifi_beacon_wakeup = 1

#  wifi_beacon_interval = 100

#  wifi_listen_interval = 0

#  wifi_rts_threshold = 3000

#  wifi_ssid = 48:33:43:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00

#  wifi_ssid_len = 3

#  wifi_txfail_thresh = 100

#  wifi_ht_mode = 0

#  wifi_channelnum = 6

#  wifi_opr_rate_mask = 0x00003FCF

#  wifi_bas_rate_mask = 0x0000000F

#  wifi_mode = 3

#  wifi_auth_type = 0

#  wifi_atim_window = 0

#  wifi_powersave = 0

#  wifi_tx_power = 18

#  wifi_rssi_thresh = 0

#  wifi_rssi_hyst = 0

#  wifi_ap_idle_timeout = 120

#  wifi_beacon_loss_thresh = 10

#  wifi_priv_mode = 0

#  wifi_wep_keys[0] = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00

#  wifi_wep_keys[1] = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00

#  wifi_wep_keys[2] = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00

#  wifi_wep_keys[3] = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00

#  wifi_wep_key_lens = 00:00:00:00

#  wifi_wep_default_key = 0

#  wifi_wpa_psk_raw = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00

#  wifi_wpa_psk_text = 

#  ip_use_dhcp = 2

#  ip_use_httpd = 1

#  ip_mtu = 1500

#  ip_hostname = iwm-FF-CC-B4

#  ip_apdomainname = captiveportal.net

#  ip_apredirect = firstset.html

#  ip_ipaddr = 192.168.1.1

#  ip_netmask = 255.255.255.0

#  ip_gw = 192.168.1.1

#  ip_dns = 192.168.1.1

#  ip_http_get_recv_timeout = 3000

#  ip_wait_timeout = 12000

#  ip_dhcp_timeout = 20

#  ip_sockd_timeout = 250

Posted on July 31, 2015 at 10:24

Hi,

once PC is connected to miniAP, you have 2 options:

- open a UDP socket server on the module (through SOCKD command), and use PC as socket client. This way, module automatically switch to DataMode on incoming UDP packet;

- open a UDP socket server on PC, and use module as socket client. My suggest: use '',ind'' parameter into SOCKON command: this way, on every received UDP packet, a WIND is printed on UART.

jerry

mbortole9
Associate II
Posted on July 31, 2015 at 20:36

Hi Jerry,

I tried as you told me. Now, using the command AT+S.SOCKD=3000,U it works, so I am able to receive the data for about 1 minute. Then the module reboots by itself, and the only way to make it work again is to restart everything, including my program on the PC :(

Using the command AT+S.SOCKON=192.168.1.2,3000,U,IND it does not work at all. I cannot send data or receive anything. This is kind of frustrating :(

I am missing something? What kind of test do you recommend me to do in order to solve this issue?

Thanks again for your attention!

Bortole

Posted on August 03, 2015 at 16:15

Hi,

follow hands-on. Labs #7 (socket client) and #13 (socket server).

j

mbortole9
Associate II
Posted on August 03, 2015 at 20:06

Hi Jerry,

Forgive my ignorance, but what hands-on Lab #7 and #3? Are those ST documents? Can you please send me the links?

Thanks,

Bortole

Nickname3786_O
Associate II
Posted on August 03, 2015 at 21:10

Hi Bortole,

please find the direct link to the hands-on training below:

http://www.st.com/web/en/catalog/tools/PF261605

It's aligned with the FW 3.4. As told by Gerardo, you can find the step-by-step LAB to use the module as socket client (a demo socket server is included in the package) and a different LAB to use the module as socket server (a demo socket client is suggested in the LAB).

Salvo
mbortole9
Associate II
Posted on August 04, 2015 at 15:21

Hi Salvo,

Thank you, this is great document! A couple of examples for each config helps a lot, this is something I was missing 😉 In my opinion this document should be added to the module's data sheet 🙂

Now, I have my problem partially solved. Curious, the solution was: downgrade the module to version 3.3 and upgrade back to 3.4 (all via UART). Now my PC program can receive data fine 🙂 However, I am only able to send data back from PC to module using AT+S.SOCKD command. I think this is a mismatch with the UDP ports…

So, if you guys can help once again, I have a few questions left after reading the document:

1 - When I put the module in miniAP mode and use the command AT+S.SOCKD=3000,U, module automatically switches to data mode and starts receiving data from PC. How I send data back in this mode (if possible)? And how I define UDP packet size in this case?

2 -  When I put the module in miniAP mode and use the command AT+S.SOCKON=192.168.1.2,3000,U,IND, I am able to send data from module to PC (PC IP is 192.168.1.2 and local port is 3000). In this mode I do not receive any data back :(  Which is the local port of the module in this case? The same 3000?

3 - When the PC connect to the module in miniAP mode, I periodically get this message: +WIND: 29DHCP reply from 192.168.1.2/[MAC addr]. It is possible to stop this kind of message to be prompt on the UART all the time? Or at least making it much less frequently?

Thanks again and I really appreciate you guys help.

Regards,

Bortole 

Posted on August 04, 2015 at 15:35

1 - When module is into DataMode, it automatically prints received bytes, and automatically send (to remote client) received bytes from UART.

You can switch back to CommandMode through ''escape_sequence''.

Note that DataMode does not accept AT-Commands. They are sent to remote client as raw data.

2 -  Module's local port cannot be set. When you open a socket client by ''IND'', you should get WINDs on pending data every time a packet is received. If not, check PC/other settings.

3 - Use wind_off variables

ciao

jerry