ARMmbed / ble

API to abstract working with Bluetooth Smart Controllers
Other
80 stars 75 forks source link

X-Nucleo-IDB05A1 Not Working #195

Open waymond91 opened 7 years ago

waymond91 commented 7 years ago

Hello All, I would like to preface this post by saying that I have absolutely no experience working with the BLE communication stack. I recently purchased a Nucleo-F446RE board alongside X-Nucleo-IDB05A1 to test out the viability of using the SPBTLE-RF module in a product we are developing. I figured this would be a good way to explore bluetooth within the Mbed environment. However, when I imported and uploaded the BLE_HeartRate-IDB0XA1 program, as shown in the link, I get absolutely no ouput from the board or the module (including serial output). I have tried bluetooth scanning with Android, iOS, Windows, and Linux Devices. After digging around online a bit, I discovered some people were having success by changing some of the reset time. I tried this to no available. A little more probing reveals that there was a firmware update for the ble module that was supposed to make its internal communication stack play nicely with the mbed infrastructure. So I followed the directions here. Although, I only saw the LED blink quickly, indicating an error.

For example, while I have been able to get LED blinky and serial output working on the board, the following code produces no serial output, and the LED still blinks even though nothing in the code calls for it:

#include "mbed.h"
#include "BlueNRGDevice.h"

#define BLUENRG_MS_HW_VERSION (0x31)

DigitalOut led1(PA_5);
Serial pc(USBTX, USBRX);

int main(void)
{
    pc.baud(115200);
    pc.printf("Begin!\n");

    uint8_t hw_version;
    uint8_t get_hw_version_status;
    BlueNRGDevice* bleDevice;

    // Keep LED1 turned on to show that update is in progress
    led1 = 1;

    bleDevice = (BlueNRGDevice*) createBLEInstance();
    get_hw_version_status = bleDevice->getUpdaterHardwareVersion(&hw_version);

    if (get_hw_version_status != BLE_STATUS_SUCCESS) {
        pc.printf("ERROR: Unable to get HW version\n\r");
    }

    if ( (hw_version < BLUENRG_MS_HW_VERSION) || (hw_version > BLUENRG_MS_HW_VERSION) ) {
        pc.printf("Sorry, you're HW version is not supported\n\r");
    }

    else
    {
        pc.printf("Hardware Version: %d\n", hw_version);      
    }
}

Now my fear is that I've bricked the module by perhaps only performing a partial firmware update? Any advice on how to proceed?

Best regards, Brett

apalmieriGH commented 7 years ago

Dear Brett, first of all thanks for using STM products. Regarding your setup, please consider that the ST-NUCLEO-F446RE requires a small HW patch as warned in the X-NUCLEO-IDB0XA1 component page. Alternatively, you could even use your NUCLEO board as is provided that you select the ST-NUCLEO-F401RE before building the program from your mbed workspace. Hope that helps.

Kind regards Andrea

waymond91 commented 7 years ago

Thank you for the help! I am trying this right now. For some reason I assumed this was only required for a literal connection to an arduino.

waymond91 commented 7 years ago

That fixed it!

DavidF13 commented 4 years ago

Hello Brett,

I found this thread trying to fix the same problem you had with the X-Nucleo-IDB05A1. Did you manage to use the shield after the BlueNRG-MS update?