发 帖  
原厂入驻New

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

2020-9-20 13:50:15  92 内核版本识别 MCU
分享
本帖最后由 hoopzhao 于 2020-9-20 13:55 编辑

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实验
图5.jpg
从打印结果可知目前程序运行的MCU为AT32系列的MCU且内核版本为Cortex-M4。
AT32 MCU被识别实验:
步骤:①下载程序到AT32 MCU中并运行;②查看打印值,如图2;
图2. 识别AT32F407 MCU实验
图6.jpg
从打印结果可知目前程序运行的MCU为AT32系列的MCU且内核版本为Cortex-M4。
测试使用源码链接路径:https://bbs.21ic.com/icview-2991332-1-1.html

0
分享淘帖 显示全部楼层

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发资料
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表