目录
功能实现 ................................... 5
识别内核版本 ............................ 5
识别 MCU 厂商 .......................... 5
功能演示 ................................... 9
版本历史 ...................................10
功能实现
识别内核版
本所有的MCU内部都包含一颗内核(CPU),数据处理等操作都由它来完成。各MCU厂商在设计MCU的时候会根据使用场景等不同来选择不同的内核版本满足需求。该部分就是提供一种方法自动识别MCU的内核版本。
通常本应用设计到的MCU使用的内核情况如表一所示:
表1 MCU 使用的内核情况
内核的系统控制块(SCB)中存在一个名为CPU ID基本寄存器的寄存器,它是只读的,其中包括处理器类型和版本号,即为表1所示的CPU ID(内核版本号)。该寄存器的地址为0XE000ED00(只支持特权访问),在程序中,可以利用SCB->CPUID访问该寄存器,也可通过绝对地址访问,如*(uint32_t *)0xE000ED00。本指南的配套程序就是通过这种方式获取到内核版本号并判断出MCU所使用的内核版本。
注:如需增加其他内核版本的识别,自行添加即可。
识别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以及型号的对照表详见附录文档中的表2
....................................................................................
....................................................................................
配套程序通过对表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识别码如表三所示:
表3 SXX 32 MCU 型号表
配套程序只支持对SXX32的简易识别,并且SXX32编码方式与AT32不同,但是其PID的存放地址是与AT32是相同的。程序中对表3进行遍历查找,如果找到则返回。
注:本应用指南主要为识别AT32系列MCU,若需对更多SXX32或其他MCU厂商的MCU识别支持,自行添加即可。
功能演示
AT32 MCU被识别实验:
步骤:①下载程序到AT32 MCU中并运行;②查看打印值,如图1;
图1 识别 AT32 F403A MCU 实验
从打印结果可知目前程序运行的MCU为AT32系列的MCU且内核版本为Cortex-M4。
AT32 MCU被识别实验:
步骤:①下载程序到AT32 MCU中并运行;②查看打印值,如图2;
图 2 识别 AT 32 F407 MCU 实验
从打印结果可知目前程序运行的MCU为AT32系列的MCU且内核版本为Cortex-M4。