硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4285|回复: 2
收起左侧

[技术讨论] Recognize AT32 MCU内核版本、MCU厂商及型号的识别

[复制链接]

38

主题

4

回帖

118

积分

初级会员

积分
118
发表于 2020-9-20 14:00:13 | 显示全部楼层 |阅读模式
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。


AN0016_Recognize_AT32_MCU_V1.0.1.zip

500.86 KB, 下载次数: 13

AN0016_Recognize_AT32_MCU_ZH_V1.0.1.pdf

332.69 KB, 下载次数: 11

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107379
QQ
发表于 2020-9-21 06:33:19 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

0

主题

19

回帖

19

积分

新手上路

积分
19
发表于 2020-10-26 07:50:50 | 显示全部楼层
学习, 涨姿势了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-29 07:24 , Processed in 0.279168 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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