[应用相关] 如何识别AT32 MCU

[复制链接]
801|1
MCU学习帮 发表于 2025-11-12 11:38 | 显示全部楼层 |阅读模式

AN0016---如何识别AT32CMU
本应用笔记AN0016介绍了在AT32微控制器上如何实现当前使用内核版本、MCU厂商及型号的识别。
注:本应用笔记对应的代码是基于雅特力提供V2.x.x 板级支持包(BSP)而开发,对于其他版本BSP,需要注意使用上的区别。
1                 功能实现1.1           识别内核版本
所有的MCU内部都包含一颗内核(CPU),数据处理等操作都由它来完成。各MCU厂商在设计MCU的时候会根据使用场景等不同来选择不同的内核版本满足需求。本部分就是提供一种方法自动识别MCU的内核版本。
通常本应用涉及到的MCU使用内核情况如表1所示:
表1. MCU使用的内核情况表
  
内核版本
  
CPU ID(内核版本号)
Cortex-M0-r0p0
0x410CC200
Cortex-M0+-r0p0
0x410CC600
Cortex-M1-r0p1
0x410CC210
Cortex-M1-r0p1
0x410CC211
Cortex-M1-r1p0
0x411CC210
Cortex-M3-r0p0
0x410FC230
Cortex-M3-r1p0
0x410FC231
Cortex-M3-r1p1
0x411FC231
Cortex-M3-r2p0
0x412FC230
Cortex-M3-r2p1
0x412FC231
Cortex-M4-r0p0
0x410FC240
Cortex-M4-r0p1
0x410FC241
内核的系统控制块(SCB)中存在一个名为CPU ID基本寄存器的寄存器,它是只读的,其中包括处理器类型和版本号,即为表1所示的CPU ID(内核版本号)。该寄存器的地址为0XE000ED00(只支持特权访问),在程序中,可以利用SCB->CPUID访问该寄存器,也可通过绝对地址访问,如*(uint32_t *)0xE000ED00。本指南的配套程序就是通过这种方式获取到内核版本号并判断出MCU所使用的内核版本。
注:如需增加其他内核版本的识别,自行添加即可。
1.2           识别MCU厂商
AT32 MCU内部包含PID和UID编码。UID总共为96bit,基地址为0x1FFFF7E8。这里只需要最高地址的一个Byte的数据,则地址为0x1FFFF7F3,该地址中的内容可以识别AT32系列MCU为403A系列或其他系列。得到UID后还需要获取PID以得到MCU的其他信息(例如封装、内部FLASH大小,SRAM大小等)从而达到区分的目的,PID的基地址为0xE0042000。本指南配套的程序中将获取到的信息组装成一个64bit的数据,它可以区分出是AT32系列下的哪一种型号,但是程序中只是判断是否为AT32的MCU系列,并没有做其它的细分判断。
AT32系列MCU的PID/UID以及型号的对照表如表2所示:

表2. AT32 MCU型号表
  
UID/PID
  
AT32型号
FLASH大小
封装
0x0000000270050240
AT32F403ZCT6
256KB
LQFP144
0x0000000270050241
AT32F403VCT6
256KB
LQFP100
0x0000000270050242
AT32F403RCT6
256KB
LQFP64
0x0000000270050243
AT32F403CCT6
256KB
LQFP48
0x0000000270050344
AT32F403ZGT6
1024KB
LQFP144
0x0000000270050345
AT32F403VGT6
1024KB
LQFP100
0x0000000270050346
AT32F403RGT6
1024KB
LQFP64
0x0000000270050347
AT32F403CGT6
1024KB
LQFP48
0x00000002700502C8
AT32F403ZET6
512KB
LQFP144
0x00000002700502C9
AT32F403VET6
512KB
LQFP100
0x00000002700502CA
AT32F403RET6
512KB
LQFP64
0x00000002700502CB
AT32F403CET6
512KB
LQFP48
0x000000027005034C
AT32F403CGU6
1024KB
QFN48
0x00000002700502CD
AT32F403CEU6
512KB
QFN48
0x000000027005024E
AT32F403CCU6
256KB
QFN48
0x0000000470030240
AT32F413RCT7
256KB
LQFP64
0x00000004700301C1
AT32F413RBT7
128KB
LQFP64
0x0000000470030242
AT32F413CCT7
256KB
LQFP48
0x00000004700301C3
AT32F413CBT7
128KB
LQFP48
0x0000000470030244
AT32F413KCU7-4
256KB
QFN32
0x00000004700301C5
AT32F413KBU7-4
128KB
QFN32
0x0000000470030106
AT32F413C8T7
64KB
LQFP48
0x0000000470030247
AT32F413CCU7
256KB
QFN48
0x00000004700301C0
AT32F413CBU7
128KB
QFN48
0x0000000570030240
AT32F415RCT7
256KB
LQFP64
0x0000000570030241
AT32F415CCT7
256KB
LQFP48
0x0000000570030242
AT32F415KCU7-4
256KB
QFN32
0x0000000570030243
AT32F415RCT7-7
256KB
LQFP64
0x00000005700301C4
AT32F415RBT7
128KB
LQFP64
0x00000005700301C5
AT32F415CBT7
128KB
LQFP48
0x00000005700301C6
AT32F415KBU7-4
128KB
QFN32
0x00000005700301C7
AT32F415RBT7-7
128KB
LQFP64
0x0000000570030108
AT32F415R8T7
64KB
LQFP64
0x0000000570030109
AT32F415C8T7
64KB
LQFP48
0x000000057003010B
AT32F415R8T7-7
64KB
QFN32
0x000000057003010A
AT32F415K8U7-4
64KB
LQFP64
0x00000005700301CD
AT32F415CBU7
128K
QFN48
0x000000057003024C
AT32F415CCU7
256K
QFN48
0x0000000770050240
AT32F403AVCT7
256KB
LQFP100
0x0000000770050241
AT32F403ARCT7
256KB
LQFP64
0x0000000770050242
AT32F403ACCT7
256KB
LQFP48
0x0000000770050243
AT32F403ACCU7
256KB
QFN48
0x0000000770050344
AT32F403AVGT7
1024KB
LQFP100
0x0000000770050345
AT32F403ARGT7
1024KB
LQFP64
0x0000000770050346
AT32F403ACGT7
1024KB
LQFP48
0x0000000770050347
AT32F403ACGU7
1024KB
QFN48
0x00000007700502CD
AT32F403AVET7
512KB
LQFP100
0x00000007700502CE
AT32F403ARET7
512KB
LQFP64
0x00000007700503CF
AT32F403ACET7
512KB
LQFP48
0x00000007700503D0
AT32F403ACEU7
512KB
QFN48
0x0000000870050249
AT32F407VCT7
256KB
LQFP100
0x000000087005024A
AT32F407RCT7
256KB
LQFP64
0x000000087005034B
AT32F407VGT7
1024KB
LQFP100
0x000000087005034C
AT32F407RGT7
1024KB
LQFP64
0x00000008700502D1
AT32F407VET7
512KB
LQFP100
0x00000008700502D2
AT32F407RET7
512KB
LQFP64
0x0000000950020101
AT32F421K8T7
64KB
LQFP32
0x0000000950020102
AT32F421K8U7
64KB
QFN32
0x0000000950020104
AT32F421F8U7
64KB
QFN20
0x0000000950020105
AT32F421F8P7
64KB
TSSOP20
0x0000000950020087
AT32F421K6T7
32KB
LQFP32
0x0000000950020088
AT32F421K6U7
32KB
QFN32
0x000000095002008A
AT32F421F6U7
32KB
QFN20
0x000000095002008B
AT32F421F6P7
32KB
TSSOP20
0x000000095001000D
AT32F421K4T7
16KB
LQFP32
0x000000095001000E
AT32F421K4U7
16KB
QFN32
0x0000000950010010
AT32F421F4U7
16KB
QFN20
0x0000000950010011
AT32F421F4P7
16KB
TSSOP20
0x0000000950020112
AT32F421G8U7
64KB
QFN28
0x0000000950020093
AT32F421G6U7
32KB
QFN28
0x0000000950010014
AT32F421G4U7
16KB
QFN28
0x0000000950020115
AT32F421PF8P7
64KB
TSSOP20
0x0000000950010016
AT32F421PF4P7
16KB
TSSOP20
配套程序通过对表2进行遍历查找,判断当前MCU是否为AT32系列。
注:表格2中所列为AT32系列MCUF403F413F415F403A F407F421,若需支持更多型号的MCU,添加到程序内的数组表中即可。

注:本应用指南主要为识别AT32系列MCU,若需实现对其他MCU厂商的MCU识别支持,采用类似方法自行添加即可。
2. 功能演示
n  AT32 MCU被识别实验:
下载程序到AT32F403A MCU中并运行,查看串口助手打印信息


从打印结果可知目前程序运行的MCU为AT32F403A的MCU且内核版本为Cortex-M4。
n  AT32 MCU被识别实验:
下载程序到AT32F407 MCU中并运行,查看串口助手打印信息
                                          
从打印结果可知目前程序运行的MCU为AT32F407的MCU且内核版本为Cortex-M4。

注:所有project都是基于AT32F403A而建立,若用户需要在其他型号上使用,请参考AT32xxx_Firmware_Library_V2.x.x\project\at_start_xxx\templates中各种型号示例工程进行简单修改即可。可将此工程内recognize_at32mcu.h/.c文件放到其他工程内即可使用。
注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考
AT32xxx_Firmware_Library_V2.x.x\project\at_start_xxx\templates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。
        

星空魔法师 发表于 2025-11-20 22:21 | 显示全部楼层
表格中的信息很全,可以直接用来对照识别MCU型号
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

18

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部