首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
MCU 单片机技术
» 嵌入式系统快速重启的研究
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
嵌入式系统快速重启的研究
发短消息
加为好友
我是MT
当前离线
UID
1023166
帖子
6651
精华
0
积分
3328
阅读权限
90
来自
燕山大学
在线时间
230 小时
注册时间
2013-12-19
最后登录
2016-1-5
论坛元老
UID
1023166
性别
男
来自
燕山大学
1
#
打印
字体大小:
t
T
我是MT
发表于 2015-11-6 20:38
|
只看该作者
嵌入式系统快速重启的研究
flash
,
嵌入式
,
FLASH
,
程序
前言
随着计算机技术的发展,工业技术也跟着迅猛发展起来了,而伴随着
嵌入式
的应用也很变得非常广泛。
ARM芯片为了保证指令运行的实时性,指令没有直接在FLASH里面运行,而是先把flash里面的数据拷贝到读取速度比较快的SDRAM里面,然后运行,这样就提高了运行速度。但是由于程序的固定性,在我们重新启动的时候,会再次拷贝代码。我们知道SDRAM是掉电不保存数据的,但是,如果SDRAM 没有掉电,里面的数据是不会丢失的。而我们重启的时候并没有给芯片断电,而这个时候系统又要重新拷贝一次代码,造成了时间的浪费。
当然在工业上,我们的系统启动起来之后,往往重新启动的可能性较少,这样每次启动浪费的时间也就可以忽略不计了。不过,在我们使用数码相机的时候,要抢拍一个镜头,这个时间可能就是毫秒级的,在每次开机的时候都需要几秒的启动时间,是无法忍耐的。而也不能一直开机,便携式的相机电池的电量太有限了。我们经常的一种解决办法是将系统切换到低功耗模式,而仅仅是低功耗模式还是要浪费电量。而我们想,如果只给SDRAM供电,作为待机模式,每次按下复位键的时候就直接跳到SDRAM中运行,而不必再次复制代码。这就实现了快速启动,电池的供电时间也相应的延长了。
Samsung ARM系列S3C2440处理器简介
在这里所使用的S3C2440处理器是Samsung公司推出的基于ARM920T核的32位RISC微处理器。S3C2440具有低功耗、低成本和高性能的特点,已成为PDA、智能手机、网络计算机终端以及智能设备的终端产品等的热门解决方案之一。
S3C2440内部资源丰富、结构复杂、接口众多,具有相互独立的16kB指令缓存和16kB数据缓存,带有MMU虚拟存储单元和AMBA总线接口。
S3C2440支持的内外围设备包括外部存储控制器、中断控制器、LCD控制器、8通道10bit精度的ADC和触摸屏控制器、SD/MMC卡控制器、4 通道DMA、4通道具有PWM功能的定时器、具有日历功能的实时时钟、看门狗定时器、3通道UART(包含IRDA红外线数据通讯口)、USB主机/设备接口、I2C总线接口、I2S数字音频总线接口、2通道SPI总线接口、通用I/O端口以及具有锁相环功能片上时钟发生器等、同时也可以柑橘需要进行功能扩展从而支持以太网接口、PCMCIA接口及IDE接口等。
S3C2440外部存储器电路图
在这里我们使用FLASH作为程序和数据固化的存储器,使用SDRAM作为系统启动之后, 程序运行的区域。而S3C2440核内部4k的SRAM固定作为最初的启动代码使用,地址是从0x0000_0000开始的。
这里使用nGCS6将SDRAM的地址编址到0x3000_0000位置处,使用ADDR寻址,使用DAT读取和写入需要的数据,使用FCON控制信号控制SDRAM的状态。
使用FCON控制FLASH的状态,根据DATA按照时序送入数据和命令,做相应的处理。
这三部分就构成了ARM运行的最小系统。
嵌入式
系统启动流程
① 上电,复位完成;②
嵌入式
ARM核自动把flash里面最低的4k启动代码复制到SRAM里面,并从SRAM的0x0000_0000地址开始执行;③ 完成一些必要的初始化工作,将FLASH中的代码拷贝到SDRAM中;④ 跳转到SDRAM中运行;通过以上步骤,就进入了我们的应用程序,或者是操作系统。
在我们需要复位的时候, 即nRESET管脚出现一个向下的脉冲,即出现复位。当nRESET信号为低电平时,ARM处理器放弃任何指令的执行,并从增加的字地址处取指令;当 nRESET信号变为高电平时,ARM处理器进行如下操作:1.将当前的PC值和CPSR值写入R14_svc和SPSR_svc,已经保存的PC和 SPSR的值是未知的;2.强制M[4:0]为10011(超级用户模式),将CPSR中的“I”和“F”位设为1,并将T位清零;3.强制PC从 0x00地址取下一条指令。4.恢复为ARM状态开始执行。即程序会跳到0x0000_0000这个地址位置,开始执行上面所述的第三步和第四步。
我们知道从flash里面读取数据比起SDRAM是想当慢的,而这里又要进行一次代码的拷贝工作,这也是一个相当长的时间。不过这个时候我们可以发现,我们并没有断电,SDRAM里面放的数据还是我们代码,我们没有必要重新拷贝这些代码了,在下次启动的时候,只需直接跳转到SDRAM中运行,做一些初始化工作就可以了。这样重新启动速度就相当迅速了。
快速重启思想
核心思想:在Bootloader里面,程序执行到复制程序的一块,可以判断PC当前计数在哪个存储器里面,如果在SRAM中,就把代码复制到SDRAM里面,如果在SDRAM中,就直接跳过复制程序这一段,然后继续执行。
根据上面这个思想, 可以先将地址为0x0000_0000这里的跳转指令直接改成跳转到SDRAM存储器,如LDR PC,=0x3000_0000。
这样在Reset的时候,我们就可以直接从0x0000_0000地址跳到0x3000_0000开始运行。这样我们就达到了快速启动的目的。
如图2 所示, 在系统加电的时候,程序从地址为 0x0000_0000开始的SRAM处运行,如上图1所示。
然后,程序在SRAM中将代码自身复制到地址为0x3000_0000开始处,如图2中2所示。
在将代码复制完之后将地址为0x0000_0000处的复位中断跳转矢量改为跳转到0x3000_0000,如图2中3所示。
然后程序跳转到SDRAM中,地址为相对于0x3000_0000的一个偏移量,这个偏移量为当前地址距0x0000_0000的偏移量,如图2中4所示。
在图2中5中,如果用户使用了Reset按键,重新启动系统,我们就可以从地址为0x0000_00000处直接跳转到0x3000_0000这个位置,开始进行硬件初始化等工作,这次就不会有代码拷贝的过程了。
快速重启软件流程
下面是系统自开机开始, 程序修改复位跳转指令的流程图,在修改0x0000_0000处的跳转指令可用如下数据替代:
使用LDR PC, =0x3000_0000指令,反汇编后得到的32位指令数据是0xE3A0_F5C0,将其放到0x0000_0000处即可。
而修改0x0000_0000处的数据,可用如下指令:
程序经过以上配置,就可以实现系统的快速重启。
结论
系统的快速重启,应用将非常广泛。即使是
嵌入式
系统慢慢的也将变得很复杂,系统所占的空间也在慢慢的变大,这样一个复制过程将严重影响很多设备的使用,最简单的就是数码相机了。
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议