1. ICode 总线
ICode 中的 I 表示 Instruction,即指令。我们写好的程序编译之后都是一条条指令,存
放在 FLASH 中,内核要读取这些指令来执行程序就必须通过 ICode 总线,它几乎每时每刻
都需要被使用,它是专门用来取指的。
2.驱动单元
- DCode 总线
DCode 中的 D 表示 Data,即数据,那说明这条总线是用来取数的。我们在写程序的时
候,数据有常量和变量两种,常量就是固定不变的,用 C 语言中的 const 关键字修饰,是
放到内部的 FLASH 当中的,变量是可变的,不管是全局变量还是局部变量都放在内部的
SRAM。因为数据可以被 Dcode 总线和 DMA 总线访问,所以为了避免访问冲突,在取数
的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。
- 系统总线
系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通
过这根系统总线来完成的。
- DMA 总线
DMA 总线也主要是用来传输数据,这个数据可以是在某个外设的数据寄存器,可以在
SRAM,也可以在内部的 FLASH。因为数据可以被 Dcode 总线和 DMA 总线访问,所以为了
避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。
3.被动单元
- 内部的闪存存储器
内部的闪存存储器即 FLASH,我们编写好的程序就放在这个地方。内核通过 ICode 总
线来取里面的指令。
- 内部的 SRAM
内部的 SRAM,即我们通常说的 RAM,程序的变量,堆栈等的开销都是基于内部的
SRAM。内核通过 DCode 总线来访问它。
- FSMC
FSMC 的英文全称是 Flexible static memory controller,叫灵活的静态的存储器控制器,
是 STM32F10xx 中一个很有特色的外设,通过 FSMC,我们可以扩展内存,如外部的
SRAM, NANDFLASH 和 NORFLASH。但有一点我们要注意的是, FSMC 只能扩展静态的
内存,即名称里面的 S: static,不能是动态的内存,比如 SDRAM 就不能扩展。
区别 | NORFLASH | NANDFLASH |
---|---|---|
接口对比 | 带有通用的 SRAM 接口,可以轻松地挂接在 CPU 的地址、数据总线上,对 CPU 的接口要求低。 | 使用复杂的 I/O 口来串行地存取数据,8个引脚用来传送控制、地址和数据信息。(一般 CPU 最好集成 NAND 控制器) |
容量和成本对比 | NorFlash 容量要小(一些新工艺采用了芯片叠加技术可以把 NorFlash 的容量做得大一些)。NorFlash 相比 NandFlash 价格来说较高。 | NAND 结构可以在给定的模具尺寸内提供更高的容量。 |
可靠性对比 | NorFlash 不存在坏块。 | NAND 器件中的坏块是随机分布的。NAND 器件需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用。在 Flash 的位翻转(一个 bit 位发生翻转)现象上,NAND 的出现几率要比 NorFlash 大得多。这个问题在 Flash 存储关键文件时是致命的,所以在使用 NandFlash 时建议同时使用 EDC/ECC 等校验算法。 |
寿命对比 | NOR 的擦写次数是十万次 | NAND 闪存中每个块的最大擦写次数是一百万次 |
升级对比 | NorFlash 的升级较为麻烦,因为不同容量的 NorFlash 的地址线需求不一样,所以在更换不同容量的 NorFlash 芯片时不方便。通常我们会通过在电路板的地址线上做一些跳接电阻来解决这样的问题,针对不同容量的 NorFlash 。 | NandFlash 的接口是固定的,所以升级简单。 |
读写性能对比 | 写操作:NOR 要求在进行擦除前先要将目标块内所有的位都写为1。擦除 NOR 器件时是以64~128KB的块进行的,执行一个擦除/写入操作的时间约为5s。读操作:NOR 的读速度比 NAND 快。 | 写操作:NAND 器件执行擦除操作是十分简单的。擦除 NAND 器件是以8~32KB的块进行的,执行一个擦除/写入操作最多只需要4ms。 |
文件系统比较 | 如果想在 Flash 上实现读写操作,通常在 NorFlash 上我们会选取 jffs 及 jffs2 文件系统,在 NandFlash 上选用 yaffs 或 yaffs2 文件系统。 | Yaffs2 文件系统支持大页(大于512字节/页)的 NandFlash 存储器。 |
(PS:NorFlash 与 NandFlash 的区别参考:涨知识!NorFlash与NandFlash有什么区别? - 知乎 (zhihu.com) )
- AHB 到 APB 的桥
从 AHB 总线延伸出来的两条 APB2 和 APB1 总线,上面挂载着 STM32 各种各样的特
色外设。我们经常说的 GPIO、串口、 I2C、 SPI 这些外设就挂载在这两条总线上。
摘抄自:
[野火EmbedFire]《STM32库开发实战指南——基于野火霸道开发板》.pdf