基于S3C4510B的系统的Flash擦除与烧写问题(一)

2016-01-29 18:34 9 1 收藏

基于S3C4510B的系统的Flash擦除与烧写问题(一),基于S3C4510B的系统的Flash擦除与烧写问题(一)

【 tulaoshi.com - Linux 】

基于S3C4510B的系统的Flash擦除与烧写问题(一) (也是抄的)
最近看到很多朋友在设计基于S3C4510B的系统时,碰到了Flash不能正确烧写或擦除的问题,下面根据我的理解对这个问题的作一个说明,以期抛砖引玉:    不同于其他的ARM处理器(如44B0),S3C4510B的每一个bank的地址都是可以通过重映射改变的,因此,系统的存储器,无论是Flash还是SDRAM,其起始地址都不是固定的,而对Flash的擦除,必须知道它的起始地址,否则就不能正确操作,这就是为什么很多朋友不能正确擦除Flash的原因。    以一般的系统设计为例,Flash使用2M、4M或8M,16位数据宽度,对应到Flash/ROM/SRAM的Bank0,SDRAM采用两片16位宽度的器件,并联构成32位的SDRAM存储器系统,对应到SDRAM的Bank0,那么,在Flash的内容为空时,当系统上电或复位后,能直接访问到的只有特殊功能寄存器(SFR)对应的Bank(其首地址为0x3FF0000),和Flash/ROM/SRAM的Bank0(其首地址为0x0),而SDRAM此时是访问不到的。   此时,如果我们想对Flash进行编程或擦除操作,该怎么办呢?   显然,要对Flash进行编程或擦除操作,必须通过编程完成,而程序此时只能在SDRAM中运行(如果程序不太大,也可放在S3C4510B片内的SRAM中运行。),所以,我们要做的第一步,就是通过配置相应的特殊功能寄存器,将SDRAM映射出来,使其可以被访问到。   下面是我的一个特殊功能寄存器配置文件,名为:mymap.txt,放在C盘根目录下。      setmem 0x3ff0000,0xE7ffff90,32      setmem 0x3ff3010,0x00003002,32        setmem 0x3ff3014,0x02000060,32      setmem 0x3ff302c,0x14010380,32      setmem 0x3ff303c,0xce338360,32   我使用的硬件是2MB的Flash,16MB的SDRAM。在ADS中打开命令窗口,执行如下命令:     >obey c:mymap.txt   此时,2MB的Flash存储器和16MB的SDRAM已分别映射到地址空间的0x0000,0000~(0x0020,0000-1)和0x0040,0000~(0x0140,0000-1)处。   编写一个Flash的擦除程序,由Init.s文件和Main.c文件构成。   Init.s文件的代码如下:          IMPORT MainAREA    Init,CODE,READONLYENTRYBL MainB .END        Main.c文件的代码如下:#define UINT16 unsigned short#define AM_START_ADDR          0x0        //此处为Flash的起始地址,设为0 #define AM_ADDR_UNLOCK1        0x555#define AM_ADDR_UNLOCK2        0x2aa#define AM_DATA_UNLOCK1        0xaaaa#define AM_DATA_UNLOCK2        0x5555#define AM_SETUP_WRITE         0xa0a0#define AM_SETUP_ERASE         0x8080#define AM_CHIP_ERASE          0x1010#define AM_SECTOR_ERASE     0x3030#define AM_RESET     0xf0f0int Main(){         *((volatile UINT16 *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_DATA_UNLOCK1;       *((volatile UINT16 *)AM_START_ADDR+ AM_ADDR_UNLOCK2) = AM_DATA_UNLOCK2;*((volatile UINT16 *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_SETUP_ERASE;          *((volatile UINT16 *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_DATA_UNLOCK1;       *((volatile UINT16 *)AM_START_ADDR+ AM_ADDR_UNLOCK2) = AM_DATA_UNLOCK2;   *((volatile UINT16 *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_CHIP_ERASE;return(0); }注:系统使用的Flash为29LV160B,其他型号的Flash,命令字有一些区别。    系统使用的SDARM为HY57641620B   &

来源:http://www.tulaoshi.com/n/20160129/1506353.html

延伸阅读
标签: ASP
  摘要 网络办公已是现代企业发展的大势所趋。本文主要阐述了基于B/S结构的收发文管理系统的功能模块以及如何使用ASP和SQL Server解决一些相关的技术,其中包括系统的安全性问题。 引言 传统的手工办公方式已经无法满足现代办公的需求,收发文管理系统作为提高工作效率、规范办公制度,增强办公的透明性,实现信息、文档资...
标签: ASP
  标题广告是Web上最常见的广告形式。本文介绍了一个基于IIS和ASP的标题广告管理系统,该系统支持广告客户和广告的管理,能够随机选择广告并生成显示广告的HTML代码(但参考广告的等级、显示次数限制、点击次数限制),并能够记录广告显示、点击的历史纪录。 一、数据库表结构 标题广告也就是Banner Ad,是Web上最常见的...
第一节 接口慨述 接口(interface)用来定义一种程序的协定。实现接口的类或者结构要与接口的定义严格一致。有了这个协定,就可以抛开编程语言的限制(理论上)。接口可以从多个基接口继承,而类或结构可以实现多个接口。接口可以包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口...
//Client
ScreenSaver.cs using System;using System.Windows.Forms; namespace ScreenSaver{ public class DotNETScreenSaver { [STAThread] static void Main(string[] args) { if (args.Length > 0) { if (args[0].ToLower().Trim().Substring(0,2) == "/c") { MessageBox.Show("This Screen Saver has no options you can set."...