This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC3000BOOST stops working after several tries

We have purchased four TI CC3000BOOST modules and they all stopped working after several days. We tested examples on them one module at a time, and switched to the other when the former no longer worked. We are using Arduino as the microcontroller, providing the CC3000 with suitable power from an external power supply, and using resistors on all input pins to shift the voltage levels from 5 v to 3.3 v.

the module works perfectly when we try it for the first time, and then after several tries, it no more works.

till now, 4 modules are out of service and we have no idea what makes them stop working.

P.S: the modules can scan for networks but could't connect to any of them.

  • What you are describing is strong evidence that you are damaging them somehow. Can you post the schematic of your circuit?

  • Oh, wow! By schematic I meant the way this whole thing looks on paper.

  • ARDUINO                                                                    CC3000

    GND GND ------------------------------------------------> GND

    CLK  13 --> 560 Ohm --+--> 1K Ohm ---> GND
                                              |
                                             +-------------------------------> WL_SPI_CLK

    MISO 12 ----------------------------------------------------> WL_SPI_DOUT


    MOSI 11 --> 560 Ohm --+--> 1K Ohm ---> GND
                                                |
                                               +-------------------------------> WL_SPI_DIN

    CS 10 --> 560 Ohm --+--> 1K Ohm ---> GND
                                            |
                                           +-------------------------------------> WL_SPI_CS

    ENABLE 7 --> 560 Ohm --+--> 1K Ohm ---> GND
                                                   |
                                                  +------------------------------> VBAT_SW_EN


    IRQ 2 -----------------------------------------------------------> WL_SPI_IRQ


    EXTERNAL POWER 3.3v + -------------------------------> power jack


    GND -------------------------------------------------------------> GND

    This is the best schematic  I can do because there is no circuit design software that contains cc3000boost.

    I hope this will do the job!

    Thank you in advance!

  • There is just one thing that I find curious: why do you have this EXTERNAL POWER 3.3V going to the power jack and where is it coming from? Why don't you just provide 5V to the power jack of the CC3000BOOST board? You can take it directly from the USB cable of the Arduino. The CC3000BOOST is using the TPS73701DRB low dropout LDO from TI, which has an input voltage range from 2.2V to 5.5V as stated in its datasheet:

    http://www.ti.com/lit/ds/symlink/tps73701.pdf

    Also in case there is no problem with the hardware, can you provide more information on why do you think the CC3000BOOST breaks. What method do you use to connect to your AP and what actually happens in terms of return arguments? The code you use to connect will be helpful as well.

  • concerning the power supply, when I tried supplying the board from the arduino it didn't work perfectly. Turns out that the arduino cann't supply sufficient power to the CC3000BOOST board. So I supplied it with a perfectly regulated external power supply connected directly to the power jack of the CC3000BOOST board (3.3 v). the maximum current the circuit needed was 120 mA (although the power supply can provide up to 3A).

    In fact I have no Idea what's breaking the boards. all I thought about is connections and power supply. 

    concerning the method, I am using SmartConfig to connect the module to the AP. and I am using the SFE_CC3000 library for arduino. I have tried almost all the examples in the library and they work perfectly! but after several tries, it suddenly stops working. It initializes but can't connect to the AP!

    Here is the code for the SmartConfig example:

    /****************************************************************
    SmartConfig.ino
    CC3000 SmartConfig
    Shawn Hymel @ SparkFun Electronics
    February 4, 2014
    https://github.com/sparkfun/SFE_CC3000_Library
    
    Deletes any connection profiles stored in the CC3000 and starts
    the SmartConfig procedure. During the SmartConfig wait time,
    the user needs to open the TI SmartConfig app, fill out the
    WiFi information and hit Start. If the configuration happens
    successfully, the program will ping a remote host to verify
    connection.
    
    NOTE: Sometimes, the smartphone app will report that the
    connection failed, but the CC3000 will have received the data
    successfully. Make sure to read the serial output to see if
    a connection was made.
    
    Once a SmartConfig has been accomplished successfully, that
    connection profile is stored in the CC3000's non-volatile 
    memory. The user can run the FastConnect example to re-connect
    to the same Access Point on boot.
    
    Hardware Connections:
     
     Uno Pin    CC3000 Board    Function
     
     +5V        VCC or +5V      5V
     GND        GND             GND
     2          INT             Interrupt
     7          EN              WiFi Enable
     10         CS              SPI Chip Select
     11         MOSI            SPI MOSI
     12         MISO            SPI MISO
     13         SCK             SPI Clock
    
    Resources:
    Include SPI.h and SFE_CC3000.h
    
    Development environment specifics:
    Written in Arduino 1.0.5
    Tested with Arduino UNO R3
    
    This code is beerware; if you see me (or any other SparkFun 
    employee) at the local, and you've found our code helpful, please
    buy us a round!
    
    Distributed as-is; no warranty is given.
    ****************************************************************/
     
    #include <SPI.h>
    #include <SFE_CC3000.h>
    
    // Pins
    #define CC3000_INT      2   // Needs to be an interrupt pin (D2/D3)
    #define CC3000_EN       7   // Can be any digital pin
    #define CC3000_CS       10  // Preferred is pin 10 on Uno
    
    // Connection info data lengths
    #define IP_ADDR_LEN     4   // Length of IP address in bytes
    
    // Constants
    unsigned int timeout = 30000;             // Milliseconds
    char remote_host[] = "www.sparkfun.com";  // Host to ping
    unsigned int num_pings = 3;    // Number of times to ping
    
    // Global Variables
    SFE_CC3000 wifi = SFE_CC3000(CC3000_INT, CC3000_EN, CC3000_CS);
    
    void setup() {
      
      ConnectionInfo connection_info;
      IPAddress ip_addr;
      IPAddress remote_ip;
      PingReport ping_report = {0};
      int i;
      
      // Initialize Serial port
      Serial.begin(115200);
      Serial.println();
      Serial.println("-----------------------------");
      Serial.println("SparkFun CC3000 - SmartConfig");
      Serial.println("-----------------------------");
      
      // Initialize CC3000 (configure SPI communications)
      if ( wifi.init() ) {
        Serial.println("CC3000 initialization complete");
      } else {
        Serial.println("Something went wrong during CC3000 init!");
      }
      
      // Start SmartConfig and wait for IP address from DHCP
      Serial.println("Starting SmartConfig");
      Serial.println("Send connection details from app now!");
      Serial.println("Waiting to connect...");
      if ( !wifi.startSmartConfig(timeout) ) {
        Serial.println("Error: Could not connect with SmartConfig");
      }
      
      // Gather connection details and print IP address
      if ( !wifi.getConnectionInfo(connection_info) ) {
        Serial.println("Error: Could not obtain connection details");
      } else {
        Serial.println("Connected!");
        Serial.print("IP Address: ");
        for (i = 0; i < IP_ADDR_LEN; i++) {
          Serial.print(connection_info.ip_address[i]);
          if ( i < IP_ADDR_LEN - 1 ) {
            Serial.print(".");
          }
        }
        Serial.println();
      }
      
      // Perform a DNS lookup to get the IP address of a host
      Serial.print("Looking up IP address of: ");
      Serial.println(remote_host);
      if ( !wifi.dnsLookup(remote_host, &remote_ip) ) {
        Serial.println("Error: Could not lookup host by name");
      } else {
        Serial.print("IP address found: ");
        for (i = 0; i < IP_ADDR_LEN; i++) {
          Serial.print(remote_ip[i], DEC);
          if ( i < IP_ADDR_LEN - 1 ) {
            Serial.print(".");
          }
        }
        Serial.println();
      }
      
      // Ping IP address of remote host
      Serial.print("Pinging ");
      for (i = 0; i < IP_ADDR_LEN; i++) {
        Serial.print(remote_ip[i], DEC);
        if ( i < IP_ADDR_LEN - 1 ) {
          Serial.print(".");
        }
      }
      Serial.print(" ");
      Serial.print(num_pings, DEC);
      Serial.println(" times...");
      if ( !wifi.ping(remote_ip, ping_report, num_pings, 56, 1000) ) {
        Serial.println("Error: no ping response");
      } else {
        Serial.println("Pong!");
        Serial.println();
        Serial.print("Packets sent: ");
        Serial.println(ping_report.packets_sent);
        Serial.print("Packets received: ");
        Serial.println(ping_report.packets_received);
        Serial.print("Min round time (ms): ");
        Serial.println(ping_report.min_round_time);
        Serial.print("Max round time (ms): ");
        Serial.println(ping_report.max_round_time);
        Serial.print("Avg round time (ms): ");
        Serial.println(ping_report.avg_round_time);
        Serial.println();
      }
      
      // Disconnect
      if ( wifi.disconnect() ) {
        Serial.println("Disconnected");
      } else {
        Serial.println("Error: Could not disconnect from network");
      }
      
      // Done!
      Serial.println("Finished SmartConfig test");
      
    }
    
    void loop() {
      
      // Do nothing
      delay(1000);
      
    } 

     

  • Hi Mostafa,

    I wasn't suggesting that you supply the CC3000BOOST from the Arduio, but from the USB port of the PC that powers up the Arduino. It has a +5V and more that enough power for the CC3000BOOST - you can draw 500mA at 5V with no problem, most PCs allow even 1A. If for some reason your PC is limiting the current on one USB port and it is not enough to power both the Arduino and the CC3000BOOST, you can always power the CC3000OOST from a second USB port on the same PC.

    Having two power supplies connected to the 220V or 120V power grid is a possible cause - I had issues myself when powering a digital circuit from two separate power supplies.

    On the software side have you tried connecting without SmartConfig - just using the connect(...) method?

  • Hi Ivor,

    Thank you for the quick responses! Actually, I have tried connecting another USB port to the CC3000BOOST and it worked perfectly, but after two days it stopped working (same issue) so, as I thought it was a power supply problem, I have now connected it to a perfectly regulated power supply. The problem is still the same, the CC3000Boost works for 2-3 days and I have to replace it afterwards.

    As for the software, I have found something peculiarly interesting! When the CC3000Boost stops working, it still can scan the AP in range but can not connect to any (all of them are encrypted). So fast connect and webclient (manual) connection no longer work, smartconfig does not work as well, but it can scan and detect the AP in range.

  • Not sure what is causing this, but I still think it is something to do with the power supply and voltage divider combination. Maybe you should get rid of the voltage dividers and replace them with something like this:

    https://www.sparkfun.com/products/12009


    Also try updating one of the damaged CC3000BOOST to the latest patch. This will fix any issues caused by corrupting the EEPROM.

  • Thank you for the suggestions, but the circuit is only meant to protect the pins from unexpected high voltage (just in case); I have tried to provide power through vbat from arduino directly but still CC3000 stopped working after some time. I have also updated all four CC3000 (stopped working till now) to the latest firmware, but that didn't solve the problem.

  • Hi Mostafa,

    I still think that the voltage dividers are the most probable cause and maybe some hardware experts can back me up on this one. You don't have proper decoupling when using voltage dividers and two separate power supplies.