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.?
Solved! Go to Solution.
Hi, Andras
There is a register in Kinetis for chip identification, called SIM_SDID.
Hope my reply can help you.
Best Regards
Paul
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 */
Hi, Andras
There is a register in Kinetis for chip identification, called SIM_SDID.
Hope my reply can help you.
Best Regards
Paul