NXP K32W0x1 OTA guide#
The Secondary Stage Bootloader (SSBL)#
There are multiple SSBL binaries provided by the SDK:
description |
github SDK path |
package SDK path |
---|---|---|
Default SSBL |
NA |
|
SSBL with PDM in external flash |
|
|
The SSBL is also built alongside the reference application and it can be configured according to the following table:
gn arg |
default |
description |
---|---|---|
|
true |
Enable/disable PDM in external flash |
|
true |
Enable/disable multi-image OTA feature |
|
“OTACustomStorage_ExtFlash” |
Configure custom OTA entry storage type |
|
false |
Enable/disable simple hash verification alternative to secure boot |
|
false |
Optimize |
|
false |
Enable/disable |
|
0 |
Set SSBL version |
|
false |
Enable/disable usage of |
|
false |
Enable/disable OTA support for application with sections stored in external flash |
Simple hash verification#
When secure boot is not used, a simple hash can be appended at the end of the
image for integrity check. Applications should be built with
chip_simple_hash_verification=1
.
Writing the SSBL#
Before writing the SSBL, it it recommanded to fully erase the internal flash.
Using DK6Programmer utility from Windows:
DK6Programmer.exe -V 5 -P 1000000 -s <COM_PORT> -e Flash
Using dk6prog
from SPSDK
:
$ dk6prog listdev
This is an experimental utility. Use with caution!
List of available devices:
DEVICE ID: DN038ZH3, VID: 0x403, PID: 0x6015, Serial number: DN038ZH3, Description: DK6 Carrier Board, Address: 9, Backend: Backend.PYFTDI
$ dk6prog -d DN038ZH3 erase 0 0x9de00
This is an experimental utility. Use with caution!
Erasing memory [####################################] 100%
chip-k32w0x-ssbl.bin
must be written at address 0 in the internal flash:
Using DK6Programmer utility from Windows:
DK6Programmer.exe -V2 -s <COM_PORT> -P 1000000 -Y -p FLASH@0x00="chip-k32w0x-ssbl.bin"
Using dk6prog
from SPSDK
:
$ dk6prog -d DN038ZH3 write 0 ~/path/to/bin/chip-k32w0x-ssbl.bin
This is an experimental utility. Use with caution!
Writing memory [####################################] 100%
Written 7890 bytes to memory ID 0 at address 0x0
Writing the PSECT#
This is the list of all supported partitions:
0000000010000000 : SSBL partition
00000000 -----------> Start Address
1000 ---------------> 0x0010 Number of 512-bytes pages
00 -----------------> 0x00 Bootable flag
00 -----------------> 0x00 Image type (0x00 = SSBL)
00400000c9040101: Application partition
00400000 -----------> 0x00004000 Start Address
c904 ---------------> 0x04c9 Number of 512-bytes pages
01 -----------------> 0x01 Bootable flag
01 -----------------> 0x01 Image type (0x01 = Application)
00000010800000fe: Ext Flash text partition
00000010 -----------> 0x10000000 Start Address (external flash)
8000 ---------------> 0x0080 Number of 512-bytes pages
00 -----------------> 0x00 Bootable flag
fe -----------------> 0xFE Image type (0xFE = Ext Flash text)
00000110300200fc : OTA Image partition
00000110 -----------> 0x10010000 Start Address
3002----------------> 0x0230 Number of 512-bytes pages
00 -----------------> 0x00 Bootable flag
fc -----------------> 0xFC Image type (0xFC = OTA partition)
00000510100000fd: NVM partition
00000510 -----------> 0x10050000 Start Address
1000 ---------------> 0x0010 Number of 512-bytes pages
00 -----------------> 0x00 Bootable flag
fd -----------------> 0xFD Image type (0xFD = NVM partition)
First, image directory 0 (SSBL partition) must be written:
Using DK6Programmer utility from Windows:
DK6Programmer.exe -V5 -s <COM port> -P 1000000 -w image_dir_0=0000000010000000
Using dk6prog
from SPSDK
:
$ dk6prog -d DN038ZH3 write 0x160 [[0000000010000000]] 8 PSECT
This is an experimental utility. Use with caution!
Writing memory [####################################] 100%
Written 8 bytes to memory ID PSECT at address 0x160
Here is the interpretation of the fields:
00000000 -> start address 0x00000000
1000 -> size = 0x0010 pages of 512-bytes (= 8kB)
00 -> not bootable (only used by the SSBL to support SSBL update)
00 -> SSBL Image Type
Second, image directory 1 (application partition) must be written:
Using DK6Programmer utility from Windows:
DK6Programmer.exe -V5 -s <COM port> -P 1000000 -w image_dir_1=00400000C9040101
Using dk6prog
from SPSDK
:
$ dk6prog -d DN038ZH3 write 0x168 [[00400000C9040101]] 8 PSECT
This is an experimental utility. Use with caution!
Writing memory [####################################] 100%
Written 8 bytes to memory ID PSECT at address 0x168
Here is the interpretation of the fields:
00400000 -> start address 0x00004000
C904 -> 0x4C9 pages of 512-bytes (= 612.5kB)
01 -> bootable flag
01 -> image type for the application
Please note the user can write additional partitions by writing
image_dir_2/3/4
with the wanted configuration. In case of using the SPSDK
tool, the appropriate offset must be calculated
Removing SSBL Upgrade Region#
The example also offers the possibility to remove SSBL upgrade region, for reserving more space for application level.
A new flag chip_reduce_ssbl_size
is introduced. In order to remove the SSBL
upgrade region, chip_reduce_ssbl_size=true
must be provided to the build
system
The programming method will change:
Writing image directory 1 should change to Using DK6Programmer utility from Windows:
DK6Programmer.exe -V5 -s <COM port> -P 1000000 -w image_dir_1=00200000D9040101
Using
dk6prog
fromSPSDK
:$ dk6prog -d DN038ZH3 write 0x168 [[00200000D9040101]] 8 PSECT This is an experimental utility. Use with caution! Writing memory [####################################] 100% Written 8 bytes to memory ID PSECT at address 0x168
Here is the interpretation of the fields:
00200000 -> start address 0x00002000 D904 -> 0x4D9 pages of 512-bytes (= 620.5kB) 01 -> bootable flag 01 -> image type for the application
Matter application offset address should change to Using DK6Programmer utility from Windows:
DK6Programmer.exe -V2 -s <COM_PORT> -P 1000000 -Y -p FLASH@0x2000="chip-k32w0x-contact-example.bin"
Using
dk6prog
fromSPSDK
:$ dk6prog -d DN038ZH3 write 0x2000 ~/path/to/bin/chip-k32w0x-contact-example.bin This is an experimental utility. Use with caution! Writing memory [####################################] 100% Written 596450 bytes to memory ID 0 at address 0x2000