Is there a serial port profile for BLE?

Is there any equivalent to the SPP profile from Bluetooth Classic? I've always used this as a way to transmit custom data using Bluetooth, but I can't seem to find anything equivalent for BLE.

  • No, there isn't really any SPP equivalent. However, with BLE, it is important to understand that all the profile and service support is entirely in the application space. This is opposed to the situation in Bluetooth Classic, where it seems to me that all profiles used in the application actually had to be natively supported by the stack used.

    This means that with BLE, there isn't really a need for a serial port service to transmit custom data, since you can easily make your custom service, that is specially tailored for the data your application needs to transfer. This avoids the need for cramming all kinds of data into serial packages, and most often this leads to much cleaner data handling strategies and hence applications.

    We're working on an application note explaining how to build a custom service for the S110, and I'll add a link here as soon as it's published. For now, I'd recommend taking a look at the battery service (ble_bas.c, ble_bas.h), and trying to understand it at least partially and building from there.

    Edit: The application note is now out; nAN-36.

  • I'm looking forward to this. I tried this approach, but I wasn't able to send data fast enough. It seems like there's a limit on the number of updates pr. second, and the max length of the data returned. I'd love to have an example that shows how to do custom services.

  • The primary factor deciding how fast the S110 will be able to send data is the connection interval. Please take a look on this:

    To change it, the SDK includes a module called ble_conn_params, which will send update request based on the defines in the top of main.c of the application. It could be worth looking into. If you still can't make it work the way you want, I'd recommend you to create a new question, attaching your code so that we can take a look.

  • Thanks for your ultra fast reply. I'll take alook at it again. Could you also provide me with some hints on making a custom service (with custom data). I need to send around 1KB/sec, but I wasn't able to acheive this rate with my first BLE attempt. So I've moved to Gazelle, but BLE might be a better choice in the long run.

  • Ole Morten - thanks for the hints on how to setup the connection interval etc. I'm now able to control the connection rate, so the next step is to actually try and implement a custom service. When do you expect an example to be ready?