TI OAD API Documentation  2.02.09.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 #if defined(BIM_DUAL_ONCHIP_IMAGE) && !defined(SECURITY)
138  // DUAL Image BIM is considered a strictly production ready variant. DEBUG_BIM cannot be used as
139  // it would skip key security steps.
140  #error "Error: DUAL ON CHIP BIM needs the macro SECURITY to be enabled"
141 #endif
142 
143 #if defined (DeviceFamily_CC23X0R2)
144  #define SIGN_FN_PTR 0x37fc
145 #else
146  #define SIGN_FN_PTR 0x57fa0
147 #endif
148 extern uint32_t _sign_fnPtr;
149 
161 #define OAD_IMG_TYPE_PERSISTENT_APP 0
162 
168 #define OAD_IMG_TYPE_APP 1
169 
175 #define OAD_IMG_TYPE_STACK 2
176 
183 #define OAD_IMG_TYPE_APP_STACK 3
184 
191 #define OAD_IMG_TYPE_NP 4
192 
199 #define OAD_IMG_TYPE_FACTORY 5
200 
207 #define OAD_IMG_TYPE_BIM 6
208 
217 #define OAD_IMG_TYPE_APPSTACKLIB 7
218 
224 #define OAD_IMG_TYPE_RSVD_BEGIN 64
225 
231 #define OAD_IMG_TYPE_RSVD_END 255
232 
243 #define OAD_WIRELESS_TECH_BLE 0xFFFE
244 
248 #define OAD_WIRELESS_TECH_TIMAC_SUBG 0xFFFD
249 
253 #define OAD_WIRELESS_TECH_TIMAC_2_4G 0xFFFB
254 
258 #define OAD_WIRELESS_TECH_ZIGBEE 0xFFF7
259 
263 #define OAD_WIRELESS_TECH_RF4CE 0xFFEF
264 
268 #define OAD_WIRELESS_TECH_THREAD 0xFFDF
269 
273 #define OAD_WIRELESS_TECH_PROPRF 0xFFBF
274 
278 #define OAD_WIRELESS_TECH_MIOTY 0xFF7F
279 
283 #define OAD_WIRELESS_TECH_WBMS_WD 0xFEFF
284 
288 #define OAD_WIRELESS_TECH_WBMS_WM 0xFDFF
289 
290 
293 #if defined(DeviceFamily_CC26X2) || defined (DeviceFamily_CC26X2_V2) || \
294  defined(DeviceFamily_CC26X2X7) || defined(DeviceFamily_CC26X1)
295  #define OAD_IMG_ID_VAL {'C', 'C', '2', '6', 'x', '2', 'R', '1'}
296 #elif defined (DeviceFamily_CC13X2) || \
297  defined (DeviceFamily_CC13X2X7) || \
298  defined (DeviceFamily_CC13X1) || \
299  defined (DeviceFamily_CC13X2_V1) || \
300  defined (DeviceFamily_CC13X2_V2)
301  #define OAD_IMG_ID_VAL {'C', 'C', '1', '3', 'x', '2', 'R', '1'}
302 #elif defined (DeviceFamily_CC13X4)
303  #define OAD_IMG_ID_VAL {'C', 'C', '1', '3', 'x', '4', ' ', ' '}
304 #elif defined (DeviceFamily_CC26X3)
305  #define OAD_IMG_ID_VAL {'C', 'C', '2', '6', 'x', '3', ' ', ' '}
306 #elif defined (DeviceFamily_CC26X4)
307  #define OAD_IMG_ID_VAL {'C', 'C', '2', '6', 'x', '4', ' ', ' '}
308 #elif defined (DeviceFamily_CC26X0R2)
309  #define OAD_IMG_ID_VAL {'O', 'A', 'D', ' ', 'I', 'M', 'G', ' '}
310 #elif defined (DeviceFamily_CC23X0R2)
311  #define OAD_IMG_ID_VAL {'C', 'C', '2', '3', 'x', '0', 'R', '2'}
312 #elif defined (DOXYGEN)
313 
323  #define OAD_IMG_ID_VAL
324 #else
325  #error "Unknown Device Family"
326 #endif //DeviceFamily_CC26X2
327 
336 #define OAD_EXTFL_ID_VAL {'O', 'A', 'D', ' ', 'N', 'V', 'M', '1'}
337 
338 
347 #define CRC_OFFSET offsetof(imgHdr_t, fixedHdr.crc32)
348 
352 #define BIM_VER_OFFSET offsetof(imgHdr_t, fixedHdr.bimVer)
353 
358 #define IMG_DATA_OFFSET BIM_VER_OFFSET
359 
363 #define IMG_INFO_OFFSET offsetof(imgHdr_t, fixedHdr.imgCpStat)
364 
368 #define IMG_COPY_STAT_OFFSET IMG_INFO_OFFSET
369 
373 #define CRC_STAT_OFFSET offsetof(imgHdr_t, fixedHdr.crcStat)
374 
378 #define IMG_TYPE_OFFSET offsetof(imgHdr_t, fixedHdr.imgType)
379 
383 #define IMG_VALIDATION_OFFSET offsetof(imgHdr_t, fixedHdr.imgVld)
384 
388 #define IMG_COMMIT_FLAG_OFFSET offsetof(imgHdr_t, fixedHdr.commitFlag)
389 
393 #define BOUNDARY_SEG_OFFSET offsetof(imgHdr_t, fixedHdr.segTypeBd)
394 
398 #define SEG_LEN_OFFSET 4
399 
405 #define SEG_SIGERINFO_OFFSET offsetof(imgHdr_t, secInfoSeg.secSignerInfo)
406 
410 #define SEG_SIGNR_OFFSET offsetof(imgHdr_t, secInfoSeg.eccSign.sign_r)
411 
415 #define SEG_SIGNS_OFFSET offsetof(imgHdr_t, secInfoSeg.eccSign.sign_s)
416 
420 #define SEC_VERIF_STAT_OFFSET offsetof(imgHdr_t, secInfoSeg.verifStat)
421 
425 #define HDR_LEN_WITH_SECURITY_INFO offsetof(imgHdr_t, secInfoSeg.segTypeSecure) + sizeof(securityInfoSeg_t)
426 
430 #define IMG_START_ADDR_OFFSET offsetof(imgHdr_t, imgPayload.startAddr)
431 
442 #define SEG_HDR_LEN 12
443 
448 #define OAD_IMG_ID_LEN 8
449 
453 #define OAD_SW_VER_LEN 4
454 
458 #define OAD_IMG_HDR_LEN sizeof(imgFixedHdr_t)
459 
471 #define IMG_BOUNDARY_SEG_ID 0x00
472 
476 #define IMG_PAYLOAD_SEG_ID 0x01
477 
478 
482 #define IMG_NONCOUNT_SEG_ID 0x02
483 
487 #define IMG_SECURITY_SEG_ID 0x03
488 
492 #define OAD_IMG_FULL_HDR_LEN sizeof(imgHdr_t)
493 #define OAD_IMG_ID_LEN 8
494 #define OAD_SW_VER_LEN 4
495 
496 #ifndef STACK_LIBRARY
497  #define BOUNDARY_SEG_LEN 0x18
498 #endif
499 #define SECURITY_SEG_LEN 0x55
500 
501 #define IMG_COPY_STAT_OFFSET IMG_INFO_OFFSET /* Image copy status */
502 
503 #define SEG_LEN_OFFSET 4 /* Offset from seg header to seg len */
504 #define SIG_OFFSET offsetof(securityInfoSeg_t, eccSign.sign_r)
505 
506 #define ECDSA_KEY_LEN 32
507 
508 #define ECDSA_SHA_TEMPWORKZONE_LEN ECDSA_KEY_LEN*6
509 
510 
515 #define BIM_VER 0x3
516 
522 #define META_VER 0x1
523 
529 #define SECURITY_VER 0x1
530 
534 #define DEFAULT_STATE 0xFF
535 
540 #define CRC_VALID 0xFE
541 
546 #define CRC_INVALID 0xFC
547 
551 #define NEED_COPY 0xFE
552 
556 #define COPY_DONE 0xFC
557 
558 #ifdef BIM_DUAL_ONCHIP_IMAGE
559 
563 #define VERIFY_PASS_CURRENT 0xFE
564 
569 #define VERIFY_PASS_NOT_CURRENT 0xFC
570 
575 #define VERIFY_FAIL 0xF8
576 
577 #else
578 
582 #define VERIFY_FAIL 0xFC
583 
584 #endif // BIM_DUAL_ONCHIP_IMAGE
585 
589 #define VERIFY_PASS 0xFE
590 
591 #ifdef BIM_RESTRICTED_ROLLBACK_VERIFY_COMMIT_IMAGE
592 
596 #define COMMIT_PENDING 0XFF
597 
602 #define COMMIT_ACCEPTED 0XFE
603 
608 #define COMMIT_REJECTED 0XEF
609 
610 #endif
611 
615 #define EFL_MATADATA_HDR_LEN OAD_IMG_HDR_LEN + 8
616 
620 #define INVALID_ADDR 0xFFFFFFFF
621 
625 #define INVALID_LEN INVALID_ADDR
626 
630 #define DEFAULT_CRC 0xFFFFFFFF
631 
632 #if (defined(SECURITY))
633 
636  #define SIGNER_INFO_SIZE 8
637 
641  #define SIGNATURE_SIZE 64
642 #endif
643 
644 /*******************************************************************************
645  * Typedefs
646  */
647 
649 #if defined (__IAR_SYSTEMS_ICC__)
650  #define TYPEDEF_STRUCT_PACKED __packed typedef struct
651 #elif defined __TI_COMPILER_VERSION || defined __TI_COMPILER_VERSION__ || __clang__
652  #define TYPEDEF_STRUCT_PACKED typedef struct __attribute__((packed))
653 #elif defined (__GNUC__)
654  #define TYPEDEF_STRUCT_PACKED typedef struct __attribute__((__packed__))
655 #endif
656 
658 #if (defined(SECURITY))
659 
662  TYPEDEF_STRUCT_PACKED
663  {
664  uint8_t signerInfo[SIGNER_INFO_SIZE];
665  uint8_t signature[SIGNATURE_SIZE];
666  }signPld_ECDSA_P256_t;
667 #endif
668 
673 TYPEDEF_STRUCT_PACKED
674 {
675  uint8_t imgID[8];
676  uint32_t crc32;
677  uint8_t bimVer;
678  uint8_t metaVer;
679  uint16_t techType;
680  uint8_t imgCpStat;
681  uint8_t crcStat;
682  uint8_t imgType;
683  uint8_t imgNo;
684  uint32_t imgVld;
685  uint32_t len;
686  uint32_t prgEntry;
687 #ifdef BIM_VERIFY_VERSION_IMAGE
688  uint32_t softVer;
689 #else
690  uint8_t softVer[4];
691 #endif
692  uint32_t imgEndAddr;
693  uint16_t hdrLen;
694 #ifdef BIM_RESTRICTED_ROLLBACK_VERIFY_COMMIT_IMAGE
695  uint8_t commitFlag;
696  uint8_t rfu;
697 #else
698  uint16_t rfu;
699 #endif
701 
708 TYPEDEF_STRUCT_PACKED
709 {
710  uint8_t segTypeImg;
711  uint16_t wirelessTech;
712  uint8_t rfu;
713  uint32_t imgSegLen;
714  uint32_t startAddr;
716 
726 TYPEDEF_STRUCT_PACKED
727 {
728  uint8_t segTypeBd;
729  uint16_t wirelessTech;
730  uint8_t rfu;
731  uint32_t boundarySegLen;
732  uint32_t stackStartAddr;
733  uint32_t stackEntryAddr;
734  uint32_t ram0StartAddr;
735  uint32_t ram0EndAddr;
737 
738 
740 typedef struct {
741  uint8_t sign_r[32];
742  uint8_t sign_s[32];
744 
751 TYPEDEF_STRUCT_PACKED
752 {
753  uint8_t segTypeSecure;
754  uint16_t wirelessTech;
755  uint8_t verifStat;
756  uint32_t secSegLen;
757  uint8_t secVer;
758  uint32_t secTimestamp;
759  uint8_t secSignerInfo[8];
762 
771 TYPEDEF_STRUCT_PACKED
772 {
774 #if (defined(SECURITY))
775  securityInfoSeg_t secInfoSeg;
776 #endif
777 #if (!defined(STACK_LIBRARY) && (defined(SPLIT_APP_STACK_IMAGE)))
778  boundarySeg_t boundarySeg;
779 #endif
781 } imgHdr_t;
782 
783 TYPEDEF_STRUCT_PACKED
784 {
785  uint32_t *eccWorkzone;
786  uint8_t *SHAWorkzone;
787  uint8_t *tempWorkzone;
788  uint8_t *SHADataBuf;
789  uint8_t SHADataBufLen;
790 } ecdsaSigVerifyBuf_t;
791 
796 /*******************************************************************************
797  * Typedefs
798  */
799 
805 typedef uint8_t (*bimSignFnPtr_t)(uint8_t, uint32_t, uint32_t, uint8_t *,
806  uint8_t *, ecdsaSigVerifyBuf_t *);
807 
808 #ifdef __cplusplus
809 }
810 #endif
811 
812 #endif /* OAD_IMAGE_HEADER_H */
uint32_t _sign_fnPtr
Variable for Pointer to BIM Function.
uint16_t hdrLen
Total length of the image header.
Definition: oad_image_header.h:693
uint32_t imgVld
Image validation bytes, used by BIM.
Definition: oad_image_header.h:684
uint16_t techType
Wireless protocol type BLE/TI-MAC/ZIGBEE etc.
Definition: oad_image_header.h:679
uint8_t segTypeSecure
Segment type - for Secuirty info payload.
Definition: oad_image_header.h:753
uint32_t ram0StartAddr
RAM entry start address.
Definition: oad_image_header.h:734
uint32_t startAddr
Start address of image on internal flash.
Definition: oad_image_header.h:714
uint32_t prgEntry
Program entry address.
Definition: oad_image_header.h:686
uint16_t wirelessTech
Wireless technology type.
Definition: oad_image_header.h:711
uint32_t crc32
Image&#39;s 32-bit CRC value.
Definition: oad_image_header.h:676
uint32_t ram0EndAddr
RAM entry end address.
Definition: oad_image_header.h:735
uint16_t rfu
Reserved bytes.
Definition: oad_image_header.h:698
uint8_t metaVer
Metadata version.
Definition: oad_image_header.h:678
uint8_t imgNo
Image number of &#39;image type&#39;.
Definition: oad_image_header.h:683
uint16_t wirelessTech
Wireless technology type.
Definition: oad_image_header.h:729
uint8_t segTypeBd
Segment type - for boundary segment.
Definition: oad_image_header.h:728
uint32_t len
Image length in bytes.
Definition: oad_image_header.h:685
uint32_t boundarySegLen
Boundary segment length.
Definition: oad_image_header.h:731
uint8_t bimVer
BIM version.
Definition: oad_image_header.h:677
uint8_t secVer
Security version */.
Definition: oad_image_header.h:757
uint32_t stackStartAddr
Start address of stack image on internal flash.
Definition: oad_image_header.h:732
uint8_t crcStat
CRC status.
Definition: oad_image_header.h:681
uint8_t segTypeImg
Segment type - for Contiguous image payload.
Definition: oad_image_header.h:710
eccSignature_t eccSign
Security signature */.
Definition: oad_image_header.h:760
uint32_t stackEntryAddr
Stack start address.
Definition: oad_image_header.h:733
uint8_t imgType
Image Type.
Definition: oad_image_header.h:682
Definition: oad_image_header.h:726
imgPayloadSeg_t imgPayload
Required contiguous image segment.
Definition: oad_image_header.h:780
imgFixedHdr_t fixedHdr
Required core image header.
Definition: oad_image_header.h:773
uint32_t imgSegLen
Payload segment length.
Definition: oad_image_header.h:713
uint8_t imgCpStat
Image copy status.
Definition: oad_image_header.h:680
Definition: oad_image_header.h:740
Definition: oad_image_header.h:771
uint32_t secTimestamp
Security timestamp */.
Definition: oad_image_header.h:758
Definition: oad_image_header.h:673
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:805
Definition: oad_image_header.h:751
uint32_t secSegLen
Payload segment length.
Definition: oad_image_header.h:756
uint32_t imgEndAddr
Address of the last byte of a contiguous image.
Definition: oad_image_header.h:692
uint16_t wirelessTech
Wireless technology type.
Definition: oad_image_header.h:754
uint8_t verifStat
Verification status.
Definition: oad_image_header.h:755
uint8_t rfu
Reserved byte.
Definition: oad_image_header.h:730
uint8_t rfu
Reserved byte.
Definition: oad_image_header.h:712
Definition: oad_image_header.h:708
© Copyright 1995-2024, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale