Download oWL Pico API sources and SPB800 firmware
The oWL Pico API package comes with a complete reference design which is ported to various platforms. For information on how to compile and run the oWL Pico API reference design, see the information for the particular host
Platforms.
Make sure that the version number of the oWL Pico API matches the version of the SPB800/SPB820 firmware. In general, the middle digit must be the same for the oWL Pico API and the SPB800/SPB820 firmware to obtain compatability. E.g. oWL Pico API 1.
2.8 will be compatiable with SPB800 firmware 1.
2.26 but oWL Pico API 1.
3.8 will
not be compatible with SPB800 firmware 1.
2.26.
See below for information on how to upgrade the firmware on the SPB800/SPB820 devices. See
Architecture for a description of the files included in the oWL Pico API reference design.
Upgrade SPB800 firmware
NOTE: SPB800 firmware version 1.2.2 or later can only be applied to SPB800 devices of revision
R4A or later! Contact
sales@hd-wireless.se for information on how to replace or upgrade your SPB800 board if you have an older revision of the hardware.
To upgrade the firmware on the SPB800 device, the SPB800 must be connected to a serial port on a PC. A terminal application, e.g.
TeraTerm, should be used to transfer the firmware image to the SPB800 device.
The steps are shown below:
- Configure TeraTerm to 115200 8N1 and power up the SPB800 EVK. One dot should be printed every second. (Note that the baudrate 57600 should be used if upgrading from 1.2.x firmware or earlier).
- Enter configuration mode by pressing <enter>
- Type "upgrade". SPB800 will now wait for a file being transferred using the XMODEM protocol.
- In TeraTerm, select File->Transfer->XMODEM and select the firmware image. Make sure the "checksum" radio button is selected.
- The transfer should start when OK is pressed. Note that SPB800 will time out after about 20 seconds if not file is sent, in that case restart from step 2 and try again.
- When the transfer is complete, the SPB800 will print "completed - rebooting" in the TeraTerm window. Now wait until the dots are printed again.
Note that firmware version 1.3.0 or later supports firmware upgrade over the air. See the documentation for w lp_fw_upgrade() in
wlp_api.h
for details.
Upgrade SPB820 firmware
To upgrade the firmware on the SPB820 device, the SPB820 must be connected to a serial port on a PC. A terminal application, e.g.
TeraTerm, should be used to transfer the firmware image to the SPB820 device.
The steps are shown below:
- Configure TeraTerm to 115200 8N1 and power up the SPB820 EVK. One dot should be printed in the terminal.
- Enter configuration mode by pressing <enter> directly when the dot is printed. This must be done within one second or else SPB820 will jump out of firmware upgrade mode and SPB820 must be restarted again.
- SPB820 will print "C"s in the terminal window.
- In TeraTerm, select File->Transfer->XMODEM and select the firmware image. Make sure the "checksum" radio button is selected.
- The transfer should start when OK is pressed. Note that SPB820 will time out after about 25 seconds if no file is sent, in that case restart from step 2 and try again.
- When the transfer is complete and the SPB820 have read the firmware, the SPB820 will automatically start to execute the new firmware. (Note: This can take a minute or two).
Troubleshooting
- Be sure to let the SPB820 finish the firmware read before restarting or connecting to it. The SBP820 does not show any status on whether it has finished the firmware read so one should wait at least a few minutes before
attempting any of the above.
- If the SPB820 is reset before the firmware read is complete, the SPB820 will try to read the firmware again when restarted, e.g. if the XMODEM transfer was succesful there is no need to transfer the firmware again.
- If one has succesfully transfered the firmware through XMODEM, waited several minutes and the SPB820 is still not responding when connected to, try to transfer the firmware image again through XMODEM as per step 2.
Note that firmware version 2.0.0 supports firmware upgrade over the air. See the documentation for w lp_fw_upgrade() in wlp_api.h for details.
History
List of added features and bug fixes for each release.
2.2 (r10379)
Api additions
- Function wlp_loopback() has been added. Loopback data to/from device. Used to test transport communication.
Api changes
- Function wlp_reset() has been removed.
2.0.1 (r8267)
Api additions
- wlp_get_linkctx() and wlp_set_linkctx() has been added. Get linkctx retreives information about the link. Set linkctx sets the link context to be used before connecting.
- wlp_scan() has been added. Starts a scan on all channels.
- wlp_set_wps() has been added. Enables or disables WPS (Wi-Fi Protected Setup).
Api changes
- Function wlp_set_led() has been removed.
- Functions wlp_set_poll_period() and wlp_set_heartbeat() is deprecated and has been removed.
Known bugs
- When using static ip, disconnecting and then setting dhcp to enable, sometimes the address callback is not called even though we have been given an ip address.
- SPB820 cant use wakeup-pin to wake up from deep sleep.
- PS Poll frames is not sent when using linux as host.
- wlp_api.h: wlp_init() documentation says that: "wlp_init() will send a 'w' character, a 'w' will be received once the wifi device is ready". This is not the case in release 2.0.1. No characters will be sent from wlp_init().
- wlp_api.h: wlp_init() documentation says that: "The sequence on the host becomes 2) wait 200ms". In release 2.0.1 this wait time is set to 1300ms.
- wlp_get_fw_version(): Function will return version 2.0.0 even though the device has been upgraded to version 2.0.1.
1.3.2 (r5073)
Bug fixes in client
- Calling wlp_recv() when no rx data is pending caused the system to hang.
- wlp_get_network() could return corrupt data when the communications with the SPB800 was down.
- Unnamed unions caused compilation problems with C89 compilers.
- When a new TCP connection was accepted on a listening socket the client could end up setting the rx/connect callbacks on the wrong socket instance. This would cause the callbacks for the new socket to remain unset and the socket would effectively hang until closed.
- The Linux client had problems where the serial port communication could hang until a key was pressed.
Bug fixes in firmware
- If data was received immediately after a TCP connection had been accepted then the rx event could be lost causing the data to stay on the SPB800-side until another event (such as more data arriving, or the connection being closed) occured on the socket. Data was not lost but the socket could appear to be hanging pending external action.
- The SPB800 tries to accumulate data received from the client for a short period of time (20 ms) before sending it to avoid sending TCP packets with a very small payload. The data accumulation did not work properly for the first sent packet which would often cause the first TCP packet in a session to contain only a single byte of payload.
- Firmware upgrade was a lot more brittle in 1.3 than in 1.2.2. Downloading an invalid image file or interrupting the upgrade process would destroy the previously installed firmware, necessitating a recovery upgrade via xmodem over the serial port.
- Uploading firmware via the web page gave no feedback on completion. A "Download successful" page is now displayed when the process has finished successfully.
- Cached DNS lookups did not cause an event to be triggered. This had the effect of repeat lookups not being communicated to the host properly.
API additions
- wlp_set_fw_upgrade_cb() has been added. This function registers an optional callback that is used to notify the application of the status of a firmware upgrade. This function is only used to monitor the firmware upgrade processes via the internal web page (see wlp_fw_upgrade()) and can be ignored.
Known bugs
- Multicast does not work.
- The WiFi link is sometimes disconnected for unknown reason. The link is quickly reestablished but open TCP connections may be torn down
1.3.1 (r4172)
Bug fixes
- Fixed compilation error in driver when WLP_HEAP was set to 0.
- Fixed compilation error in driver due to emtpy struct declarations when building with IAR compiler.
-
wlp_set_baudrate()
fixed.
- The pico client
set_baudrate
function did not work correctly on 16/8-bit platforms.
- When the WAKEUP-pin isn't used the
wlp_poll()
could be delayed up to the IP-stack polling period ( wlp_set_poll_period()
). By default this period is 250ms which causes wlp_poll() to take a long time in these circumstances.
1.3.0 (r3932)
New features
- Support for advanced device power management through the new wlp_api functions wlp_set_ps(),
wlp_conf_ps()
, wlp_set_led()
, wlp_set_poll_period()
.
- Support for host power management through the optional asyncronous host-attention pin.
- Support for device firmware upgrade over the air with the new wlp_api function
wlp_fw_upgrade()
.
- RSSI and SNR information is available for the current network link through the wlp_api function
wlp_get_network()
.
- Host-device protocol messages (
wlp_proto.h
) are now 4-byte aligned to simplify porting to new environments.
- The additional example application webconfig is included. This application demonstrates how to use the access point mode to make is easy to configure a device with both wifi- and application-specific parameters. This is particularly useful on products that does not have suitable user interface.
Bug fixes
-
WLP_VERSION_CODE
macro is fixed and allows a client application to work with different versions of the wlp_api through compile-time switches.
- Fix issues where the link was lost (and recovered) after a certain time of inactivity on some access points. There is now a
wlp_set_heartbeat()
that works as a keep-alive for such access points.
API changes
- RSSI/SNR added to
wlp_network_t
- Default UART interface speed changed from 57600 to 115200
-
wlp_init()
added interface
and selectf
params
- The
wlp_linkup()
"wep" parameter has been replaced with a "auth" parameter that specifies the authentication mode. The valid values
for the "wep" parameter are still valid "auth" parameters so old uses of the wlp_linkup()
has the same behaviour as before. However, for security reasons it is recommended that a specific authentication mode (wep, wpa or wpa2) is passed to wlp_linkup()
whenever that information is known.
- The wlp_get_fw_version() function has added parameters "hw_rev" and "hw_rev_len" for retrieving the hardware revision string. Legacy code can pass NULL as "hw_rev" and 0 as "hw_rev_len".
API additions
-
wlp_get_fw_caps()
has been added. This function retrieves information on which hardware-specific features are supported by the currently attached Wi-Fi device. This is currently only used for power save modes and can otherwise be ignored.
-
wlp_set_wakeup_cb()
has been added. This function is used to register a function that manipulates the Wakeup pin. This is only used for power save modes and can otherwise be ignored.
- wlp_set_ps() has been added. This function is used to enable or disable the WiFi power save modes.
- wlp_conf_ps() has been added. This function is used to configure the WiFi power save modes.
- wlp_set_led() has been added. This function is used to enable or disable an LEDs present on the WiFi device. This function is only used to save power.
- wlp_set_heartbeat() has been added. This function is used to control the heartbeat feature which is used in station mode to prevent access points from dropping the connection. This feature is enabled by default.
-
wlp_set_poll_period()
has been added. This function is used to control the IP-stack polling frequency in the WiFi device. This is only used for power save modes and can otherwise be ignored.
- wlp_fw_upgrade() has been added. This function is used to enable WiFi device firmware upgrade via an internal web server.
-
wlp_set_yield_cb()
added
-
wlp_irq()
added
Known bugs/limitations
- SPI mode is not supported. Therefore, The
interface
param to wlp_init()
can only be set to WLP_INTERFACE_UART
.
-
wlp_linkdown()
does not work when in access point mode ( wlp_set_mode()
is set to WL_MODE_AP
).
- The checkbox for "WEP" in the configuration application reference design (webconfig) does not work.
1.2.2 (r2844)
Features
- Support for Access Point mode with the new wlp_api functions wlp_set_mode(), wlp_get_mode() and wlp_set_channel().
- Support for device DHCP server with the new wlp_api function wlp_set_dhcpd().
Bug fixes
- Fix timer support for XPLAIN which enables NTP, ICMP and TTCP commands.
- Fix get_version() and get_fw_version() commands on XPLAIN platform
- Fix issue when calling wlp_close() multiple times from a callback invoked from wlp_poll() context.
1.1.3 (r2238)
Features
- Added support for UDP sockets (WLP_SOCK_DGRAM) in oWL Pico API
- Added NTP client to reference design application to show example of UDP socket usage
- Added support for RAW sockets (WLP_SOCK_RAW) in oWL Pico API
- Added ICMP ping command to reference design application to show example of RAW socket usage
- Add linefeed to hexdumps prints on the avr8 reference design.
- Added API wlp_get_fw_version() to read the current firware version from the device.
- Added wlp_set_conn_cb() and wlp_set_recv_cb() to register connection and data callback functions for each socket. These function will replace the conn_cb and recv_cb parameters to wlp_connect() and wlp_accept().
- Added demo mode on XPLAIN
Known bugs / Limitiations
- In the reference design code, timers are not implemented for XPLAIN. Therefore, the ping, ntp and ttcp commands are disabled when building for XPLAIN.
1.0.0 (r2159)