Is there a Kinetis ID register?

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

Is there a Kinetis ID register?

跳至解决方案
1,950 次查看
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 项奖励
回复
1 解答
1,458 次查看
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 项奖励
回复
2 回复数
1,458 次查看
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 项奖励
回复
1,459 次查看
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 项奖励
回复