Git Product home page Git Product logo

adafruit_bluefruitle_firmware's Introduction

Adafruit Bluefruit LE Firmware

This repository contains firmware images for the Bluefruit LE family of boards from Adafruit Industries.

Current members of this board family include:

The firmware on your Bluefruit LE modules can be updated with the on-board DFU bootloader, using the latest firmare image from this repository for the update.

The Adafruit Bluefruit LE Connect app for Android or iOS also enable over the air firmware updates using the files found in this repo.

Firmware/Board Compatibility Chart

Firmware BLEFRIEND BLEFRIEND32 BLESPIFRIEND
0.3.1 Yes -- --
0.4.7 Yes -- --
0.5.0 Yes -- --
0.6.2 -- Yes --
0.6.5 -- Yes Yes
0.6.6 -- Yes Yes
0.6.7 -- Yes Yes
0.7.0 -- Yes Yes

For the V1 (blue PCB) Bluefruit LE Friend, which is based on the first generation 16KB SRAM nRF51822 parts, you must use the 0.5.0 or lower series firmware.

The 0.6.0+ series firmware only works with newer boards based on 32KB SRAM nrf51822 parts like the Bluefruit LE UART Friend or V2 of the Bluefruit LE Friend (black PCBs). The 0.6.0+ firmware won't boot on older 16KB SRAM parts.

If you are using the Bluefruit LE Connect apps from Adafruit to manage your firmware updates, it should take care of the version differences automatically.

File Types

Each firmware version and board target folder (for example 0.6.7/blespifriend) contains three files:

  • filename.hex - The main firmware image, required for any firmware update.
  • filename_signature.hex - This file contains the CRC check for the filename.hex file above, and is required when manually flashing firmware with a tool like Adalink. If the _signature.hex file containing the CRC check isn't flashed along with the main firmware image, the bootloader on the nRF51 will reject the firmware image and you will boot into DFU mode. You only need this file when manually flashing firmware updates onto you Bluefruit LE module via AdaLink or a similar SWD debugger tools. The CRC will automatically be calculate and written when doing over-the-air (OTA) updates.
  • filename_init.dat - This file contains meta-data about the main firmware image in filename.hex, such as the required SoftDevice version and expected HW. This file is required when performing over-the-air (OTA) updates, which is a two file process.

adafruit_bluefruitle_firmware's People

Contributors

hathach avatar microbuilder avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

adafruit_bluefruitle_firmware's Issues

How to install the sniffer firmware?

I couldn't flash the 2 years old sniffer firmware with the iOS application or with the nRFGo studio.

When I packaged it with nRFGo studio and tried to upload as bootloader it always said "Timeout waiting for acknowledgement from device. Failure to upgrade target. Error is: No data is received on serial port." I have tried different settings, rates and my device was in DFU mode.

With the ios application, at "custom firmware", I could not manage to get the init file right. I could not find the init file anywhere and using the .dat file created with nRFGo studo did not work because of some icloud issue. (Uploading the file is ok, but it is not selectable from the application).

Regards,
Gellért

Does not work with MDBT40-256RV3

I have a problem running the MDBT40-256RV3 module with this firmware in my project.

I have programmed the brand new MDBT40-256RV3 module purchased at https://www.adafruit.com/product/4076:

adalink nrf51822 --programmer stlink --wipe
--program-hex ./Adafruit_BluefruitLE_Firmware/bootloader/bootloader_nrf52_0008.hex
--program-hex ./Adafruit_BluefruitLE_Firmware/softdevice/s110_nrf51_8.0.0_softdevice.hex
--program-hex ./Adafruit_BluefruitLE_Firmware/0.8.0/blespifriend/blespifriend_s110_xxac_0_8_0_170925_blespifriend.hex
--program-hex ./Adafruit_BluefruitLE_Firmware/0.8.0/blespifriend/blespifriend_s110_xxac_0_8_0_170925_blespifriend_signature.hex

The module is not recognized by the software(https://learn.adafruit.com/adafruit-fea ... le-library), the LEDs do not flash.

Test reports the error:

Adafruit Bluefruit AT Command Example

Initialising the Bluefruit LE module: OK!
Performing a factory reset:
AT+FACTORYRESET

<- ??
??
Couldn't factory reset

Update history

Can we please get a reasonable list of what changed in the various firmware versions? The lack of source code means that the git binary check ins are basically useless to glean any wisdom. It was said that 0.8.0 was mostly to fix a specific bug related to losing configuration. But, what is 0.8.1? Is it just 0.8.0 out of beta or what does it do?

The last time someone asked this they were directed to a web site. Guess what, that page stops at firmware version 0.7.7. So, it still leaves me shrouded in mystery.

setBleGattRxCallback crashes at fourth GATT callback

As in the topic, setting a callback on two GATT characteristics, as the example does, works fine. Three works fine. Four locks up the sketch hard as a stone. I've tried delays in between, changing the order, everything I can think of. I tried doing the things that setBleGattRxCallback does but manually in my sketch and it still locks up. There doesn't appear to be a way to get four or more callbacks registered at the same time. It's pretty easy to confim this, just a small edit to the callback example to add two more GATT callbacks will cause the example to lock up too. So far as I can tell this is a firmware bug of some sort.

Another thing I tried was calling setBleGattRxCallback once and then manually using lines like:
AT+EVENTENABLE=0x0,0x2000

To enable more GATT callbacks (this seems undocumented but I think I'm doing it properly). This will still lock up at the 4th registered callback. The call never seems to return.

BETA 0.8.0 firmware solves a number of problems but...

Beta 0.8.0 has been in beta for 6 months, and it seems to solve (for some) the "couldn't factory reset" problem on the Feather Bluefruit 32u4 and M0 boards:

https://forums.adafruit.com/viewtopic.php?f=57&t=122726&start=15#p625126

and

https://forums.adafruit.com/viewtopic.php?f=57&t=106888&p=658252#p658152

What I'm hoping will happen is that 0.8.0 is tested to the point that it can be reliably used in production, i.e. waiting for 0.8.1 -- thanks!

I'll keep updating the forum posts with reliability info, as we're hoping to be able to use these in production. Thanks!

Error sending floats as 4 bytes: too many bytes sent.

I have a sketch that works fine on version 6.7, however when I update to 7.x or 8.0 too many bytes (and the wrong bytes) are added to my characteristic. I am converting a float to 4 bytes and adding them to the characteristic. For some values of "Chromium" the code still works on the newer firmware, but about 10% of of the value are sent as 8 bytes instead of 4. Serial monitor indicates only 4 bytes (though they are not the correct 4 bytes) are being send but a sniffer shows otherwise. I'm at a loss to what may have changed between versions to cause this. See my code below:

union u {
float f;
uint8_t s[4];};

u both;

float Chromium;
Chromium = 0.26 + 0.0001 * random(0, 10);
uint32_t index = CrVal;
both.f = Chromium;

ble.print("AT+GATTCHAR=");
ble.print(index);
ble.print( ",");
ble.print(both.s[3],HEX);
ble.print("-");
ble.print(both.s[2],HEX);
ble.print("-");
ble.print(both.s[1],HEX);
ble.print("-");
ble.println(both.s[0],HEX);

Getting key lock LED states while using AT+BLEHIDEN

I'm using a Feather 32u4 Bluefruit LE, talking to the Bluefruit over SDEP/SPI, and using AT+BLEHIDEN to make it act like a keyboard. I've been searching around for quite a while, but can't seem to find a way to get the current key lock LED states (num lock, caps lock, scroll lock) from the host. I'd like to be able to update the state of LEDs connected to the Feather with the current key lock states. Is this possible? If not, is it something that will be added in the future (maybe as another event callback)? Thanks!

Add support for characteristic descriptors

Hi,
I was wondering if you have any plans for adding AT-commands for adding/accessing characteristic descriptors (such as "Presentation Format" or "User Description") to your Bluefruit LE SPI friend firmware.

ble.update(timeInMs) is not working

Installing conncted/disconnect callbacks used to work:
void Adafruit_BLE::update(uint32_t period_ms)

You can work around it easily but figured it's better to let you know

Bluefruit M0 doesn't reconnect after update

My Feather is flashed to be a keyboard with minimal changes from "hid keyboard" example.
I have updated my Feather M0 to 0.8.0.
After that I see the following behavior connecting to Windows 10:

  1. Initial connect - fine.
  2. After device reboot or Windows bluetooth OFF-ON, the device begins blinking blue with random intervals from around 200 ms to 3 seconds, and Windows mostly shows "Connected", sometimes changing to "paired".
  3. Whatever Windows shows, keyboard doesn't work.

I'm trying other firmware versions so far, but maybe you have any ideas on what this is?

No longer able to switch to command mode over UART with 0.7.7

Flashing various Bluefruit LE Friend-type devices (Feather M0 Bluefruit, Bluefruit LE Friend, Bluefruit LE UART) with 0.7.7, I can no longer connect via the UART service with Bluefruit LE Connect then switch to command mode by typing +++. Confirmed that this works as expected in 0.7.0 and earlier. I can swap modes when connected locally (via picocom on the Bluefruit LE Friend, or via the atcommand sketch), just not over the app the connection.

Guessing this is related to the new \+ escape char (added in 0.7.7, according to the release notes).

Update to latest sniffer firmware from nordic

Nordic has released a newer version of the BLE sniffer firmware that plays well with the latest version of Wireshark. I tried to update to this new version pca10040_51296aa in a V3 (black) board but execution is failing with a trap at 0x00000576 (as seen in GDB while using BMP to flash the board).

I have soldered the 32.768 KHz crystal and I am able to switch back and forth between the Adafruit custom version (no32KHz) as well as the old official sniffer firmware release from Nordic website. So, I am confident that the programming steps are proper.

Since 1.x wireshark is quiet old, it would make more sense to support the latest version of firmware in the sniffer.

MIDI Transmit does not handle 2 byte messages

The Adafruit_BLEMIDI.send() call fails when sending a MIDI message less than 3 bytes. The resulting AT+BLEMIDITX command fails when this is attempted. There are several MIDI messages that are 2 bytes, including Channel Pressure, and Program Change. Please allow <3 byte messages to be sent!

BLEFRIEND32 0.8.1 reports incorrect version number

I recently updated a V2 Bluefruit LE Friend to the version 0.8.1 firmware when prompted by the Bluefruit app. The OTA DFU went fine, but on reconnection, I was prompted to update the firmware again. A check of the device information showed the Software Revision has this value:

0.8.0 - Apr 10 2019

I also have a Feather M0 Bluefruit LE, which I also upgraded to latest firmware. This seemed to work fine and reported the expected Software Revision value:

0.8.1 - Apr 10 2019

Since the LE friend uses the BLEFRIEND32 firmware build, and the M0 used BLESPIFRIEND, I have to assume the former has an incorrect build number. I tried downgrading to the actual 0.8.0 and 0.7.7 versions of BLEFRIEND32, then upgrading again, with the same result. The issue seems to be in the release.

Support saving multiple bonding information

Provide a way to save multiple bonding information, so a HID device is not limited to a single host. A user then would be able to pair multiple devices (eg., computer, htpc, laptop, tablet & phone), and switch between them by pressing a button.

Possible implementation:

AT+GAPSETACTIVEBOND=5 (switch to bonding slot number 5)

any other GAP command (like AT+GAPDELBONDS) will then work with this slot.

Readme Product Links

Readme product link for Bluefruit LE Friend V1 and Bluefruit LE Friend V2 Point to same location.

Procedure for flashing the board

What are the steps for flashing the board over SWD?

I was able to get the sniffer firmware on the BLE friend v 2.0 with the following commands in JLinkExe:

JLink>device NRF51822_XXAA
JLink>erase
JLink>loadfile ble-sniffer_nRF51822_1.0.1_1111_Sniffer_No32kHz.hex
JLink>r
JLink>g
JLink>q

Trying to load the 0.6.2 or 0.6.5 blefriend32 images as above just results in a dead device.

Firmware source code?

Hello,

I wonder if you have or are planning to release the firmware source code with an open or closed license? It'll be a great study material for those of us, like myself, which have invested some time learning the nRF51 platform but which haven't got that far developing BLE code on it?

Thanks for your good work!

SoftDevice s120 or s130 in the works?

Well, after attempting to make my bluefruit a central and debricking it a couple times (THANK YOU FOR RASPI INSTRUCTIONS!) I've resigned to the fact that I'm probably going to have to go through the whole nordic process.

I was wondering if you were planning to implement central capabilities for it? I would love to be able to scan for devices with it and dump the data out to serial. There's a load of neat projects that could be done with it!

If you've already started down that road and need another tester please let me know!

Thank you for an awesome fun product! :)

AT+GATTCHAR only gives four first bytes

When using the AT+GATTCHAR command, only the first four bytes are displayed even though it supports up to 20. Also if there could be a way for the MCU to be notified that a service characteristic has been changed instead of having to poll for new data.

Question on licensing

I'm planning on developing a product that uses hardware based on the BluefruitLE and would like to use the firmware provided in this repository. I would just like to ask if it's possible for me to sell this product shipped with this firmware? And if yes, is there anything else I need to do, aside from crediting that the firmware was developed by Adafruit, or stuff I cannot do?

The repository has no license and I have done a bit of googling only to find this single post which does not exactly answer the question in the thread.

Support for characteristics with MIN_LEN=0 ?

Any chance to get the minimum characteristic length changed from 1 byte to 0 bytes? It’s a perfectly valid length, and appears to be supported in Adafruit's own nRF52 library, along with the underlying Nordic SDK and other BT SDK's I've briefly surveyed.

I do have a real use case for this. I'm implementing a simple peripheral on both Bluefruit and on Linux, with a protocol that can have zero-size characteristic writes in some cases. (Something like the UART service, but line-oriented, using a write size of less than 20 bytes to indicate the end-of-line condition.) It works fine in BlueZ on Linux, but then I found zero-size characteristics aren't supported by Bluefruit. It’s easy to work around in this case, but supporting zero size would be even better.

Source code?

Hi - is the source code for this available?

If so, please could you add a link to the README in this repository? It might be helpful to others... thanks!

iOS writing without response.

I am unable to write values to the TX characteristic with type: CBCharacteristicWriteType.WithoutResponse, .WithResponse works as expected.

self.blePeripheral.writeValue(data, forCharacteristic: self.txChar, type: CBCharacteristicWriteType.WithoutResponse)

I am on 0.7.0 with the blefriend32.

I was using another BLE module (not from adafruit) that had the same issue. They reported to me: Engineering found had some minor mismatch in the BLE properties that conflicted with iOS after they fixed it, not sure if that helps any.

Thanks for all the hard work!

Support for more than 30 characteristics

I realize that some people believe 30 characteristics to be a whole lot. I do not. I have found ways to pack values into structs and pass them that way but it has limited the utility of descriptors. If I had more characteristics I could send each piece of data in a separate characteristic and define it with exponent and the unit. That would allow my characteristics to be more open. Then other apps could easily consume data from my project without having to get struct definitions ahead of time. Is this possible with the current hardware?

flash 52840?

Hello, may I ask if these firmware can be flashed into 52840? Its capabilities are stronger than nrf51822. I look forward to your reply.

Source code for SDEP protocol

Hi!

I'm currently working on a project that requires me to process data sent using the Adafruit's SDEP protocol.
I'm not sure if it's possible to open source part of the firmware that involves SDEP? I understand that fully open sourcing the firmware isn't possible due to copyright restrictions from Nordic.

Thanks in advance!

ANCS and firmware source release

On the product page FAQ, it says ANCS should be expected sometime during version 0.7. I was wondering if there are any updates regarding to ANCS support in the near future?

Related, in another issue that has since been closed it is mentioned that the source code for the firmware would be made open eventually, however that was nearly two years ago. I'd be happy to contribute to adding ANCS support if it were made open source, and I imagine many other devs would like to help as well.

Thanks -SH

AT+HWADC command

What is the reference voltage range used for ADC sampling and the value range of sampling results when using AT+HWADC command

Limit to bonded devices?

Hi there, we seem to be running into a limit with bonded devices, is 7 the max?

Is there a way to adjust the max bonded devices? We're trying to bond one peripheral-mode Bluefruit LE via the GAP profile, as an HID, to 15 different centrals.

Conversely, if there another way to initiate bonding other than HID? Seems like we should be able to set a characteristic as "secure" in our GATT and the pairing/bonding process should start upon attempted access?

the newer nrf toolbox app requires init packet file (.dat)

So I am fairly new to this sort of thing, it does not appear that this file is available with the downloaded zip from Nordic, so I am guessing it has to be created. The instructions on Nordic's site about creating a file are sort of cryptic to me.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.