#每日话题# 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。
|