CC3000 Release Notes

From Texas Instruments Wiki
Jump to: navigation, search

Return to CC3000 Main page

Please note it is a MUST to upgrade both CC3000 patches and Host Driver when upgrading from versions lower than V1.13.

The release package 1.13 will contain only the Service Pack update. This Service Pack should be used with the Host Driver that is part of the release package 1.12.


Overview

Introduction

  • TI provides a platform independent CC3000 Host Driver Code and implementation example of SPI driver for several platforms (listed below)

    The SPI driver is platform dependent. As such, the versions may vary between different platforms

  • The latest version release for all platforms is 1.13
  • CC3000 patches are platform independent
  • For additional information regarding the demo applications, and on how to download the patches, please refer to the Wiki Download page
  • Please note the release was tested on IAR 5.52.1 and on CCS v5.5 IDE


Package Content

Platforms Supported:

  • MSP430F5529 - Supported Applications: Basic WiFi
  • MSP430FR5739 - Supported Applications: Basic WiFi
  • MSP430G2553 - Supported Applications: Basic WiFi

Demos And Applications:

  • Basic Wifi Application - This application shows the basic usage of general APIs implemented by the CC3000.


 

CC3000 Features

Table 1: Host driver features  

Feature Description
API

Fully supports CC3000 API's - for more details please refer to programmers guide

BSD socket  Compliant API for application development
Little Endian

Supports little-endian MCUs

SPI implementation

SPI implementation example for the MSP430 FRAM (MSP-EXP430FR5739) platform and Stellaris Cortex M4 platform

memory requirements

As low as 5KB code size and 360 bytes RAM size.
The RAM size does not include the memory needed for RX and TX buffers

Flexible RAM size Flexible RAM size enables the user to customize the RX and TX buffers to optimally fit the system requirements
TX complete TX complete feature's main functionality is to indicate the host whenever it is safe to shutdown CC3000. This feature is important for optimal power consumption
TX/RX overrun detection TX/RX overrun detection enables overrun detection in run-time
EEPROM protection CC3000 internal EEPROM is better protected against corruption that may occur when not properly used. The protection is on the host level and CC3000 chipset level
Code portability improvement All "pragma pack" declarations have been removed. Thus, the code is compiler independent
Tiny Driver Support Low RAM consumption host driver implementation
Multicast support CC3000 is capable to transmit and receive multicast packets
CC3000 Smart Config New smart config instead of first time config – enable configuration via iPhone or Android device, with secured AES encryption
mDNS discovery Add mDNS discovery ability – general advertisement for Smart Config completion to the configuring device
EEPROM user interface Add the ability to create a user file, write into it and de-allocate it 



Table 2: CC3000 device features 

Feature Description
Wi-Fi Wi-Fi optimized for easy use with microcontroller applications (IEEE802.11b/g)
network stack Embedded IPv4 Network stack
DHCP/DNS DHCP/DNS  Client/ARP/ICMP integrated
socket Up to 4 concurrent open sockets
Wi-Fi b/g Wi-Fi b/g band support
Security Open/WEP/WPA/WPA2 Personal support
Select working channel Channels 1-13 supported
Profiles Connection profile management
Preferred connection Possible to automatically connect to preferred networks. The list of preferred networks is configurable
Fast reconnect Fast reconnection to specific Access Point
SPI SPI host insterface


Release Versions

Finding Out Current Service Pack Version

In order to find out which service pack version is flashed into the CC3000 device, please use the following API to read the EEPROM service pack version:
"nvmem_read_sp_version(unsigned char* patchVer);" where the first two bytes represent the service pack version.

The following table describes the release package vs. service pack version:


Release Package vs. Firmware Version
Release Package Service Pack Version
1.13 1.28
1.12 1.26
1.11.1 1.24
1.11 1.19
1.10.2 1.14
1.10.1 1.10
1.10 1.8
1.9 1.7
1.7.2.2 1.5


Version 1.13:

Table 1: CC3000 device - fixed bugs (firmware)  

Role Description
Network Fixing the automatic ARP updates in the network stack which would make the long running TCP operations to hang.
Network Fixing the assert behavior, which would hang the CC3000 device and never allows it to recover.


Version 1.12:

Table 1: CC3000 device - fixed bugs (firmware)  

Role Description
Network Scan stopped after 72.4 minutes, which caused CC3000 device to not automatically connect to a saved profile after that time
Network Fixing mDNS packets structure: modifying “target.local” to "<device_name>.local”
MAC Changes required for ETSI EN 300-328 v1.8.1


Table 2: Host driver - fixed bugs  

Role Description
Network Modify MIN_TIMER_VAL_SECONDS 20 to MIN_TIMER_VAL_SECONDS 10
Network In setsockopt(), changing “int” “TO_UINT32”
Network In nvmem_create_entry(), mdnsAdvertiser(), changing “int” to “TO_UINT8”
Network Correct nvmem_read() header to state that if successful, should return 0 and not the number of bytes read
Network Correct add_profile() header comment in header file
Network Update mdnsadvertiser() to maximum length of 32 chars long


Version 1.11.1:

Table 1: CC3000 device - fixed bugs (firmware)  

Role Description
Network IOP with certain APs when resending TCP packets. Issue was related to not updating the ack number to latest value received when doing TCP resend
Network Inability to establish TCP connection to certain networks outside the local subnet (i.e.: when it is assigned an IP address in the 10.x.x.x subnet)
Network Device did not respond with TCP ACK on data sent to it when included padding on the TCP layer. This resulted in TCP disconnection
Network TCP_ACK pool was getting full in extreme conditions as a result of sending ARP request, while receiving TCP FIN from remote. This resulted in TCP disconnection
Device Writing new FAT is only possible now when loading without patches as required by the patch programmer utility. The FAT is write protected in any other case


Table 2: Host driver - fixed bugs  

Role Description
Host Handle a case where unsolicited event arrived, but was not handled properly (such as socket connect)
Host (in relation to patch programmer) Update initialization process when loading without patches - required for reprogramming the EEPROM (patch programmer might not have worked properly on all platforms)


Version 1.11:

Table 1: CC3000 device - fixed bugs (firmware)  

Role Description
Network Allow sending broadcast packets, including when working with subnets
Network "recvfrom" caused unpredicted system behavior when no data was received. This issue was introduced in V.1.10.2
Network Added command complete for "bsd_sendto" and "bsd_send" in order to solve race conditions where send/to followed by recv/from is invoked - This fix REQUIRES both patches and host driver updated to V1.11
Network Fixed an issue where "select" timer did not expire if armed before timer wrap around, and expiry time was after wrap around
Network "mdnsAdvertiser" was not always transmitted in congested environments
Network Add socket descriptor notification to "wait close" state event. This state indicates that a FIN packet was sent by remote device


Table 2: Host driver - fixed bugs  

Role Description
Network Added "close wait" case in event handler. This case indicates a state where FIN packet was sent by remote
Network DHCP status was added to indicate if returned DHCP content is valid
Network mDNS status was parsed incorrectly in event handler
Host Removed unrequired unsolicited event handler calls
Host Removed "sprintf" function calls from application layer in CCS workspace to avoid unpredicted system behavior


Version 1.10.2:

Table 1: CC3000 device - fixed bugs (firmware)  

Role Description
Security Added support for WEP shared connection. This connection mode was not working on previous versions
Network Fixed an issue where sometimes UDP data transmission does not work after UDP data reception. Issue was related to incorrect remote IP address and UDP port obtained by calling "recvfrom" API
Network Added support for receiving broadcast packets when working in subnets other than 255.255.255.0.
WiFi Fixed an issue where mDNS packet was not always transmitted in congested environments. Issue was related to mDNS socket not being completely cleared for each transmission
WiFi Fixed the limitation of storing only 3 profiles. The number of profiles supported is now 7
WiFi Upon disconnection, data queues were cleaned without letting the host to read the received content prior to disconnection event. Issue is resolved by not cleaning the queues


Table 2: Host driver - fixed bugs  

Role Description
SPI Fixed a corner case of missing SPI interrupt


Version 1.10.1:

  • Added Platform Support:

 1. Stellaris Cortex M4

    Supported applications:

    -Patch Programmer: IAR and CCS IDE environments

         Download Stellaris M4 Patch Programmer:

         Stellaris M4 Patch Programmer Wiki Page

    -Basic WiFi Application: IAR and CCS IDE environments

         Download Stellaris M4 Patch Programmer:

         Stellaris M4 Basic WiFi Application Wiki Page

 2. MSP430 Launchpad

    Supported applications:

    -Patch Programmer: IAR and CCS IDE environments

         Download MSP430 Launchpad Patch Programmer:

         MSP430 Launchpad Patch Programmer Wiki Page

    -Basic WiFi Application: IAR and CCS IDE environments

         Download MSP430 Launchpad Patch Programmer:

         MSP430 Launchpad Basic WiFi Application Wiki Page


Table 1: CC3000 device - fixed bugs (firmware)  

Role Description
Network Fixed the following convention: Creating a TCP socket does not work "socket(AF_INET, SOCK_STREAM, 0)". Same fix for UDP convention
Network Fixed wrong parameters received from remote side as part of recvfrom()
Network Fixed select() timeout API which may have jittered by tens of mSec
Security Fixed Smart Config not working with WPA2/TKIP security
WiFi Fixed uninitialized parameters if not performing reset after generating nvs file
IOP Fixed IOP of TCP connection failure to TP LINK WR641G
IOP Fixed Connection issues to TP-LINK WR740N in hidden SSID mode, with security WPA2+AES, and SSID length is larger than 8 characters
Feature Added new functionality - When a remote server closed a TCP socket, CC3000 could not detect the remote socket is closed – Added a new a unsolicited event HCI_EVNT_ASYNC_TCP_CLOSE_WAIT to be sent to the host, if CC3000 detects the socket is closed by the remote side


Table 2: Host driver - fixed bugs  

Role Description
Security Fixed Smart Config not working with WPA2/TKIP security - Complementary to CC3000 device fix
Feature Added new functionality - When a remote server closed a TCP socket, CC3000 could not detect the remote socket is closed – Added a new a unsolicited event HCI_EVNT_ASYNC_TCP_CLOSE_WAIT to be sent to the host, if CC3000 detects the socket is closed by the remote side - Complementary to CC3000 device fix


Version 1.10:

  •  Added APIs:

    NVMEM module:

       nvmem_create_entry(...) Creates a new file entry and allocates space on the NVMEM

       nvmem_write(...) Writes to NVMEM

    WLAN module:

       wlan_smart_config_process(...) - Brief process that acquires data from Smart Config process and stores it as a profile.

                                                       To be used only under #ifndef CC3000_UNENCRYPTED_SMART_CONFIG with the security module

    SOCKET module:

       mdnsAdvertiser(...) - Sets CC3000 in mDNS advertiser mode in order to advertise itself

    SECURITY module:    --- NEW ---     Optional module under #ifndef CC3000_UNENCRYPTED_SMART_CONFIG

       aes_encrypt() Encrypts a data buffer using AES128 algorithm

       aes_decrypt() Decrypts a data buffer using AES128 algorithm

       aes_read_key() Reads the key used for AES encryption\decryption from the EPROM

       aes_write_key() Writes a key used for AES encryption\decryption to the EPROM



  • Added features:

1. CC3000 Smart Config - This feature replaces the legacy First Time Config. First Time Config is not supported in SP 1.8 and above

2. mDNS Bonjour service

3. EEPROM user interface


Table 1: CC3000 device - fixed bugs (firmware)  

Role Description
Network Data loss during remote close socket - When remote side closes a socket, CC3000 was unable to read any further data from the socket
Network Zero padding issue (TCP\UDP receive) - When a small data payload is transmitted (remote side is wired connected to the AP), the transmitting side will zero-padding the payload. CC3000 wrongly assumes this zeros are valid payload
Network TCP packets are sent out of order – Fixing a corner case in which TCP packets were sent out of order
Network Netapp_ipconfig API returns NULL SSID – Fixing a corner case in which Netapp_ipconfig returned NULL SSID
Network gethostbyname API caused TX flow control problem – Calling gethostbyname API caused the number of free Tx buffers counter to be out of sync
Network Socket connect API doesn’t work after calling wlan_stop followed by wlan_start - CC3000 didn't randomize the socket source port, which sometimes caused the socket connect API to fail
Network CC3000 was unable to receive packets after calling sendto API for the first time – UDP socket source port was corrupted after calling sendto API for the first time
IOP TP-LINK IOP issue – Connecting to TP-LINK configured to auto-auto security mode failed
WiFi Inconsistent scan results – Fix the implementation of saving the scan results


Table 2: Host driver - fixed bugs  

Role Description
Network Netapp_ipconfig API - IP/MAC addresses were not parsed properly (clipped)


Version 1.9:

  • Added APIs:


 NVMEM module:

  1. nvmem_set_mac_address(…) – sets the MAC address in EEPROM
  2. nvmem_get_mac_address(…) – gets the MAC address from EEPROM
  3. nvmem_write_patch(…) – writes a patch to a specific file ID
  4. nvmem_read_sp_version(…) – reads the patch version stored in the CC3000 EEPROM


  • Removed APIs:
  1. Getpeername() – unused API
  2. Getsockname() – unused API
  3. wlan_ConfigurePatches()  - unused API


  • Added features:

   1. TX Complete event

   2. Flexible RAM size support

   3. TX/RX overrun detection

   4. Non - blocking accept()

   5. Tiny Driver support

   6. Multicast support

 


Table 1: CC3000 device - fixed bugs (firmware)  

Role Description
WiFi wlan_ioctl_set_scan_params() - issues one shot scan immediately, and configures a periodic scan interval - stabilizes the scan results
WiFi Flashing TX buffer when sending UDP packet to unknown address
WiFi Fix wlan_ioctl_get_scan_results() return parameter structure


Package Versioning

Versioning method for CC3000 host driver and demo application releases is as follows:

One inclusive version number for the entire release, and a specific version number for each component.

Service pack release package

The release service pack package version convention is: V1.mj.mn

  • mj: is the major number
  • mn: is the minor number

For instance: A service pack version number V1.9 = V1.9.0, and there will be version such as V1.10.1, and so on...

  • For V1.9 --> mj = 9, mn = 0
  • For V1.10.1 --> mj =10, mn=1


Demo / sample applications releases

Each demo application has its own version number (sensor app V1.0.12, Basic WiFi Application V1.13.6.11...).

The demos and applications will reflect the new version scheme as they are released. The ones which follow the new release scheme will be marked on the download page. The new scheme is as follow. Application version convention: f.a.s.h.p:

  • f : refers to platform
    • 1 – MSP430FR5739
    • 2 - MSP430 Launchpad
    • 3 – Stellaris - M3
    • 4 – Stellaris - M4
    • 7 - MSP430 F5529LP
  • a : the application version running index (see example below – patch programmer is considered an application as well)
  • s : the spi version
  • h : the host driver version
  • p : the patches version (not patch programmer)

NoteNote: The version convention would actually represent what version a certain application is based on.

For example, MSP430FR5739 patch programmer's version may be: 1.13. 6. 11.10 where:

  • 1 – Platform version (1 – MSP430FR5739, 2 - MSP LP, 3 – M3, 4 – M4, 7 - MSP430F5529LP)
  • 13 – Running index to represent update in the application layer
  • 6 – SPI version (running index which is independent of package release..)
  • 11 – Host driver version (running index which is independent of package release..)
  • 10 – Patches version (running index which is independent of package release..)


Known Limitations

 1. CC3000 supports a maximal MTU size of 1468 bytes

 2. CC3000 supports maximum delayed Ack of two packets

 3. When running on a very slow TCP connection, it might be required to change the Tx flow control to 2 packets instead of 4. This is in order to avoid the delayed Ack problem mentioned above

 4. Smart Config - Multiple devices can't be configured to different APs simultaneously

 5. Smart Config - Supports 11bgn, 20Mhz, AP's using channels 1-13

 6. Smart Config - Key length is limited to 31 characters when working with AES encryption

 7. IP fragmentation is not supported in the CC3000 network stack. When packets are fragmented on the IP level, CC3000 cannot receive the packets and defragment them. The limitation applies to TCP and UDP packets

 8. When the recvfrom() API is invoked by the host, UDP data is sent from CC3000 to the host according to the requested size, not one packet at a time.

 9. Connection process will not start for APs with RSSI lower than -75dBm

10. "wlan_connect" API supports connection to SSID and not to BSSID

11. In CC3000 module, MISO is not set to Hi-Z when nCS is deasserted.

Known Issues

  • Ping report may not be accurate, and may count incorrect number of received responses.
  • When connecting to an AP using WPA2 security, "Connected” event may arrive before the connection process is completed.
  • The CC3000 scan results available at the host shows only one SSID for multiple BSSIDs.
  • The first gethostbyname call returns error with code -95.
Possible work around: The error code -95 indicates the ARP_REQUEST_FAILED. The work around would be to re-send the HCI_CMND_GETHOSTNAME command to the CC3000 from the host. A sample implementation should look something like this:

  1. define ARP_REQUEST_FAILED -95

char host_name[] = "www.ti.com"; long ret = -1; unsigned long ip;

do {

   ret = gethostbyname((char *)host_name, strlen(host_name), &ip);
   if(ret < 0 && ret != ARP_REQUEST_FAILED)
       return;
    __delay_cycles(10000);

} while(ret == ARP_REQUEST_FAILED);

  • Receiving the event 'HCI_EVNT_BSD_TCP_CLOSE_WAIT' sometimes makes the TCP sockets un-responsive.
Possible work around: Mask the event HCI_EVNT_BSD_TCP_CLOSE_WAIT at the host by using the 'wlan_set_event_mask' API. And wait for the inactivity time-out to occur.