Is there a Kinetis ID register?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Is there a Kinetis ID register?

Jump to solution
1,242 Views
alipoth
Contributor III

How can the CPU model be identified? I found a generic ARM core identification register here: ARM Information Center

Is there a Freescale-specific ID somewhere, which identifies the particular Kinetis model, maskset, etc.?

0 Kudos
1 Solution
750 Views
Paul_Tian
NXP Employee
NXP Employee

Hi, Andras

There is a register in Kinetis for chip identification, called SIM_SDID.

Hope my reply can help you.

Best Regards

Paul

View solution in original post

0 Kudos
2 Replies
750 Views
bobpaddock
Senior Contributor III

Incomplete snipped of code I use in my bootloader, that shows the registers that tell something about the part:

  data_u32  = (RCM_SRS0 << 24UL);             /* System Reset Status Register 0 */
  data_u32 |= (RCM_SRS1 << 16UL);             /* System Reset Status Register 1 */

  sys_id_adr_u32[ SYS_DEV_ID_RESET ] = data_u32;

  sys_id_adr_u32[ SYS_DEV_ID_SDID  ] = SIM_SDID;  /* System Device Identification Register */

  sys_id_adr_u32[ SYS_DEV_ID_FCFG1 ] = SIM_FCFG1; /* Flash Configuration Register 1 */

  sys_id_adr_u32[ SYS_DEV_ID_FCFG2 ] = SIM_FCFG2; /* Flash Configuration Register 2 */

  sys_id_adr_u32[ SYS_DEV_ID_UIDHM ] = SIM_UIDMH; /* Unique Identification Register Mid-High */

  sys_id_adr_u32[ SYS_DEV_ID_UIDML ] = SIM_UIDML; /* Unique Identification Register Mid Low  */

  sys_id_adr_u32[ SYS_DEV_ID_UIDL  ] = SIM_UIDL;  /* Unique Identification Register Low  */

  sys_id_adr_u32[ SYS_DEV_ID_COMPC ] = SIM_COPC;  /* COP Control Register */

....

  /* 00000002 */

  hex32( ((sys_id_u32[ SYS_DEV_ID_SDID ] & SIM_SDID_FAMID(0x07U))    >>  SIM_SDID_FAMID_SHIFT) );      /* Kinetis family */

  uart0_write_byte( (uint8_t) ' ' );

  /*  00000005 */

  hex32( ((sys_id_u32[ SYS_DEV_ID_SDID ] & SIM_SDID_SUBFAMID(0x07U)) >>  SIM_SDID_SUBFAMID_SHIFT) );   /* Kinetis sub-family */

  uart0_write_byte( (uint8_t) ' ' );

  /*  00000001 */

  hex32( ((sys_id_u32[ SYS_DEV_ID_SDID ] & SIM_SDID_SERIESID(0x07U)) >>  SIM_SDID_SERIESID_SHIFT) );   /* Kinetis Series ID */

  uart0_write_byte( (uint8_t) ' ' );

  /* 00000001 */

  hex32( ((sys_id_u32[ SYS_DEV_ID_SDID ] & SIM_SDID_REVID(0x0F))     >>  SIM_SDID_REVID_SHIFT) );      /* Revision ID */

  uart0_write_byte( (uint8_t) ' ' );

  /* 00000009 */

  hex32( ((sys_id_u32[ SYS_DEV_ID_SDID ] & SIM_SDID_DIEID(0x1F))     >>  SIM_SDID_DIEID_SHIFT) );      /* Die ID */

  uart0_write_byte( (uint8_t) ' ' );

  /* 00000006 */

  hex32( ((sys_id_u32[ SYS_DEV_ID_SDID ] & SIM_SDID_PINID(0x0F))     >>  SIM_SDID_PINID_SHIFT) );      /* Package size */

  uart0_write_byte( (uint8_t) ' ' );

  /* 00000007 */

  uint32_t const fcfg1_pfsize = ((sys_id_u32[ SYS_DEV_ID_FCFG1 ] & SIM_FCFG1_PFSIZE(0x0F))   >> SIM_FCFG1_PFSIZE_SHIFT);    /* P-flash size */

  hex32( fcfg1_pfsize );    /* P-flash size */

  uart0_write_byte( (uint8_t) ' ' );

  pf_size_u32 = (1U << (14U + (fcfg1_pfsize >> 1U))); /* Only valid for $3, $5, $7, $9, $B, $D */

  hex32( pf_size_u32 );

  uart0_write_byte( (uint8_t) ' ' );

  /* 00000010 */

  hex32( ((sys_id_u32[ SYS_DEV_ID_FCFG2 ] & SIM_FCFG2_MAXADDR(0x7F))   >> SIM_FCFG2_MAXADDR_SHIFT) );  /* Max address of flash */

  uart0_write_byte( (uint8_t) ' ' );

  /* 00000005 */

  hex32( ((sys_id_u32[ SYS_DEV_ID_SDID ]  & SIM_SDID_SRAMSIZE(0x07U))  >>  SIM_SDID_SRAMSIZE_SHIFT) ); /* RAM Size */

0 Kudos
751 Views
Paul_Tian
NXP Employee
NXP Employee

Hi, Andras

There is a register in Kinetis for chip identification, called SIM_SDID.

Hope my reply can help you.

Best Regards

Paul

0 Kudos