续:
接着总结:

二、C51、STM32和S3C2440的存储设备

  对于C51来说,就像上一篇说到的一样。基本的情况是:其内部有RAM、ROM还可以扩展外部的RAM和ROM。但是还不止这些C51芯片还是设计的挺复杂的。对STC90C51系列单片机内部还一定空间的的E2PROM(2K左右),可以保存一些需要在应用过程中修改并且掉电不丢失的参数数据。这种机制是使用IAP技术实现的。
  对于STM32来说,其内部含有SRAM和一定容量的FLASH。还可以外接SRAM和Flash等等。
  对于S3C2440来说,其内部含有4K的SRAM,又叫做stepingstone。当然,其可以外接SDRAM、NorFlashNandFlash。

三、C51、STM32和S3C2440启动方式①

  对于C51来说,上电一复位之后CPU就从0地址处开始执行程序,(这里的0地址指的是内部ROM的地址),然后,一般情况下启动程序(就是start.s,一般由编译器添加)把程序变量复制到SRAM中,开始执行程序。
  对于STM32来说,其启动方式可以由BOOT引脚进行设置。总共有三种方式,如下图所示:
STM32启动方式
  对于内部Flash启动,一般情况下,也是由启动程序(start.S)将数据部分复制到SRAM中,代码部分保存在Flash中, 然后开始执行程序。
  对于内部SRAM启动,这里主要是调试模式,一般通过仿真器下载到SRAM中,进行调试。毕竟,SRAM掉电后,里面啥都没了。
  对于系统存储器::里面存的是 ST出厂时烧 写 好 的 isp 自 举 程 序 ( Bootloader),用户无法改动。串口下载的时候需要用到这部分程序。

  对于S3C2440来说,其主要有以下两种启动方式:
S3C2440启动方式

  对于从NorFlash启动,由于NorFLash可以直接在片上运行,所以可以直接从NorFlash启动即程序直接下载到NorFlash中。当然这里一般会把程序运行的数据部分拷贝到SRAM或者SDRAM中;也可以把全部的程序拷贝到SDRAM中,然后跳到SDRAM中继续执行。

  对于从NandFlash启动,本质上还是从SRAM中启动。(NandFlash不具有片上直接运行的功能)因为系统在NandFlash启动时,会自动从NandFlash中复制前4字节的内容进入系统内部的SRAM中,然后从SRAM中执行程序。这前面的4KB(注意只有4KB),一般来说,需要把整个程序复制到SDRAM中,然后跳到SDRAM中执行。

注释:①问你一个问题:一般来说,单片机程序从哪开始执行?
啊,从main函数开始执行。哈哈,那你只能算是单片机将将入门。
嗯,从下载到ROM中的第一条指令开始执行。嘿嘿,入门许久了。
哦,从厂家固化的程序开始执行。 哎呦,你很棒哦。

  一般来说,复位之后,程序开始执行党的第一条指令都是厂家固化在芯片内部存储区的一段代码。根据不同的功能,这代码有不同的名字。C51和STM32叫做ISP检测程序,主要用来下载程序之用。S3C2440叫做RBL(ROM boot loader),它是SOC上电后开始运行的地方,它会判断是哪种启动方式,如果是nand启动,就会从nand的起始地址处读取UBL(user boot loader)并且复制到ARM的内存里面,也就是上面说的片内SRAM。(以前我一直以为是硬件自动加载的,原来还是软件部分加载的UBL)

四、其他

  首先,说说中断向量表。
  一般来说,中断向量表都是固定的地址,当发生固定的中断之后,就会跳到对应的向量地址执行程序。(这个地址作用相当于一个占位符,它会跳转到具体的中断程序中)。C51和S3C2440都是这种情况。而STM32基于的Cortex-M3中有一个向量偏移寄存器,可以把向量表转移到其他地址,这样更加灵活。

  然后,说说编译过程中,链接的顺序。
  一般来说,链接的顺序(可以说是链接脚本的书写)决定了不同代码段在映像文件中的位置,也决定了下载到Flash存储器中的前后位置。一般来说,这个前后位置没有太大的影响。但是对于S3C2440NandFlash这种启动方式来说就需要注意一下。
具体来说,如果程序过大,超过了4K大小,就需要使用NandFlash的启动方式。在Start.S启动文件中需要进行文件的重定位,简单来说需要把NandFlash中的全部程序代码拷贝到SDRAM中。而这段进行拷贝的代码则必须位于4K之内(而且必须是位置无关码,具体原因请自行百度),因为系统只有这样才能把这段进行拷贝的代码复制到SRAM中,从SRAM中执行。如果链接时把这段代码的加载地址放在了4K之外,那就没法执行了,整个程序也就运行不了了。

  最后再来说说存储E2PROM、NandFlash和NorFlash。
  E2PROM,即电可擦除只读存储器,其具有较高的可靠性,可以保存100年,可以擦除100w次,但是电路复杂,成本也高,所以容量相对较小(目前的EEPROM都是几十千字节到几百千字节的,绝少有超过512K的。),是比较传统的一种ROM,现在常被用来作为存储诸如实时时钟,数字电位计,数字温度传感器等可能需要少量空间来校准信息或在断电时需要保存的其他数据。
  Flash包括NandFlash和NorFlash,它们从广义上讲也属于EEPROM,因为它也是电擦除的rom。但是为了区别于一般的按字节为单位的擦写的EEPROM,我们都叫它flash。flash做的改进就是擦除时不再以字节为单位,而是以块为单位,一次简化了电路,数据密度更高,降低了成本。上M的rom一般都是flash。
  对于NorFlash,它的数据线和地址线分开,可以实现ram一样的随机寻址功能,可以读取任何一个字节,但是擦除仍要按块来擦。其容量也较小,大都是2~12M。
  nand flash同样是按块擦除,但是数据线和地址线复用,不能利用地址线随机寻址。读取只能按页来读取。它内部电路更简单,因此数据密度大,体积小,成本也低。因此大容量的flash都是nand型的。
  需要注意一点的是对于Flash来说,由于其电气特性,会出现一定位反转和的坏块(NorFlash的出错的概率要远小于NandFLash),需要由额外的措施(ECC等)来检测和纠正。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐