TI OAD API Documentation  2.02.07.00
oad_image_header.h
Go to the documentation of this file.
1 /******************************************************************************
2 
3  @file oad_image_header.h
4 
5  @brief This file contains the image header definition and structures.
6 
7  Group: WCS, BTS
8  $Target Device: DEVICES $
9 
10  ******************************************************************************
11  $License: BSD3 2017 $
12  ******************************************************************************
13  $Release Name: PACKAGE NAME $
14  $Release Date: PACKAGE RELEASE DATE $
15  ******************************************************************************/
16 
92 #ifndef OAD_IMAGE_HEADER_H
93 #define OAD_IMAGE_HEADER_H
94 
95 #ifdef __cplusplus
96 extern "C"
97 {
98 #endif
99 
100 /*******************************************************************************
101  * INCLUDES
102  ******************************************************************************/
103 #include <stddef.h>
104 #include <stdint.h>
105 
106 /*******************************************************************************
107  * CONSTANTS
108  ******************************************************************************/
109 
110 
111 #ifdef OAD_ONCHIP
112 
127  #define BIM_VAR_ADDR 0x20000400
128 
134  extern uint32_t _bim_var;
135 #endif // OAD_ONCHIP
136 
137 #define SIGN_FN_PTR 0x57fa0
138 extern uint32_t _sign_fnPtr;
139 
140 
151 #define OAD_IMG_TYPE_PERSISTENT_APP 0
152 
158 #define OAD_IMG_TYPE_APP 1
159 
165 #define OAD_IMG_TYPE_STACK 2
166 
173 #define OAD_IMG_TYPE_APP_STACK 3
174 
181 #define OAD_IMG_TYPE_NP 4
182 
189 #define OAD_IMG_TYPE_FACTORY 5
190 
197 #define OAD_IMG_TYPE_BIM 6
198 
207 #define OAD_IMG_TYPE_APPSTACKLIB 7
208 
214 #define OAD_IMG_TYPE_RSVD_BEGIN 64
215 
221 #define OAD_IMG_TYPE_RSVD_END 255
222 
233 #define OAD_WIRELESS_TECH_BLE 0xFFFE
234 
238 #define OAD_WIRELESS_TECH_TIMAC_SUBG 0xFFFD
239 
243 #define OAD_WIRELESS_TECH_TIMAC_2_4G 0xFFFB
244 
248 #define OAD_WIRELESS_TECH_ZIGBEE 0xFFF7
249 
253 #define OAD_WIRELESS_TECH_RF4CE 0xFFEF
254 
258 #define OAD_WIRELESS_TECH_THREAD 0xFFDF
259 
263 #define OAD_WIRELESS_TECH_PROPRF 0xFFBF
264 
268 #define OAD_WIRELESS_TECH_MIOTY 0xFF7F
269 
273 #define OAD_WIRELESS_TECH_WBMS 0xFEFF
274 
277 #if defined(DeviceFamily_CC26X2) || defined (DeviceFamily_CC26X2_V2) || \
278  defined(DeviceFamily_CC26X2X7) || defined(DeviceFamily_CC26X1)
279  #define OAD_IMG_ID_VAL {'C', 'C', '2', '6', 'x', '2', 'R', '1'}
280 #elif defined (DeviceFamily_CC13X2) || \
281  defined (DeviceFamily_CC13X2X7) || \
282  defined (DeviceFamily_CC13X1) || \
283  defined (DeviceFamily_CC13X2_V1) || \
284  defined (DeviceFamily_CC13X2_V2)
285  #define OAD_IMG_ID_VAL {'C', 'C', '1', '3', 'x', '2', 'R', '1'}
286 #elif defined (DeviceFamily_CC13X4)
287  #define OAD_IMG_ID_VAL {'C', 'C', '1', '3', 'x', '4', ' ', ' '}
288 #elif defined (DeviceFamily_CC26X3)
289  #define OAD_IMG_ID_VAL {'C', 'C', '2', '6', 'x', '3', ' ', ' '}
290 #elif defined (DeviceFamily_CC26X4)
291  #define OAD_IMG_ID_VAL {'C', 'C', '2', '6', 'x', '4', ' ', ' '}
292 #elif defined (DeviceFamily_CC26X0R2)
293  #define OAD_IMG_ID_VAL {'O', 'A', 'D', ' ', 'I', 'M', 'G', ' '}
294 #elif defined (DOXYGEN)
295 
305  #define OAD_IMG_ID_VAL
306 #else
307  #error "Unknown Device Family"
308 #endif //DeviceFamily_CC26X2
309 
318 #define OAD_EXTFL_ID_VAL {'O', 'A', 'D', ' ', 'N', 'V', 'M', '1'}
319 
320 
329 #define CRC_OFFSET offsetof(imgHdr_t, fixedHdr.crc32)
330 
334 #define BIM_VER_OFFSET offsetof(imgHdr_t, fixedHdr.bimVer)
335 
340 #define IMG_DATA_OFFSET BIM_VER_OFFSET
341 
345 #define IMG_INFO_OFFSET offsetof(imgHdr_t, fixedHdr.imgCpStat)
346 
350 #define IMG_COPY_STAT_OFFSET IMG_INFO_OFFSET
351 
355 #define CRC_STAT_OFFSET offsetof(imgHdr_t, fixedHdr.crcStat)
356 
360 #define IMG_TYPE_OFFSET offsetof(imgHdr_t, fixedHdr.imgType)
361 
365 #define IMG_VALIDATION_OFFSET offsetof(imgHdr_t, fixedHdr.imgVld)
366 
370 #define BOUNDARY_SEG_OFFSET offsetof(imgHdr_t, fixedHdr.segTypeBd)
371 
375 #define SEG_LEN_OFFSET 4
376 
382 #define SEG_SIGERINFO_OFFSET offsetof(imgHdr_t, secInfoSeg.secSignerInfo)
383 
387 #define SEG_SIGNR_OFFSET offsetof(imgHdr_t, secInfoSeg.eccSign.sign_r)
388 
392 #define SEG_SIGNS_OFFSET offsetof(imgHdr_t, secInfoSeg.eccSign.sign_s)
393 
397 #define SEC_VERIF_STAT_OFFSET offsetof(imgHdr_t, secInfoSeg.verifStat)
398 
402 #define HDR_LEN_WITH_SECURITY_INFO offsetof(imgHdr_t, secInfoSeg.segTypeSecure) + sizeof(securityInfoSeg_t)
403 
407 #define IMG_START_ADDR_OFFSET offsetof(imgHdr_t, imgPayload.startAddr)
408 
419 #define SEG_HDR_LEN 12
420 
425 #define OAD_IMG_ID_LEN 8
426 
430 #define OAD_SW_VER_LEN 4
431 
435 #define OAD_IMG_HDR_LEN sizeof(imgFixedHdr_t)
436 
448 #define IMG_BOUNDARY_SEG_ID 0x00
449 
453 #define IMG_PAYLOAD_SEG_ID 0x01
454 
455 
459 #define IMG_NONCOUNT_SEG_ID 0x02
460 
464 #define IMG_SECURITY_SEG_ID 0x03
465 
469 #define OAD_IMG_FULL_HDR_LEN sizeof(imgHdr_t)
470 #define OAD_IMG_ID_LEN 8
471 #define OAD_SW_VER_LEN 4
472 
473 #ifndef STACK_LIBRARY
474  #define BOUNDARY_SEG_LEN 0x18
475 #endif
476 #define SECURITY_SEG_LEN 0x55
477 
478 #define IMG_COPY_STAT_OFFSET IMG_INFO_OFFSET /* Image copy status */
479 
480 #define SEG_LEN_OFFSET 4 /* Offset from seg header to seg len */
481 #define SIG_OFFSET offsetof(securityInfoSeg_t, eccSign.sign_r)
482 
483 #define ECDSA_KEY_LEN 32
484 
485 #define ECDSA_SHA_TEMPWORKZONE_LEN ECDSA_KEY_LEN*6
486 
487 
492 #define BIM_VER 0x3
493 
499 #define META_VER 0x1
500 
506 #define SECURITY_VER 0x1
507 
511 #define DEFAULT_STATE 0xFF
512 
517 #define CRC_VALID 0xFE
518 
523 #define CRC_INVALID 0xFC
524 
528 #define NEED_COPY 0xFE
529 
533 #define COPY_DONE 0xFC
534 
535 #ifdef BIM_DUAL_ONCHIP_IMAGE
536 
540 #define VERIFY_PASS_CURRENT 0xFE
541 
546 #define VERIFY_PASS_NOT_CURRENT 0xFC
547 
552 #define VERIFY_FAIL 0xF8
553 
554 #else
555 
559 #define VERIFY_FAIL 0xFC
560 
561 #endif // BIM_DUAL_ONCHIP_IMAGE
562 
566 #define VERIFY_PASS 0xFE
567 
571 #define EFL_MATADATA_HDR_LEN OAD_IMG_HDR_LEN + 8
572 
576 #define INVALID_ADDR 0xFFFFFFFF
577 
581 #define INVALID_LEN INVALID_ADDR
582 
586 #define DEFAULT_CRC 0xFFFFFFFF
587 
588 #if defined(SECURITY)
589 
592  #define SIGNER_INFO_SIZE 8
593 
597  #define SIGNATURE_SIZE 64
598 #endif
599 
600 /*******************************************************************************
601  * Typedefs
602  */
603 
605 #if defined (__IAR_SYSTEMS_ICC__)
606  #define TYPEDEF_STRUCT_PACKED __packed typedef struct
607 #elif defined __TI_COMPILER_VERSION || defined __TI_COMPILER_VERSION__ || __clang__
608  #define TYPEDEF_STRUCT_PACKED typedef struct __attribute__((packed))
609 #elif defined (__GNUC__)
610  #define TYPEDEF_STRUCT_PACKED typedef struct __attribute__((__packed__))
611 #endif
612 
614 #if defined(SECURITY)
615 
618  TYPEDEF_STRUCT_PACKED
619  {
620  uint8_t signerInfo[SIGNER_INFO_SIZE];
621  uint8_t signature[SIGNATURE_SIZE];
622  }signPld_ECDSA_P256_t;
623 #endif
624 
629 TYPEDEF_STRUCT_PACKED
630 {
631  uint8_t imgID[8];
632  uint32_t crc32;
633  uint8_t bimVer;
634  uint8_t metaVer;
635  uint16_t techType;
636  uint8_t imgCpStat;
637  uint8_t crcStat;
638  uint8_t imgType;
639  uint8_t imgNo;
640  uint32_t imgVld;
641  uint32_t len;
642  uint32_t prgEntry;
643  uint8_t softVer[4];
644  uint32_t imgEndAddr;
645  uint16_t hdrLen;
646  uint16_t rfu;
648 
655 TYPEDEF_STRUCT_PACKED
656 {
657  uint8_t segTypeImg;
658  uint16_t wirelessTech;
659  uint8_t rfu;
660  uint32_t imgSegLen;
661  uint32_t startAddr;
663 
673 TYPEDEF_STRUCT_PACKED
674 {
675  uint8_t segTypeBd;
676  uint16_t wirelessTech;
677  uint8_t rfu;
678  uint32_t boundarySegLen;
679  uint32_t stackStartAddr;
680  uint32_t stackEntryAddr;
681  uint32_t ram0StartAddr;
682  uint32_t ram0EndAddr;
684 
685 
687 typedef struct {
688  uint8_t sign_r[32];
689  uint8_t sign_s[32];
691 
698 TYPEDEF_STRUCT_PACKED
699 {
700  uint8_t segTypeSecure;
701  uint16_t wirelessTech;
702  uint8_t verifStat;
703  uint32_t secSegLen;
704  uint8_t secVer;
705  uint32_t secTimestamp;
706  uint8_t secSignerInfo[8];
709 
718 TYPEDEF_STRUCT_PACKED
719 {
721 #if (defined(SECURITY))
722  securityInfoSeg_t secInfoSeg;
723 #endif
724 #if (!defined(STACK_LIBRARY) && (defined(SPLIT_APP_STACK_IMAGE)))
725  boundarySeg_t boundarySeg;
726 #endif
728 } imgHdr_t;
729 
730 TYPEDEF_STRUCT_PACKED
731 {
732  uint32_t *eccWorkzone;
733  uint8_t *SHAWorkzone;
734  uint8_t *tempWorkzone;
735  uint8_t *SHADataBuf;
736  uint8_t SHADataBufLen;
737 } ecdsaSigVerifyBuf_t;
738 
743 /*******************************************************************************
744  * Typedefs
745  */
746 
752 typedef uint8_t (*bimSignFnPtr_t)(uint8_t, uint32_t, uint32_t, uint8_t *,
753  uint8_t *, ecdsaSigVerifyBuf_t *);
754 
755 #ifdef __cplusplus
756 }
757 #endif
758 
759 #endif /* OAD_IMAGE_HEADER_H */
uint16_t hdrLen
Total length of the image header.
Definition: oad_image_header.h:645
uint32_t imgVld
Image validation bytes, used by BIM.
Definition: oad_image_header.h:640
uint16_t techType
Wireless protocol type BLE/TI-MAC/ZIGBEE etc.
Definition: oad_image_header.h:635
uint8_t segTypeSecure
Segment type - for Secuirty info payload.
Definition: oad_image_header.h:700
uint32_t ram0StartAddr
RAM entry start address.
Definition: oad_image_header.h:681
uint32_t startAddr
Start address of image on internal flash.
Definition: oad_image_header.h:661
uint32_t prgEntry
Program entry address.
Definition: oad_image_header.h:642
uint16_t wirelessTech
Wireless technology type.
Definition: oad_image_header.h:658
uint32_t crc32
Image&#39;s 32-bit CRC value.
Definition: oad_image_header.h:632
uint32_t ram0EndAddr
RAM entry end address.
Definition: oad_image_header.h:682
uint16_t rfu
Reserved bytes.
Definition: oad_image_header.h:646
uint8_t metaVer
Metadata version.
Definition: oad_image_header.h:634
uint8_t imgNo
Image number of &#39;image type&#39;.
Definition: oad_image_header.h:639
uint16_t wirelessTech
Wireless technology type.
Definition: oad_image_header.h:676
uint8_t segTypeBd
Segment type - for boundary segment.
Definition: oad_image_header.h:675
uint32_t len
Image length in bytes.
Definition: oad_image_header.h:641
uint32_t boundarySegLen
Boundary segment length.
Definition: oad_image_header.h:678
uint8_t bimVer
BIM version.
Definition: oad_image_header.h:633
uint8_t secVer
Security version */.
Definition: oad_image_header.h:704
uint32_t stackStartAddr
Start address of stack image on internal flash.
Definition: oad_image_header.h:679
uint8_t crcStat
CRC status.
Definition: oad_image_header.h:637
uint8_t segTypeImg
Segment type - for Contiguous image payload.
Definition: oad_image_header.h:657
eccSignature_t eccSign
Security signature */.
Definition: oad_image_header.h:707
uint32_t stackEntryAddr
Stack start address.
Definition: oad_image_header.h:680
uint8_t imgType
Image Type.
Definition: oad_image_header.h:638
Definition: oad_image_header.h:673
imgPayloadSeg_t imgPayload
Required contiguous image segment.
Definition: oad_image_header.h:727
imgFixedHdr_t fixedHdr
Required core image header.
Definition: oad_image_header.h:720
uint32_t imgSegLen
Payload segment length.
Definition: oad_image_header.h:660
uint8_t imgCpStat
Image copy status.
Definition: oad_image_header.h:636
Definition: oad_image_header.h:687
Definition: oad_image_header.h:718
uint32_t secTimestamp
Security timestamp */.
Definition: oad_image_header.h:705
Definition: oad_image_header.h:629
uint8_t(* bimSignFnPtr_t)(uint8_t, uint32_t, uint32_t, uint8_t *, uint8_t *, ecdsaSigVerifyBuf_t *)
OAD Image Pointer to BIM Function.
Definition: oad_image_header.h:752
Definition: oad_image_header.h:698
uint32_t secSegLen
Payload segment length.
Definition: oad_image_header.h:703
uint32_t imgEndAddr
Address of the last byte of a contiguous image.
Definition: oad_image_header.h:644
uint16_t wirelessTech
Wireless technology type.
Definition: oad_image_header.h:701
uint8_t verifStat
Verification status.
Definition: oad_image_header.h:702
uint8_t rfu
Reserved byte.
Definition: oad_image_header.h:677
uint8_t rfu
Reserved byte.
Definition: oad_image_header.h:659
Definition: oad_image_header.h:655
© Copyright 1995-2022, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale