I have a hardware acting as a peripheral and I want to read all of its memory, which has 1081344 bytes. Using the standard size of 23 bytes (with 20 bytes useful for data -> see Edit to understand how it does it) it takes more than a minute to read all the memory, so I want to improve the throughput. To do so, I could make the MTU bigger, as I saw in this useful article (https://punchthrough.com/blog/posts/maximizing-ble-throughput-part-2-use-larger-att-mtu). I heard that transfering with larger MTU is unstable. Is it too unstable that it's not worthy to use or it, regardless the instability, offers better throughput?
The problem is android provides requestMtu method just from API 21. I want to know if its possible to change MTU from peripheral without having to implement any of callbacks or functions on android side (this way it would work on any API after 18). From this answer (Requesting MTU with Bluetooth Low Energy connection on Android 4.3-4.4 (API 18-20)) it seems to be possible, but I am not sure if there is some implementation I should do on android side.
If android will not accept this request, is there another way to change MTU without depending on the new funcionalities of API 21 and further? This answer (Change the MTU or Packet Size for Bluetooth in Android?) makes me believe that this is possible, but it's not clear to me how it's done.
If I can request the MTU size from peripheral (the firmware developer confirmed to me that this is possible), can the peripheral know if it succed? I think it would be enough to work with, because I can communicate to my peripheral through characteristics and it could tell me if the request were accepted or not. I just wanna know if it's ok to believe that android will accept and send a success response or if there's some limitation of 23 bytes of MTU on APIs before 21.
Since it takes some time to implement it on hardware, I would like to know if its worth to try or if will definitely not work.
Edit: the peripheral is now updating one single caractheristic with a package of 20 bytes at a time and sending changing notifications to my central. So, the divisions in chunks are done on server side. What I want is to make that chunks bigger.