I'm testing with S132 nRF52 SoftDevice 3.0.0, BLE dfu operation with single, nRF toolbox on Android version 1.16.5.
I have checked the example in SDK, nRF5_SDK_12.1.0_0d23e2a/examples/dfu/bootloader_secure/pca10040_debug , with public key, and use nRF Toolbox DFU to update application code, and it works.
After that, I generate a private key, and rebuild the bootloader_secure, as following. The "nrfutil" is installed according to the manual in "github.com/.../pc-nrfutil".
- nrfutil keys generate private.pem private.pem key :
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIPXo8UVg6H2f2N2A5JRR1VcVzjbrmk78LRG1ptdLCFXpoAoGCCqGSM49 AwEHoUQDQgAEsovjPKrhvUjBhVtCVUDdxLDArxtKRnFbplu18c77GlYXcE1czvXa XoQImmdHsLSFY5M66SO5X52n8VR622QVpg==
-----END EC PRIVATE KEY-----
- nrfutil keys display --key pk --format code private.pem
- copy the pk code to nRF5_SDK_12.1.0_0d23e2a/examples/dfu/bootloader_secure/dfu_public_key.c
#else __ALIGN(4) const uint8_t pk[64] = { 0xb2, 0x2f, 0xd8, 0x16, 0x42, 0x51, 0x54, 0xcc, 0x57, 0x38, 0xb4, 0x7f, 0xc8, 0x98, 0x35, 0x5b, 0xec, 0x4d, 0x91, 0xb9, 0xa2, 0x8e, 0x0c, 0x47, 0xea, 0x4b, 0x70, 0xed, 0xf7, 0x09, 0x89, 0x03, 0x62, 0x79, 0xbf, 0x81, 0xe8, 0xf9, 0x55, 0x7d, 0xa3, 0xd9, 0x12, 0x70, 0x18, 0x00, 0x23, 0xc6, 0x95, 0xf6, 0x8e, 0x13, 0x8a, 0xef, 0xbb, 0x43, 0xd9, 0xe3, 0xa3, 0x70, 0x91, 0x43, 0x9e, 0xf8 }; #endif
- Make the code and program to nRF52832 with ICE.
After that, I implement an application code with the same private key, and prepare a package for nRF Toolbox as following.
nrfutil pkg generate --hw-version 1 --sd-req 0x8C --application-version 1 --application myapp.hex --key-file private.pem apptest.zip
At last, I copy this "apptest.zip" to pad, and use nRF Toolbox DFU function to program the application code to nRF52832, and I have following error messages.
DfuTarg (F2:C5:6C:31:71:BD) ... ...
E 14:42:21.862 [DFU] Remote DFU error: REMOTE DFU OPERATION FAILED