We are using a slightly modified (but fully compatible signed bootloader) in out product. On the application side we have a C# implementation of the DFU protocol that may work under iOS/Android with Xamarin or on a desktop PC with a BLE Dongle. With the SDK14 bootloader this worked quite well.
Last week we integrated the SDK15 in the product to get support for faster update performance. The bootloader seems to work properly and with the nRF Connect the update works as expected. With our C# library we randomly experianced that the update process failed because the expected RPN packets from the bootloader are not received.
A investigation with the bootloader log RTT output showed the reason for the issue. In the log "cannot allocate memory buffer!" entries can be found shortly after the process fails. This means that the incoming write request could not be stored in the bootloader and is ignored. I'm not sure how we should handle this issue on the app side.
I guess the reason why this only happens with out DFU library is that we don't use the MTU extention by now. The incoming write packets have all a length of 20 bytes instead of 244 bytes with the nRF Connect. The buffer that is used (nrf_balloc) is set up for packets of 244 bytes. With any allocated 20 bytes block full 224 bytes are wasted. I know that I probably could increase the number of balloc blocks, but how many of these blocks are necessairy?
Is the bootloader of the SDK15 supposed to work with packet size of 20 bytes? Do we need to update our library to use larger packtes?