(1)按照ARM和JEDEC-106标准,不同的MCU芯片厂家JTAG ID CODE不一样;读取特定地址,使用相关算法计算出一个值,不同的MCU芯片厂家的值不同,由此可以简单判断该芯片为哪个芯片厂家设计
uint16_t Get_JTAG_ID(void)
{
if(*(uint8_t *)(0xE00FFFE8)&0x08)
{
return ((*(uint8_t *)(0xE00FFFD0)&0x0F)<<8)|
((*(uint8_t *)(0xE00FFFE4)&0xFF)>>3)|
((*(uint8_t *)(0xE00FFFE8)&0x07)<<5)+1;
}
return 0;
}
APM32:477
GD32:7A3
Stm32:041
(2)获取芯片chipID
void getChipID(void)
{
uint32_t CpuID[3];
CpuID[0]=*(uint32_t*)(0x1ffff7e8);
CpuID[1]=*(uint32_t*)(0x1ffff7ec);
CpuID[2]=*(uint32_t*)(0x1ffff7f0);
sprintf((char *)chipId,"%d%d%d",CpuID[0],CpuID[1],CpuID[2]);
}