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

依然一个人i

依然一个人i

2016-01-29 18:34

基于S3C4510B的系统的Flash擦除与烧写问题(一),基于S3C4510B的系统的Flash擦除与烧写问题(一)
基于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   &
展开更多 50%)
分享

猜你喜欢

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

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
基于S3C4510B的系统的Flash擦除与烧写问题(一)

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

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
基于S3C4510B的系统的Flash擦除与烧写问题(二)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

基于S3c4510b芯片的系统中的地址重映射的实现

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
基于S3c4510b芯片的系统中的地址重映射的实现

基于SQL Server的C/S数据库应用系统

SQLServer
基于SQL Server的C/S数据库应用系统

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

C/S、B/S软件技术上的比较

PHP
C/S、B/S软件技术上的比较

基于C语言中段错误的问题详解

编程语言 网络编程
基于C语言中段错误的问题详解

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Linux指令篇:使用者管理--su

Linux指令篇:使用者管理--su

qmail+maildrop对单个用户的来信进行过滤

qmail+maildrop对单个用户的来信进行过滤
下拉加载更多内容 ↓