常见问题

当前位置:主页 > 服务支持 > 常见问题 >

APM32 MCU内部架构

作者: admin 时间:2023-04-01 来源:未知
摘要:MCU主要由内核和片上外设组成,内核由ARM公司设计,片上外设由MCU厂商设计,并生产整个芯片。以APM32F103为例,采用的是Cortex-M3内核,片上外设有:GPIO、USART、I2C、SPI、CAN、USB等。 Co...

MCU主要由内核和片上外设组成,内核由ARM公司设计,片上外设由MCU厂商设计,并生产整个芯片。以APM32F103为例,采用的是Cortex-M3内核,片上外设有:GPIO、USART、I2C、SPI、CAN、USB等。
 
Cortex-M3内核与外设之间是通过各种总线连接,如下图所示,总线接口是基于AHB-Lite和APB协议的。整个架构有4个驱动单元:Corte-M3内核的D-Code总线(D-bus)和系统总线(S-bus),通用DMA1和通用DMA2;也有4个被动单元:内部SRAM、内部闪存存储器、EMMC、AHB到APBx的桥,它连接所有的APB设备。可以把驱动单元理解成是内核部分,被动单元都理解成外设。
 
 
I-Code总线
 
I-Code总线也叫作I-Bus,是用来取指令的,只和指令有关,其中I表示Instruction。I-Code总线是一条基于AHB-Lite总线协议的32位总线,负责在0x0000_0000–0x1FFF_FFFF之间的取指操作。在我们编写好程序之后,经过编译器转化为一条条指令,使用烧录器将这些指令烧写到FLASH里,内核通过I-Code总线来取这些指令,经过译码,最后执行。
 
D-Code总线
 
D-Code总线也叫作D-Bus,是对数据读写访问,只和数据有关,其中D表示Data。D-Code总线也是一条基于AHB-Lite总线协议的32位总线,负责在0x0000_0000–0x1FFF_FFFF(与I-Code相同)之间的数据访问操作。在我们的代码里面,数据可定义为常量和变量两种,常量就是固定不变的,如用const关键字修饰的就是常量,它们被放到FLASH中。变量是可变的,当定义一个变量,就相当于向MCU申请了一个RAM空间,不管是全局变量还是局部变量都放到SRAM中。
 
System总线
 
系统总线也是一条基于AHB-Lite总线协议的32位总线,负责在0x2000_0000–0xDFFF_FFFF和0xE010_0000–0xFFFF_FFFF之间的所有数据访问。
 
DMA总线
 
DMA总线也主要是用来传输数据,在DMA控制器的控制下,可以实现存储器与外设、外设与外设之间直接交换数据,并且是在不通过CPU的情况下,完成内存地址修改,传送完毕的结束报告。这样数据的传送速度就取决于存储器和外设工作速度。
 
内部SRAM
 
芯片内部的SRAM是通常所说的内存,SRAM分为三部分:静态存储区、栈(stack)区和堆(heap)区,内核通过D-Code总线来访问它。
 
内部闪存存储器Flash
 
芯片内部的闪存存储器即FLASH,我们下载程序的地方,内核通过I-Code总线来取里面的指令。
 
EMMC
 
EMMC的英文全称是External memory controller,译为外部存储器控制器,EMMC包括SMC(静态存储控制器)、DMC(动态存储控制器)。SMC负责控制SRAM、PSRAM、NandFlash、NorFlash、PCCard,DMC控制SDRAM。
 
AHB总线
 
AHB的英文全称是Advanced High performance Bus,译为高级高性能总线,主要用于高性能模块(如CPU、DMA和DSP等)之间的连接。
 
APB总线
 
从AHB总线延伸出来的两条APB2和APB1总线是最常见的总线,GPIO、USART、I2C、SPI这些外设就挂载在这两条总线上,这是一条基于APB总线协议的32位总线,此总线来负责0xE004_0000–0xE00F_FFFF之间的私有外设的访问。
 
调试访问端口总线
 
调试访问端口总线接口是一条基于“增强型APB规格”的32位总线,它专用于挂接调试接口,例如SWJ-DP和SW-DP。

[向上]