DFU on custom board, memory problem

Hello,

Currently, I'm trying to flash my custom board that has nRF52832 with an uart application that I integrated buttonless DFU. I'm running into a problem where when I try to flash my hex file that has the following combination :

  • Softdevice
  • Bootloader
  • Application
  • Bootloader setting

I got the following error :

"ERROR: The file specified is not a valid hex file, has data outside valid areas"

"ERROR: or does not have data in valid areas."

From what I understand, it is an error on the memory side where my program might have passed its limit. But I don't know how to fix it. I'm not sure the type of model of my nRF52832, but on nRF Connect, it says that it is NRF52832_xxAB_REV1, Core RAM: 32KiB and Core ROM: 256KiB in pages of 4KiB. I'm using SES with SDK 16.0.0

  • Try "build and debug" and see what happens

    Nothing much to be honest. It seems to be working. I verified it via nRF Connect mobile and I see my board advertising DFUTARG.

    This was the memory layout :

    So instinctively, I try to update it with my application and it worked. Here is the memory :

    Then I tried to save it as a hex file and try to reflash it via nrfjprog but it didn't work. Here what it looks like :

    It seems that the extracted code doesn't recognize which part represents what.

    Ideally, I would prefer to program my board in one go instead of programming the bootloader first, then generate my application zip file which then needs to be transferred to my phone, and only then I can update my board with the desired app.

  • The colouring in nRF Connect isn't ideal. It is basically an educated guess on where the bootloader is located, where the softdevice is and so on. Don't worry about that.

     

    Fikri Saman said:
    Then I tried to save it as a hex file and try to reflash it via nrfjprog but it didn't work. Here what it looks like :

     Did you remember to reset the device after reprogramming it? "nrfjprog --reset", since the reset button doesn't work until the first reset after programming it. Alternatively, power cycle the board.

    BR,

    Edvin

  • Yes! It's working! Thank you very much, Edvin!

  • Well, nevermind. I was mistaken. It worked as in, I managed to see it advertising after reflashing it but the DFU does not seem to be working. I managed to enter into boot mode but it failed to update it when. This was the log file :

    Log_2020-06-26_09_33_51[1].txt
    nRF Connect, 2020-06-26
    DfuTarg (CC:0F:60:FB:7D:AF)
    V	09:33:51.363	Connecting to CC:0F:60:FB:7D:AF...
    D	09:33:51.363	gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
    D	09:33:51.409	[Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
    D	09:33:51.427	[Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
    I	09:33:51.427	Connected to CC:0F:60:FB:7D:AF
    V	09:33:51.440	Discovering services...
    D	09:33:51.440	gatt.discoverServices()
    I	09:33:52.143	Connection parameters updated (interval: 15.0ms, latency: 0, timeout: 6000ms)
    D	09:33:52.249	[Callback] Services discovered with status: 0
    I	09:33:52.249	Services discovered
    V	09:33:52.257	Generic Access (0x1800)
    - Device Name [R W] (0x2A00)
    - Appearance [R] (0x2A01)
    - Peripheral Preferred Connection Parameters [R] (0x2A04)
    - Central Address Resolution [R] (0x2AA6)
    Generic Attribute (0x1801)
    Secure DFU Service (0xFE59)
    - DFU Packet [WNR] (8ec90002-f315-4f60-9fb8-838830daea50)
    - DFU Control Point [N W] (8ec90001-f315-4f60-9fb8-838830daea50)
       Client Characteristic Configuration (0x2902)
    I	09:33:52.280	Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms)
    I	09:33:52.336	Connection parameters updated (interval: 15.0ms, latency: 0, timeout: 6000ms)
    V	09:33:55.503	[DFU] DFU service started
    V	09:33:55.503	[DFU] Opening file...
    I	09:33:55.503	[DFU] Firmware file opened successfully
    V	09:33:55.503	[DFU] Connecting to DFU target...
    D	09:33:55.504	[DFU] gatt = device.connectGatt(autoConnect = false)
    I	09:33:55.519	[DFU] Connected to CC:0F:60:FB:7D:AF
    V	09:33:55.519	[DFU] Discovering services...
    D	09:33:55.519	[DFU] gatt.discoverServices()
    I	09:33:55.519	[DFU] Services discovered
    D	09:33:55.519	[DFU] wait(1000)
    V	09:33:56.521	[DFU] Requesting new MTU...
    D	09:33:56.521	[DFU] gatt.requestMtu(517)
    I	09:33:56.552	[DFU] MTU changed to: 247
    V	09:33:56.552	[DFU] Enabling notifications for 8ec90001-f315-4f60-9fb8-838830daea50
    D	09:33:56.552	[DFU] gatt.setCharacteristicNotification(8ec90001-f315-4f60-9fb8-838830daea50, true)
    D	09:33:56.552	[DFU] gatt.writeDescriptor(00002902-0000-1000-8000-00805f9b34fb, value=0x01-00)
    I	09:33:56.596	[DFU] Data written to descr.8ec90001-f315-4f60-9fb8-838830daea50, value (0x): 01-00
    V	09:33:56.597	[DFU] Notifications enabled for 8ec90001-f315-4f60-9fb8-838830daea50
    A	09:33:56.597	[DFU] Notifications enabled
    D	09:33:56.597	[DFU] wait(1000)
    V	09:33:57.597	[DFU] Writing to characteristic 8ec90001-f315-4f60-9fb8-838830daea50
    D	09:33:57.597	[DFU] gatt.writeCharacteristic(8ec90001-f315-4f60-9fb8-838830daea50)
    I	09:33:57.634	[DFU] Data written to 8ec90001-f315-4f60-9fb8-838830daea50, value (0x): 06-01
    I	09:33:57.634	[DFU] Notification received from 8ec90001-f315-4f60-9fb8-838830daea50, value (0x): 60-06-01-00-02-00-00-00-00-00-00-00-00-00-00
    A	09:33:57.635	[DFU] Command object info received (Max size = 512, Offset = 0, CRC = 00000000)
    V	09:33:57.635	[DFU] Writing to characteristic 8ec90001-f315-4f60-9fb8-838830daea50
    D	09:33:57.635	[DFU] gatt.writeCharacteristic(8ec90001-f315-4f60-9fb8-838830daea50)
    I	09:33:57.661	[DFU] Data written to 8ec90001-f315-4f60-9fb8-838830daea50, value (0x): 02-00-00
    I	09:33:57.662	[DFU] Notification received from 8ec90001-f315-4f60-9fb8-838830daea50, value (0x): 60-02-01
    A	09:33:57.662	[DFU] Packet Receipt Notif disabled (Op Code = 2, Value = 0)
    V	09:33:57.662	[DFU] Writing to characteristic 8ec90001-f315-4f60-9fb8-838830daea50
    D	09:33:57.662	[DFU] gatt.writeCharacteristic(8ec90001-f315-4f60-9fb8-838830daea50)
    I	09:33:57.691	[DFU] Data written to 8ec90001-f315-4f60-9fb8-838830daea50, value (0x): 01-01-8D-00-00-00
    I	09:33:57.691	[DFU] Notification received from 8ec90001-f315-4f60-9fb8-838830daea50, value (0x): 60-01-01
    A	09:33:57.691	[DFU] Command object created
    V	09:33:57.691	[DFU] Writing to characteristic 8ec90002-f315-4f60-9fb8-838830daea50
    D	09:33:57.692	[DFU] gatt.writeCharacteristic(8ec90002-f315-4f60-9fb8-838830daea50)
    I	09:33:57.695	[DFU] Data written to 8ec90002-f315-4f60-9fb8-838830daea50, value (0x): 12-8A-01-0A-44-08-01-12-40-08-00-10-34-1A-02-CB-01-20-00-28-00-30-00-38-E8-A4-02-42-24-08-03-12-20-A1-A0-1E-6C-6E-4B-18-64-19-B2-A3-53-3F-C0-4C-84-0F-04-F1-15-A0-DD-21-2B-15-92-BB-11-6B-AB-DF-DB-48-00-52-04-08-01-12-00-10-00-1A-40-9C-28-D5-11-9E-88-0B-93-4F-54-0E-89-93-CD-3F-4B-E4-80-90-F9-3C-CA-50-21-73-F8-06-69-18-74-37-40-13-3B-40-B8-9E-84-A4-C8-FA-A1-5B-0C-15-96-20-04-83-44-A1-0A-30-6D-4D-CD-FC-91-C3-33-F4-A7-D3-9D
    A	09:33:57.695	[DFU] Command object sent (CRC = C0964F9C)
    V	09:33:57.695	[DFU] Writing to characteristic 8ec90001-f315-4f60-9fb8-838830daea50
    D	09:33:57.695	[DFU] gatt.writeCharacteristic(8ec90001-f315-4f60-9fb8-838830daea50)
    I	09:33:57.721	[DFU] Data written to 8ec90001-f315-4f60-9fb8-838830daea50, value (0x): 03
    I	09:33:57.721	[DFU] Notification received from 8ec90001-f315-4f60-9fb8-838830daea50, value (0x): 60-03-01-8D-00-00-00-9C-4F-96-C0
    A	09:33:57.722	[DFU] Checksum received (Offset = 141, CRC = C0964F9C)
    V	09:33:57.722	[DFU] Writing to characteristic 8ec90001-f315-4f60-9fb8-838830daea50
    D	09:33:57.722	[DFU] gatt.writeCharacteristic(8ec90001-f315-4f60-9fb8-838830daea50)
    I	09:33:57.751	[DFU] Data written to 8ec90001-f315-4f60-9fb8-838830daea50, value (0x): 04
    I	09:33:57.886	[DFU] Notification received from 8ec90001-f315-4f60-9fb8-838830daea50, value (0x): 60-04-01
    A	09:33:57.886	[DFU] Command object executed
    V	09:33:57.886	[DFU] Writing to characteristic 8ec90001-f315-4f60-9fb8-838830daea50
    D	09:33:57.887	[DFU] gatt.writeCharacteristic(8ec90001-f315-4f60-9fb8-838830daea50)
    I	09:33:57.917	[DFU] Data written to 8ec90001-f315-4f60-9fb8-838830daea50, value (0x): 06-02
    I	09:33:57.918	[DFU] Notification received from 8ec90001-f315-4f60-9fb8-838830daea50, value (0x): 60-06-01-00-10-00-00-00-00-00-00-00-00-00-00
    A	09:33:57.918	[DFU] Data object info received (Max size = 4096, Offset = 0, CRC = 00000000)
    V	09:33:57.951	[DFU] Writing to characteristic 8ec90001-f315-4f60-9fb8-838830daea50
    D	09:33:57.951	[DFU] gatt.writeCharacteristic(8ec90001-f315-4f60-9fb8-838830daea50)
    D	09:34:03.939	[Callback] Connection state changed with status: 8 and new state: DISCONNECTED (0)
    E	09:34:03.939	[DFU] Error (0x85): GATT ERROR
    E	09:34:03.939	Error 8 (0x8): GATT CONN TIMEOUT
    I	09:34:03.939	Disconnected
    V	09:34:03.940	[DFU] Disconnecting...
    D	09:34:03.990	[Broadcast] Action received: android.bluetooth.device.action.ACL_DISCONNECTED
    D	09:34:04.017	[DFU] gatt.disconnect()
    D	09:34:04.017	[DFU] [Broadcast] Action received: android.bluetooth.device.action.ACL_DISCONNECTED
    I	09:34:04.017	[DFU] Disconnected
    D	09:34:04.017	[DFU] gatt.refresh() (hidden)
    D	09:34:04.019	[DFU] gatt.close()
    D	09:34:04.025	[DFU] wait(600)
    D	09:34:04.629	gatt.close()
    D	09:34:04.638	wait(200)
    V	09:34:04.840	Connecting to CC:0F:60:FB:7D:AF...
    D	09:34:04.840	gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
    D	09:34:09.874	[Callback] Connection state changed with status: 133 and new state: DISCONNECTED (0)
    E	09:34:09.874	Error 133 (0x85): GATT ERROR
    I	09:34:09.874	Disconnected
    D	09:34:13.714	gatt.close()
    D	09:34:13.725	wait(200)
    

  • Is it possible to flash the debug bootloader(s) instead of the normal bootloader and monitor the logging information? From your log, it just looks like it is in the middle of the process, but the nRF stops responding, and the connection times out. 

    Can you test this on a "normal" nRF52832 DK, and see if the problem may be related to the flash size?

    Does this only happen after you read out the flash and reflash it? Or does it happen if you flash the bootloader and softdevice separately as well?

Related