CC26xx Driver Library
chipinfo.c
Go to the documentation of this file.
1 /******************************************************************************
2 * Filename: chipinfo.c
3 * Revised: 2015-10-28 11:48:13 +0100 (Wed, 28 Oct 2015)
4 * Revision: 44860
5 *
6 * Description: Collection of functions returning chip information.
7 *
8 * Copyright (c) 2015, Texas Instruments Incorporated
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions are met:
13 *
14 * 1) Redistributions of source code must retain the above copyright notice,
15 * this list of conditions and the following disclaimer.
16 *
17 * 2) Redistributions in binary form must reproduce the above copyright notice,
18 * this list of conditions and the following disclaimer in the documentation
19 * and/or other materials provided with the distribution.
20 *
21 * 3) Neither the name of the ORGANIZATION nor the names of its contributors may
22 * be used to endorse or promote products derived from this software without
23 * specific prior written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
29 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35 * POSSIBILITY OF SUCH DAMAGE.
36 *
37 ******************************************************************************/
38 
39 #include <driverlib/chipinfo.h>
40 
41 //*****************************************************************************
42 //
43 // Internal macros
44 //
45 //*****************************************************************************
46 
47 #define BV( x ) ( 1 << ( x ))
48 
49 
50 //*****************************************************************************
51 //
52 // ChipInfo_GetSupportedProtocol_BV()
53 //
54 //*****************************************************************************
57 {
58  return ((ProtocolBitVector_t)( HWREG( PRCM_BASE + 0x1D4 ) & 0x0E ));
59 }
60 
61 
62 //*****************************************************************************
63 //
64 // ChipInfo_GetPackageType()
65 //
66 //*****************************************************************************
69 {
70  PackageType_t packType = (PackageType_t)((
71  HWREG( FCFG1_BASE + FCFG1_O_USER_ID ) &
74 
75  if (( packType < PACKAGE_4x4 ) ||
76  ( packType > PACKAGE_7x7 ) )
77  {
78  packType = PACKAGE_Unknown;
79  }
80 
81  return ( packType );
82 }
83 
84 
85 //*****************************************************************************
86 //
87 // ChipInfo_GetChipFamily()
88 //
89 //*****************************************************************************
92 {
93  ChipFamily_t chipFam = FAMILY_Unknown ;
94  uint32_t waferId ;
95 
96  waferId = (( HWREG( FCFG1_BASE + FCFG1_O_ICEPICK_DEVICE_ID ) &
99 
100  if ( waferId == 0xB99A ) chipFam = FAMILY_CC26xx ;
101  else if ( waferId == 0xB9BE ) chipFam = FAMILY_CC13xx ;
102  else if ( waferId == 0xBB20 ) chipFam = FAMILY_CC26xxLizard ;
103  else if ( waferId == 0xBB41 ) chipFam = FAMILY_CC26xxAgama ;
104 
105  return ( chipFam );
106 }
107 
108 
109 //*****************************************************************************
110 //
111 // ChipInfo_GetHwRevision()
112 //
113 //*****************************************************************************
116 {
117  HwRevision_t hwRev = HWREV_Unknown ;
118  uint32_t fcfg1Rev = ChipInfo_GetDeviceIdHwRevCode() ;
119  uint32_t minorHwRev = ChipInfo_GetMinorHwRev() ;
120 
121  switch( ChipInfo_GetChipFamily() ) {
122  case FAMILY_CC26xx :
123  switch ( fcfg1Rev ) {
124  case 1 : // CC26xx PG1.0
125  hwRev = HWREV_1_0;
126  break;
127  case 3 : // CC26xx PG2.0
128  hwRev = HWREV_2_0;
129  break;
130  case 7 : // CC26xx PG2.1
131  hwRev = HWREV_2_1;
132  break;
133  case 8 : // CC26xx PG2.2 (or later)
134  hwRev = (HwRevision_t)(((uint32_t)HWREV_2_2 ) + minorHwRev );
135  break;
136  }
137  break;
138  case FAMILY_CC13xx :
139  switch ( fcfg1Rev ) {
140  case 0 : // CC13xx PG1.0
141  hwRev = HWREV_1_0;
142  break;
143  case 2 : // CC13xx PG2.0 (or later)
144  hwRev = (HwRevision_t)(((uint32_t)HWREV_2_0 ) + minorHwRev );
145  break;
146  }
147  break;
148  case FAMILY_CC26xxLizard :
149  case FAMILY_CC26xxAgama :
150  switch ( fcfg1Rev ) {
151  case 0 : // CC26xxLizard or CC26xxAgama PG1.0 (or later)
152  hwRev = (HwRevision_t)(((uint32_t)HWREV_1_0 ) + minorHwRev );
153  break;
154  }
155  break;
156  default :
157  // GCC gives warning if not handling all options explicitly in a "switch" on a variable of type "enum"
158  break;
159  }
160 
161  return ( hwRev );
162 }
163 
164 
165 
166 //*****************************************************************************
167 // ThisCodeIsBuiltForCC26xxHwRev22AndLater_HaltIfViolated()
168 //*****************************************************************************
169 void
171 {
172  if (( ! ChipInfo_ChipFamilyIsCC26xx() ) ||
174  {
175  while(1)
176  {
177  //
178  // This driverlib version is for CC26xx PG2.2 and later
179  // Do nothing - stay here forever
180  //
181  }
182  }
183 }
PackageType_t ChipInfo_GetPackageType(void)
Returns package type.
Definition: chipinfo.c:68
static bool ChipInfo_HwRevisionIs_GTEQ_2_2(void)
Returns true if HW revision for this chip is 2.2 or greater.
Definition: chipinfo.h:425
3 means that the chip is a CC26xxAgama family member.
Definition: chipinfo.h:253
HwRevision_t
HW revision enumeration.
Definition: chipinfo.h:327
PackageType_t
Package type enumeration.
Definition: chipinfo.h:143
-1 means that the chip's family member is unknown.
Definition: chipinfo.h:249
-1 means that current chip type is unknown.
Definition: chipinfo.h:144
21 means that the chip's HW revision is 2.1
Definition: chipinfo.h:331
ProtocolBitVector_t ChipInfo_GetSupportedProtocol_BV(void)
Returns bit vector showing supported protocols.
Definition: chipinfo.c:56
void ThisCodeIsBuiltForCC26xxHwRev22AndLater_HaltIfViolated(void)
Verifies that current chip is built for CC26xx HwRev 2.2 or later and never returns if violated...
Definition: chipinfo.c:170
-1 means that the chip's HW revision is unknown.
Definition: chipinfo.h:328
HwRevision_t ChipInfo_GetHwRevision(void)
Returns chip HW revision.
Definition: chipinfo.c:115
20 means that the chip's HW revision is 2.0
Definition: chipinfo.h:330
22 means that the chip's HW revision is 2.2
Definition: chipinfo.h:332
ChipFamily_t
Chip family enumeration.
Definition: chipinfo.h:248
static bool ChipInfo_ChipFamilyIsCC26xx(void)
Returns true if this chip is member of the CC26xx family.
Definition: chipinfo.h:275
ProtocolBitVector_t
Enumeration identifying the protocols supported.
Definition: chipinfo.h:77
ChipFamily_t ChipInfo_GetChipFamily(void)
Returns chip family member.
Definition: chipinfo.c:91
1 means that the chip is a CC13xx family member.
Definition: chipinfo.h:251
2 means that the chip is a CC26xxLizard family member.
Definition: chipinfo.h:252
static uint32_t ChipInfo_GetDeviceIdHwRevCode(void)
Returns the internal chip HW revision code.
Definition: chipinfo.h:211
10 means that the chip's HW revision is 1.0
Definition: chipinfo.h:329
0 means that this is a 4x4mm chip.
Definition: chipinfo.h:145
2 means that this is a 7x7mm chip.
Definition: chipinfo.h:147
static uint32_t ChipInfo_GetMinorHwRev(void)
Returns minor hardware revision number.
Definition: chipinfo.h:229
0 means that the chip is a CC26xx family member.
Definition: chipinfo.h:250