There was a small problem with the BLE DFU firmware update.
I tried to write a new Firmware following the simplest form. I rerun the factory code with a minimal modification with the RUI Online Compiler. I tried to upload the DFU … zip file created there via BLE DFU.
The update stops during initialization and the motherboard hangs for a while and then restarts. Update failed. After that, it cannot be updated with the factory firmware. Although they produce the same error, it crashes, the BLE DFU update does not go.
It produces the same error on two motherboards.
My code was compiled without error by RUI Online Compiler.
The code may not be good for some reason, but can it cause this kind of error? I looked at the size of the zip file not too different, the factory 131-135KB and mine 152KB.
I’ve had to change firmware on them several times with BLE DFU without error.
Is it possible that some buffer is full and not cleared afterwards?
Or any error that makes it impossible to update the DFU file afterwards? I tried restarting, completely unplugging …
What can I do to get the motherboard upgradeable again?
Is there any HW reset solution for this or a factory reset?
The motherboards work, I don’t see any other problem with them.
@beegee already gave pointers there so you can recover your boards to have the default FW and try to play again with it. I suggest you start first by recompiling the default RAK5010 firmware and upload your new code via BLE. If it works, you can then add the modifications little by little until you see what possible causes it. For now, let’s try to make your device fresh again.
I also assume this, but if the RUI compiler compiles without error, can the DFU package still be corrupted? If the program ran incorrectly would it be okay, but from now on I can’t update on DFU? Where is the mistake here?
Plus, my own firmware didn’t go up on it. Has anyone encountered such an error or would anyone be proficient in BLE DFU?
Mainly how can I reset or delete or anything so that I can update again on BLE DFU?
yes, that’s exactly what i thought so that’s why i translated the factory codes first. I rewrote a single value in at.c to see the update was successful and my firmware is running. (TOPIC2 instead of TOPIC1)
Can you look at the zip file I compiled in the RUI compiler? You may be able to find fault with it. Maybe I missed something or vice versa.
Give me an address to send it to.
i read what @beegee wrote, unfortunately i have already looked through these and there are a few question marks in the end. :
I’m still working on the case, there may be something coming out of it. I searched but couldn’t find any material to debug or flash with RAKDAP1. It would be nice if there was a little help, I’m not experienced in SW either.
i did a log of the BLE DFU firmware error.
See if it helps you find out the error.
I tried to install the factory (RAK5010_dfu_20210223065027.zip) v184.108.40.206 with BLE DFU.
nRF Connect, 2022-05-06
V 13:27:09.204 Connecting to CC:A4:DB:11:48:3E…
D 13:27:09.204 gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
D 13:27:09.784 [Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
D 13:27:09.800 [Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
I 13:27:09.800 Connected to CC:A4:DB:11:48:3E
V 13:27:09.804 Discovering services…
D 13:27:09.804 gatt.discoverServices()
I 13:27:10.447 Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms)
D 13:27:10.594 [Callback] Services discovered with status: 0
I 13:27:10.594 Services discovered
V 13:27:10.606 Generic Access (0x1800)
Buttonless DFU [I W] (8ec90003-f315-4f60-9fb8-838830daea50)
Client Characteristic Configuration (0x2902)
D 13:27:10.606 gatt.setCharacteristicNotification(6e400003-b5a3-f393-e0a9-e50e24dcca9e, true)
I 13:27:10.673 Connection parameters updated (interval: 45.0ms, latency: 0, timeout: 5000ms)
I 13:27:15.953 Connection parameters updated (interval: 75.0ms, latency: 0, timeout: 4000ms)
V 13:27:16.720 Enabling indications for 8ec90003-f315-4f60-9fb8-838830daea50
D 13:27:16.720 gatt.setCharacteristicNotification(8ec90003-f315-4f60-9fb8-838830daea50, true)
D 13:27:16.721 gatt.writeDescriptor(00002902-0000-1000-8000-00805f9b34fb, value=0x0200)
I 13:27:16.853 Data written to descr. 00002902-0000-1000-8000-00805f9b34fb, value: (0x) 02-00
A 13:27:16.853 “Indications enabled” sent
V 13:27:16.855 Indications enabled for 8ec90003-f315-4f60-9fb8-838830daea50
V 13:27:19.434 Writing request to characteristic 8ec90003-f315-4f60-9fb8-838830daea50
D 13:27:19.434 gatt.writeCharacteristic(8ec90003-f315-4f60-9fb8-838830daea50, value=0x01)
I 13:27:19.553 Data written to 8ec90003-f315-4f60-9fb8-838830daea50, value: (0x) 01
A 13:27:19.553 “Enter bootloader” sent
I 13:27:19.556 Indication received from 8ec90003-f315-4f60-9fb8-838830daea50, value: (0x) 20-01-01
A 13:27:19.556 “Response for: Enter bootloader
Status: Success” received
D 13:27:23.651 [Callback] Connection state changed with status: 8 and new state: DISCONNECTED (0)
E 13:27:23.656 Error 8 (0x8): GATT CONN TIMEOUT
I 13:27:23.656 Disconnected
D 13:27:23.697 [Broadcast] Action received: android.bluetooth.device.action.ACL_DISCONNECTED
V 13:27:36.356 [DFU] DFU service started
V 13:27:36.356 [DFU] Opening file…
I 13:27:36.370 [DFU] Firmware file opened successfully
V 13:27:36.370 [DFU] Connecting to DFU target…
D 13:27:36.370 [DFU] gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferredPhy = LE_1M | LE_2M)
E 13:27:41.393 [DFU] Connection failed (0x85): GATT ERROR
W 13:27:41.393 [DFU] Retrying…
D 13:27:41.393 [DFU] gatt.refresh() (hidden)
D 13:27:41.394 [DFU] gatt.disconnect()
D 13:27:41.398 [DFU] gatt.close()
V 13:27:41.413 [DFU] DFU service started
I 13:27:41.413 [DFU] Firmware file opened successfully
D 13:27:41.413 [DFU] wait(1000)
D 13:27:42.425 [DFU] wait(1000)
V 13:27:43.413 [DFU] Connecting to DFU target…
D 13:27:43.413 [DFU] gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferredPhy = LE_1M | LE_2M)
E 13:27:48.437 [DFU] Connection failed (0x85): GATT ERROR
W 13:27:48.438 [DFU] Retrying…
D 13:27:48.439 [DFU] gatt.refresh() (hidden)
D 13:27:48.440 [DFU] gatt.disconnect()
D 13:27:48.446 [DFU] gatt.close()
V 13:27:48.456 [DFU] DFU service started
I 13:27:48.462 [DFU] Firmware file opened successfully
D 13:27:48.462 [DFU] wait(1000)
D 13:27:49.465 [DFU] wait(1000)
V 13:27:50.462 [DFU] Connecting to DFU target…
D 13:27:50.462 [DFU] gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferredPhy = LE_1M | LE_2M)
E 13:27:55.483 [DFU] Connection failed (0x85): GATT ERROR
D 13:27:55.483 [DFU] gatt.refresh() (hidden)
D 13:27:55.484 [DFU] gatt.disconnect()
D 13:27:55.488 [DFU] gatt.close()
D 13:27:55.490 [DFU] wait(600)
D 13:27:56.095 gatt.close()
D 13:27:56.098 wait(200)
V 13:27:56.298 Connecting to CC:A4:DB:11:48:3E…
D 13:27:56.298 gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
D 13:28:01.316 [Callback] Connection state changed with status: 133 and new state: DISCONNECTED (0)
E 13:28:01.316 Error 133 (0x85): GATT ERROR
I 13:28:01.316 Disconnected
D 13:28:05.318 gatt.close()
D 13:28:05.324 wait(200)
I have some good news I managed to fix the BLE DFU GETT error 8!
The firmware update is now error free with the BLE DFU.
It is possible that the DFU package was too large, so the buffer was full or simply too many packages went at once.
The solution is to change the number of packages from 10 to 1 in the nRF Connect app settings (nRF5 DFU options).
This prevented GETT error 8.
What I’d like to ask you (just to keep everything clear) is that before I rewrite something in the code and zip it, let’s take a look at what it needs to be in it. I don’t want to go into some fatal mistake again I’d send you the codes that I thought all about. Is this possible?