Recognize AT32 MCU内核版本、MCU厂商及型号的识别

hoopzhao 2020-09-20 01:29:48
Recognize AT32 MCU


前言
本应用笔记介绍了在AT32微控制器上如何实现当前使用内核版本、MCU厂商及型号的识别。

支持型号列表:
支持型号 AT32F403xx
AT32F413xx
AT32F415xx
AT32F403Axx
AT32F407xx

目录
1 功能实现...............5
1.1 识别内核版本......5
1.2 识别MCU厂商....5
2 功能演示...............9
3 版本历史.............10

1 功能实现
1.1 识别内核版本
所有的MCU内部都包含一颗内核(CPU),数据处理等操作都由它来完成。各MCU厂商在设计MCU的时候会根据使用场景等不同来选择不同的内核版本满足需求。该部分就是提供一种方法自动识别MCU的内核版本。
通常本应用设计到的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
AT32 MCU内部包含PID和UID编码。UID总共为96bit,基地址为0x1FFFF7E8。这里只需要最高地址的一个Byte的数据,则地址为0x1FFFF7F3,该地址中的内容可以识别AT32系列MCU为403系列还是413系列。得到UID后还需要获取PID以得到MCU的其他信息(例如封装、内部FLASH大小,SRAM大小等)从而达到区分的情况,PID的基地址为0xE0042000。本指南配套的程序中将获取到的信息组装成一个64bit的数据,它可以区分出是AT32系列下的哪一种型号,但是程序中只是判断是否为AT32的MCU系列,并没有做其它的细分判断。
AT32系列MCU的PID/UID以及型号的对照表如下所示:
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

配套程序通过对表2进行遍历查找,判断当前MCU是否为AT32系列。
注:表格2中所列为AT32系列MCU的F403、F413、F415、F403A和F407,若需支持更多型号的MCU,添加到程序内的数组表中即可。

识别SXX32 MCU
配套程序支持对SXX32系列MCU的简易识别,通过读取SXX32 MCU的PID便可识别是否为SXX32系列的MCU。配套程序支持对SXX32系列MCU的SXX32F1XXX和SXX32F4XXX系列的识别。
SXX32 MCU识别码如下所示:
PID SXX32 MCU 系列
0x412/0x410/0x414/0x418 SXXF10XXX
0x413 SXX32F405XX/407XX/415XX/417XX
0x419 SXX32F42XXX/SXX32F43XXX

配套程序只支持对SXX32的简易识别,并且SXX32编码方式与AT32不同,但是其PID的存放地址是与AT32是相同的。程序中对表3进行遍历查找,如果找到则返回。
注:本应用指南主要为识别AT32系列MCU,若需对更多SXX32或其他MCU厂商的MCU识别支持,自行添加即可。
2 功能演示
AT32 MCU被识别实验:
步骤:①下载程序到AT32 MCU中并运行;②查看打印值,如图1;
图1. 识别AT32F403A MCU实验

从打印结果可知目前程序运行的MCU为AT32系列的MCU且内核版本为Cortex-M4。
AT32 MCU被识别实验:
步骤:①下载程序到AT32 MCU中并运行;②查看打印值,如图2;
图2. 识别AT32F407 MCU实验

从打印结果可知目前程序运行的MCU为AT32系列的MCU且内核版本为Cortex-M4。

工程源码请查看链接路径:https://bbs.21ic.com/icview-2991332-1-1.html
...全文
264 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧