很多同学使用笔记本作为自己的ARM开发和学习的平台,绝大多数笔记本都没有并口,也就是无法使用JTag调试和烧写程序到Nand Flash中,幸好我们还有JLINK,用JLINK烧写U-boot到Nor Flash中很简单,大部分NOR Flash都已经被JLink的软件SEGGER所支持,而新手在学习的时候经常会实验各种各样的命令,最悲剧的莫过于将NAND Flash中原有的bootloader给删除了,这时候开发板上电后由于没有bootloader,硬件没有被初始化,在NAND Flash中的 *** 作系统也就无法被加载,开发板成“砖”了,这时候笔记本又无法利用JTag烧写程序进Nand Flash。起始这些可以利用JLink通过两种方法解决:
一、方法一,利用NOR Flash。
这种方法是利用JLink能够烧写程序到NOR Flash来完成的,首先利用J-FLASH ARM将u-bootbin烧写进NOR Flash(记得烧写到NOR Flash的0x0起始地址处),然后设置开发板从NOR Flash启动,这时候系统进入U-boot命令行模式,这时候打开J-Link commander,输入命令:r 看JLink是否能识别开发板的信息(也就是判断JLink是否连接正常)。
以下是在J-Link commander里的命令,先假设u-bootbin在你电脑的D盘根目录下。
1 speed 12000 //设置TCK为12M,下载程序时会很快
2 loadbin d:\u-bootbin 0x30000000
注意:0x30000000是你想要下载u-bootbin到开发板的内存地址,内存地址根据不同的开发板设定不同,因为本文中使用的是FL2440,片上系统是S3C2440,内存挂载的地址区域是0x30000000~0x33ffffff,我们只需要把u-bootbin下载到这片区域即可,
然后我们在U-boot命令行模式输入NAND Flash擦除和写入命令即可:
nand erase 0 40000
// 擦除从0地址开始的大小为0x40000的Nnad Flash扇区,0x40000是待写入的U-bootbin的大致长度,长度必须为NAND Flash页大小的整数倍,通常会需要比u-bootbin实际长度长。
nand write 30000000 0 40000 // 把前面下载到0x30000000的u-bootbin烧写到Nand去
然后我们再设置开发板从NAND Flash启动即可。
二、方法二,直接通过JLink
假如你的开发板没有NOR Flash或者是你使用的NOR Flash还未被J-FLASH ARM所支持,这时上面的方法你就无法使用了,这时候你需要一个初始化内存SDRAM的程序,这个程序完成的功能也就是配置好SDRAM的寄存器,使它能正常工作,fl2440的内存初始化程序下载地址:“2440initbin”。你还需要准备一个特殊的u-boot_SDRAMbin,它与你要烧写到NAND Flash的u-bootbin有区别,u-boot_SDRAMbin编译时需要在include/configs/开发板配置文件h文件中添加:
#define CONFIG_SKIP_LOWLEVEL_INIT 1 //用来支持uboot在内存中直接运行
添加这个宏定义之后,U-boot就跳过了内存初始化的部分,因为此时我们的内存已经先由“2440initbin“初始化好了,再次初始化会出现内存数据的丢失。
做好上面的准备工作之后,首先将开发板设为从NAND Flash启动,启动J-Link commander,先假设“u-bootbin”和“2440initbin”在电脑的D盘根目录下。
loadbin d:\2440initbin 0
setpc 0
g
为什么需要把"2440initbin"复制到0x0地址是因为S3C2440有4K的SRAM,它不需要初始化就可以直接执行程序,从NAND Flash启动时,这个SRAM的地址会挂载到0x0~0x1000的地址空间,我们先把"2440initbin"复制到SRAM中运行,执行这部分后S3C2440的SDRAM内存就初始化好了(地址空间0x30000000~0x33ffffff)。也许有人会说为什么不一开始就把u-boot_SDRAMbin放在SRAM中运行啊?SRAM只有4K的大小,而U-boot通常在100~300K,SRAM的空间显然不够,而"2440initbin"的大小只有不到2K,它可以在SRAM中运行。
内存初始化成功后,下载特制的u-boot_SDRAMbin:
h
loadbin e:\u-boot_SDRAMbin 0x33f80000
setpc 0x33f80000
g
请按照以下顺序 *** 作就可以:
一、将压缩文件中的S3C2440_NAND_MYFLX拷贝到MDK软件安装目录下的FLASH目录下就可以了。
二、解压bootloader到一个文件夹中,然后用MDK打开相应的工程文件,自己编译一下,然后点击下载,或者是从菜单选择(Flash->DownLoad)也可以。下载成功后关闭此项目。
三、解压软件测试到一个文件夹中,同样用MDK打开相应的工程文件,也是自己编译一下,然后点击下载,程序就可以工作了。
以后自己写的用户程序,只要修改这个软件测试的工作就可以了。这个测试程序有三种工作模式,一种是完全软件仿真,一种是程序直接写到SDRAM里面运行,另外一种就是普通的写到FLASH里面。
一般我们开发的时候,如果有仿真器的话,选择SDRAM方式,不用写进FLASH里面,直到调试成功再写。
对于用NANDFLASH方式,会在每次仿真的时候自动下载。
注意:!!
一、不允许修改测试程序中的初始化汇编程序前面指令的结构,因为在这些数据里面有些参数引导程序要读取判断,并且要修改。
二、不要采用自己写链接脚本的方式,用默认的就可以了。
三、如果以后程序加大会出现下载失败,那是因为下载设置中对于NAND设置的大小太小了,因为如果设置太大会每次都按照设置擦除一次,有点太慢了。所以我设置的比较小。
嵌入式系统的应用和开发
基于嵌入式系统的具体产品应用是计算机工程史上的里程碑。深入到了各行各业,其已成为高科技领域中必不可少的工具。 我下面为你整理了关于嵌入式系统的应用和开发的文章,希望对你有所帮助。
1嵌入式系统简介
嵌入式系统可以抽象出一个典型的组成模型,其可划分为硬件层、软件层及功能层。
11嵌入式系统定义
嵌入式系统最通用的定义是以应用为中心,以计算机技术为基础,软硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机[1]。
根据IEEE9(国际电气和电子工程师协会)的定义,嵌入式系统也可定义为控制监视或辅助设备机器和车间运行装置。
嵌入式系统的定义很多,统一起来很难。对于其定义有疑问的部分研究人员将嵌入式系统定义为:“嵌入式系统是以嵌入式微处理器为内核,以微电子技术,计算机技术,电子技术、对象技术为基础,软硬件可根据对象需要所设置,并且嵌入到对象器件内,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用智能化的控制系统。”[2]
12嵌入式系统的特点
嵌入式系统是面向专业应用领域的,从其应用角度分析,具有以下特点:
(1)硬件层,是所有软件的运行基础,嵌入式系统至少拥有一个高性能处理器为硬件平台。如ARM处理器。
(2)软件层,其能扩充和充分发挥硬件层功能。嵌入式系统需有一个多任务 *** 作系统的软件平台,来控制管理计算机硬件和软件资源以及合理的组织计算机工作流程。如Liunx,UC/OSⅡ等 *** 作系统。
(3)嵌入式系统是先进的技术及资金密集、知识产业化不断创新的集成系统。其将先进的电子科学技术与各行各业的具体应用相结合。
(4)是面向用户、产品及特定应用的。
(5)具有较长的生命周期。与实际产品相结合,并与产品升级同步进行。
(6)对程序质量要求较高。一般都将系统中的软件固化在存储器中,大部分都具有较高的实时性。
(7)嵌入式系统不具备在其上进行进一步开发的能力。需要借助专门的开发工具和环境来满足产品设计完成后的程序功能修改工作。
2基于ARM的嵌入式系统技术应用及开发方法
21ARM的技术应用特点
ARM(Advanced RISC Machines)是一种嵌入式微处理器,它具有低功耗、低成本、高性能的特点,采用RISC体系结构,大量使用寄存器,具有高效的指令系统,在实际嵌入式应用中,只保留和嵌入式应用紧密相关的功能硬件,去除其他的冗余功能部分,来实现嵌入式应用的特殊要求[3]。基于ARM微处理器的嵌入式系统不同于单片机、DSP系统,其高性能的特点,在硬件部分的电路板设计方面是比较困难的,绝大多数的ARM板都要在4层以上。其实ARM最关键的是软件部分的 *** 作系统,系统开发应更侧重于软件方面,包括系统裁减,底层驱动和应用程序等。
22ARM嵌入式系统的开发流程
基于ARM的嵌入式系统设计的开发流程如图1所示。
23ARM嵌入式系统的开发方法
(1)建立系统的开发环境
嵌入式系统资源受限制,如果在其硬件平台上直接编写软件,比较困难。因此根据其特点须在特定的开发环境下进行。搭建相应的软硬件平台:在宿主机(HOST)也就是PC机上安装开发工具,并将编写好的软件程序进行交叉编译生成二进制代码,最后将其移植到目标板的特定位置运行。这种在宿主机(HOST)环境下开发,在目标板(TARGET)上运行的开发模式叫交叉开发模式,交叉开发模型如图2所示。
(2)Boot Loader引导程序开发
Boot loader是在嵌入式 *** 作系统内核运行前运行的一段程序,与我们经常提到的BIOS功能相近,每种体系结构都有与其相匹配的Boot Loader。通过Boot loader程序的运行,可以初始化硬件设备,建立系统的内存空间映射图,这样就可以将系统的软、硬件环境设定在一个合适的状态,方便于最终调用 *** 作系统内核,并且为运行用户应用程序准备好正确的环境。
Boot loader程序由汇编和C程序两部分组成,程序执行过程也分为汇编和C程序代码部分两个阶段。汇编程序与硬件设备相关,不便移植,第一阶段需要完成初始化看门狗、设置中断异常向量表、堆栈、配置存储器等,之后再跳转到第二阶段的C语言程序入口处。C程序代码部分主要完成初始化本阶段所需要的外部设备,调用NANDFLASH的API函数,配置SDRAM空间,并将用户的`程序代码从NANDFLASH存储器中复制到SDRAM中,最后再跳转到用户程序的入口[4]。
3嵌入式技术的应用领域
嵌入式技术无处不在,已经深入到了生活的各个领域,为我们的生活带来了很大的方便。
(1)无线通讯领域。特别是智能手机,全球95%的手机采用了ARM芯片,随着手机功能愈像电脑,手机更需要功能强大的嵌入式芯片。现在,全球售出的每一部手机中平均就有24块ARM芯片。
(2)工业控制领域。基于ARM核的32位微控制器芯片逐渐向低端微控制器应用领域扩展,在工业控制领域发挥了很大的作用。
(3)网络应用。网络宽带技术不断发展,基于ARM技术的ADSL芯片也逐步进入竞争范围,并取得一定优势。而且,语音及视频处理也应用了ARM技术,同时对DSP的应用领域提出了新的挑战。
(4)仪器仪表方面。有智能仪器、智能仪表、医疗器械、色谱仪、示波器等。
(5)民用方面。如电子玩具、电子字典、游戏机、录像机、复读机、投影仪、照相机、空调、冰箱、洗衣机、调制解调器、防盗控制器、激光驱动器、变速控制器、汽车点火控制器、避雷控制、农业节水控制系统、保安控制系统等方面。
(6)导航控制方面。如导d控制、航天导航系统、电子干扰系统等。
(7)数据处理方面。如图文图表终端、复印机、硬盘驱动器等。
(8)农业交通方面。智能公路(汽车导航、流量控制、信息监测与汽车服务)、植物工厂(特种植物工厂、无土栽培技术、智能种子工程)、虚拟显示VR机器人、信息家电(家用电器的网络化)等等。
除此以外,众多领域都用到了基于ARM微处理器的嵌入式技术,在生活的各个领域得到了广泛的应用。
;写SDRAM控制器有几个方面要注意:一是初始化,上电之后应该按器件手册说的顺序做一遍,比较重要的是Mode Register的设置,不要设错了;二是刷新,初始化完成之后,每64ms内要将所有行刷一遍;三是各条指令的组合、时序关系,比如读之前需要发Active指令,读完之后要发PRECHARGE指令,如果用Auto PRECHARGE的话,注意与下个指令间的延时,等等。
因为控制器是你自己写的,仿真对不对也依赖于你对器件手册的理解,别人不好判断。你可以再仔细看看看看器件手册,或者去下一个开源的SDRAM控制器核,对比一下。
以上就是关于如何使用jlink烧写s3c2416的nand flash全部的内容,包括:如何使用jlink烧写s3c2416的nand flash、keil uVision MDK4中FLASH.ini和ARM.ini是如何生成的、嵌入式系统的应用和开发等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)