AN0016---如何识别AT32CMU 本应用笔记AN0016介绍了在AT32微控制器上如何实现当前使用内核版本、MCU厂商及型号的识别。 注:本应用笔记对应的代码是基于雅特力提供的V2.x.x 板级支持包(BSP)而开发,对于其他版本BSP,需要注意使用上的区别。 1 功能实现1.1 识别内核版本所有的MCU内部都包含一颗内核(CPU),数据处理等操作都由它来完成。各MCU厂商在设计MCU的时候会根据使用场景等不同来选择不同的内核版本满足需求。本部分就是提供一种方法自动识别MCU的内核版本。 通常本应用涉及到的MCU使用内核情况如表1所示: 表1. MCU使用的内核情况表 内核的系统控制块(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型号表 配套程序通过对表2进行遍历查找,判断当前MCU是否为AT32系列。 注:表格2中所列为AT32系列MCU的F403、F413、F415、F403A、 F407和F421,若需支持更多型号的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)进行简单修改即可。
|