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.

Characteristic + Profile Performance

I have a few questions here regarding profile development.

  • Is there a limit to the amount of characteristics in a service?  Or characteristics on a peripheral.
  • I started to get a XDATA Heap error after adding another 20 characteristics to a new profile created on top of the keyfob demo.  Is this pushing the limit for the CC2540-128?  
  • Is there a performance hit when creating notify characteristics vs read.  If power was not a limiting factor, would there be a problem with making most of the characteristics notify and then ignoring the updates we don't care about on the central side?
  • Is it wise to bit/byte pack several pieces of data into one characteristic.  For instance, if i have 6 'status' bools that need to be transmitted to the central device, should I make one characteristic called 'status' and mask each bit in a byte, or create 6 difference characteristics?
  • Hi,

     Is this pushing the limit for the CC2540-128?

     If IAR can't fit it and *.map file contains error message, then you/ve probably hit the limit. I've had to re-solder my BLE112 modules with spare F256s, because F128 cannot fit combined central/peripheral anyway.

    I believe (though can't exactly back it up by Core Specs extract and calculations) that with F128 you'll hit the wall much sooner than BLE specs/stack allow. This particular device is just bound to produce house-of-cards scenarios under BLE 1.2.1. I am still curious how BlueGiga people managed to fit both central AND peripheral role code into F128 - probably they've used their own stack.

     

    Is it wise to bit/byte pack several pieces of data into one characteristic

    It is, if they are, by your design, to be transmitted together. Reading/writing one characteristic requires a single GAP transaction. Why have 6 transmissions when you're good with 1? :)

    Of course if you intend to read them randomly, it makes little difference when it comes to timing. But you'll still conserve memory.

    Oleg.

  • Hi Jonathan,

    May I ask how to design a new profile? How can I assign a new UUID? Thanks a lot.

    Thanks,

    Victor.

  • Hi,

    Victor Husi said:
    How can I assign a new UUID?

    You can use a WEB UUID generator (ex this). Note that a proprietary profile must use 128bit UUIDs (Compared to 16bit UUID that Bluetooth SIG adopted profiles use)

  • But if i want to use profile only for my personal use e.g. project at university, i dont have to assign 128bit UUIDs, do I ? Because iam just trying to create my own profile to read ADC and send a data to Smartphone and i am bit confused about UUID, characteristics and attributes structure.


    btw do you have some good references for explanation of  how are the handles and attributes assigned?

    Thank you 

  • Hi Michal,

    As I understand, the 128bit proprietary UUID requirement only applies if you are going to qualify/certify your end product with the Blutooth SIG for Bluetooth Smart branding.

    Best regards,
    Aslak