CC13xx Driver Library
chipinfo.c
Go to the documentation of this file.
1 /******************************************************************************
2 * Filename: chipinfo.c
3 * Revised: 2015-09-17 12:43:04 +0200 (Thu, 17 Sep 2015)
4 * Revision: 44616
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 
104  return ( chipFam );
105 }
106 
107 
108 //*****************************************************************************
109 //
110 // ChipInfo_GetHwRevision()
111 //
112 //*****************************************************************************
115 {
116  HwRevision_t hwRev = HWREV_Unknown ;
117  uint32_t fcfg1Rev = ChipInfo_GetDeviceIdHwRevCode() ;
118  uint32_t minorHwRev = ChipInfo_GetMinorHwRev() ;
119 
120  switch( ChipInfo_GetChipFamily() ) {
121  case FAMILY_CC26xx :
122  switch ( fcfg1Rev ) {
123  case 1 : // CC26xx PG1.0
124  hwRev = HWREV_1_0;
125  break;
126  case 3 : // CC26xx PG2.0
127  hwRev = HWREV_2_0;
128  break;
129  case 7 : // CC26xx PG2.1
130  hwRev = HWREV_2_1;
131  break;
132  case 8 : // CC26xx PG2.2 (or later)
133  hwRev = (HwRevision_t)(((uint32_t)HWREV_2_2 ) + minorHwRev );
134  break;
135  }
136  break;
137  case FAMILY_CC13xx :
138  switch ( fcfg1Rev ) {
139  case 0 : // CC13xx PG1.0
140  hwRev = HWREV_1_0;
141  break;
142  case 2 : // CC13xx PG2.0 (or later)
143  hwRev = (HwRevision_t)(((uint32_t)HWREV_2_0 ) + minorHwRev );
144  break;
145  }
146  break;
147  case FAMILY_CC26xxLizard :
148  switch ( fcfg1Rev ) {
149  case 0 : // CC26xxLizard PG1.0 (or later)
150  hwRev = (HwRevision_t)(((uint32_t)HWREV_1_0 ) + minorHwRev );
151  break;
152  }
153  break;
154  default :
155  // GCC gives warning if not handling all options explicitly in a "switch" on a variable of type "enum"
156  break;
157  }
158 
159  return ( hwRev );
160 }
161 
162 
163 
164 //*****************************************************************************
165 // ThisCodeIsBuiltForCC13xxHwRev20AndLater_HaltIfViolated()
166 //*****************************************************************************
167 void
169 {
170  if (( ! ChipInfo_ChipFamilyIsCC13xx() ) ||
172  {
173  while(1)
174  {
175  //
176  // This driverlib version is for CC13xx PG2.0 and later.
177  // Do nothing - stay here forever
178  //
179  }
180  }
181 }
PackageType_t ChipInfo_GetPackageType(void)
Returns package type.
Definition: chipinfo.c:68
HwRevision_t
HW revision enumeration.
Definition: chipinfo.h:312
PackageType_t
Package type enumeration.
Definition: chipinfo.h:143
static bool ChipInfo_HwRevisionIs_GTEQ_2_0(void)
Returns true if HW revision for this chip is 2.0 or greater.
Definition: chipinfo.h:354
-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:316
ProtocolBitVector_t ChipInfo_GetSupportedProtocol_BV(void)
Returns bit vector showing supported protocols.
Definition: chipinfo.c:56
void ThisCodeIsBuiltForCC13xxHwRev20AndLater_HaltIfViolated(void)
Verifies that curent chip is built for CC13xx HwRev 2.0 or later and never returns if violated...
Definition: chipinfo.c:168
-1 means that the chip's HW revision is unknown.
Definition: chipinfo.h:313
HwRevision_t ChipInfo_GetHwRevision(void)
Returns chip HW revision.
Definition: chipinfo.c:114
static bool ChipInfo_ChipFamilyIsCC13xx(void)
Returns true if this chip is member of the CC13xx family.
Definition: chipinfo.h:288
20 means that the chip's HW revision is 2.0
Definition: chipinfo.h:315
22 means that the chip's HW revision is 2.2
Definition: chipinfo.h:317
ChipFamily_t
Chip family enumeration.
Definition: chipinfo.h:248
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:314
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