Giga R1 WiFi WPA Connection example: Arduino crashes if some print statements are removed

Hello, this is my first time posting a question so let me know if I posted this in the correct section.

So I have found something interesting in the WPA Connection example for the Giga R1 WiFi
Specifically in this snippet of code from the example:

  // attempt to connect to WiFi network:
  while (status != WL_CONNECTED) 
{
    Serial.print("Attempting to connect to WPA SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network:
    status = WiFi.begin(ssid, pass);
    // wait 10 seconds for connection:
    delay(10000);
  } 

If you comment out the following lines: (the print statements inside the while loop)

    Serial.print("Attempting to connect to WPA SSID: ");
    Serial.println(ssid);

Then the mbed os will crash every time you try and run the sketch.
And if you leave the aforementioned lines of code alone, everything works

So my overall questions is why? Why is it that if you remove these print statements the mbed os crashes? Is the WiFi library somehow reliant on serial being used?

Here is the arduino_secrets.h header file

//arduino_secrets.h header file
#define SECRET_SSID ""
#define SECRET_PASS ""

Here is the .ino file

/*
 This example connects to an unencrypted WiFi network.
 Then it prints the MAC address of the WiFi module,
 the IP address obtained, and other network details.

 Circuit:
 * GIGA R1 WiFi

 created 13 July 2010
 by dlf (Metodo2 srl)
 modified 31 May 2012
 by Tom Igoe
 modified 22 March 2023
 by Karl Söderby
 */


#include <SPI.h>
#include <WiFi.h>

#include "arduino_secrets.h"
///////please enter your sensitive data in the Secret tab/arduino_secrets.h
char ssid[] = SECRET_SSID;    // your network SSID (name)
char pass[] = SECRET_PASS;    // your network password (use for WPA, or use as key for WEP)
int status = WL_IDLE_STATUS;  // the WiFi radio's status

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ;  // wait for serial port to connect. Needed for native USB port only
  }

  // check for the WiFi module:
  if (WiFi.status() == WL_NO_MODULE) {
    Serial.println("Communication with WiFi module failed!");
    // don't continue
    while (true)
      ;
  }

  // attempt to connect to WiFi network:
  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to WPA SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network:
    status = WiFi.begin(ssid, pass);

    // wait 10 seconds for connection:
    delay(10000);
  }

  // you're connected now, so print out the data:
  Serial.print("You're connected to the network");
  printCurrentNet();
  printWifiData();
}

void loop() {
  // check the network connection once every 10 seconds:
  delay(10000);
  printCurrentNet();
}

void printWifiData() {
  // print your board's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
  Serial.println(ip);

  // print your MAC address:
  byte mac[6];
  WiFi.macAddress(mac);
  Serial.print("MAC address: ");
  printMacAddress(mac);
}

void printCurrentNet() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print the MAC address of the router you're attached to:
  byte bssid[6];
  WiFi.BSSID(bssid);
  Serial.print("BSSID: ");
  printMacAddress(bssid);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.println(rssi);

  // print the encryption type:
  byte encryption = WiFi.encryptionType();
  Serial.print("Encryption Type:");
  Serial.println(encryption, HEX);
  Serial.println();
}

void printMacAddress(byte mac[]) {
  for (int i = 5; i >= 0; i--) {
    if (mac[i] < 16) {
      Serial.print("0");
    }
    Serial.print(mac[i], HEX);
    if (i > 0) {
      Serial.print(":");
    }
  }
  Serial.println();
}

Hi @iceakatar . (need to use code tags next time)

Tried this on my GIGA and it worked as expected with and without those Serial prints!

How old is your board? Which version (stamped underside near mounting hole near reset)? I have an old V1.0 board that also has an odd quirk - but not this one

Please read the pinned post re 'How to get the most from the forum'

Hello @steve9

I got this board about 6 months ago and there is a V1 stamped where you asked me to look.
Also I used code tags but I think I used them wrong and will try to fix my post.

Thanks, I've read the pinned post and fixed some stuff.

There's an issue raised on git that looks identical, but with an OPTA board. Might be worth comparing notes and adding your experiences.

Hi all , I am facing same issue with Giga Wifi crashing at WiFi.begin() . I tried wifi example and same thing as mentioned in above post works fine with Serial.println() lines . If I comment those 2 lines it crashes . Any solution yet ?

I believe this patch fixes the issue but a new release of the ArduinoCore-mbed has yet to be prepared.

1 Like

Thanks for quick reply Steve . I added return function in file “WhdSTAInterface.h” as mentioned in patch . Is that all I need to do or is there different process to apply patch . I have same MBed crash issue at WiFi.begin() after modification. Thank you

It is a patch to the mbed os code so requires a rebuild of the libmbed.a library - not a simple task to set up an environment to do this. Basic instructions are in the readme for the repo here if you want to try. GitHub - arduino/ArduinoCore-mbed
You could also regress back to the previous release (4.1.5)

1 Like

Thank you @steve9 . I will give it a try .