Chinaunix首页 | 论坛 | 博客
  • 博客访问: 919038
  • 博文数量: 96
  • 博客积分: 10071
  • 博客等级: 上将
  • 技术积分: 1118
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-20 17:54
文章分类

全部博文(96)

文章存档

2011年(3)

2010年(3)

2009年(29)

2008年(54)

2007年(7)

分类:

2008-12-20 01:21:55

Dm642启动制作与映像

一、原理与概述

二、复位启动与引导说明

       Cpu 引导1K

三、引导代码与说明

       1K引导4K

四、内存初始化以及简单文件启动

       4K

五、启动结构与配置说明

六、启动1K代码说明

七、启动4K代码说明

八、sram运行说明

九、SDram运行说明

十、制作向导与应用

 

      

  

一、原理与概述

       配置Dm642EMIF启动,即设置 A22A21 为有效,即1K拉高 Cpu 上电复位后,默认配置Emif Ce0 Ce1 Ce2 Ce3 均为 8位同步存储,内部sram为地址模式0X00000000~0X3FFFF 然后开始自动读取 0X90000000  1Kbyte 的代码到 内部Sram 0X00000000 ,然后跳转到 内部Sram 0X00000000处开始执行代码。

       0x000000001K代码 (简称Boot_1K)主要任务是继续读取0X90000000,的引导代码,并且跳转执行。本设计中我们引导了0X90000000 4K代码到 0X0003F000,并且调转到0X0003F100处。

       0X0003F0004K代码 (简称Boot_4K),则负责将 SDRAM初始化,IO初始化,并且再次引导启动代码到指定地址。其中我们使用了BootConfig结构体存放了启动初始化配置参数以及启动引导的代码与目标地址。

       至此引导过程全部完成。

Boot4K Boot1K+Boot4K源代码。

BootLoadVersionMgrVC项目, 产生Boot4K的映像(8,bin格式)

FlashTool为执行烧写的PC程序

注意问题:

1、  读写速率

a)         启动时外部存储使用 EMIF的时钟(设计中采用150M有效时钟, A20 ,A19),读取操作速度为外部时钟 频率/  (RDSETUP * RDSTRB) 

               本设计中EMIF采用150M 所以Flash操作速率150M / (1111 11 1111 ) ~= 150K Flash读写速度一般都大于1M,因此CPU的启动基本不会有问题。

CE2  (0X100 ) ,对应地址0X90000000~   8 bit

WRSETUP

WRSTRB

WRHLD

RDSETUP

TA

RDSTRB

MTYE

WRHLDMSB

RDHLD

1111

11 1111

11

1111

11

11 1111

0000

0

011

2、  上电复位

由于CPU启动需要约200CLOCK时钟周期, 因此在时钟同步完成 时候持续200*mms  即可复位处理器(Reset置高)约为1ms。实际中考虑按键等因素,复位匹配  4.7K上拉, 1K下拉 1uf 复位电容即可。

       3、启动默认配置  Ce2 0X90000000 8 bit 同步存储,内部Cache 禁用 ,地址0X0000000 ~0X3FFFF 为可写可读 高速Sram.本设计为 300M

       CPU引导完成后交付程序执行

      

3、  引导失败可能由于 Flash的地址、数据线连接失败,可以采用示波器查看以下信号

1、  CE2 是否有一个有效(---___---

2、  ADDR[10..0]是否出现波形 --

3、  DATA[7..0]是否出现波形

4、  FLASH_R是否有一个有效(---___---,要同步CE2

5、  通过仿真器察看 0X90000000地址的数据是否正确(确保数据线正确)

6、  通过仿真器察看 0X90000000~0X90000400数据是否正确(确保地址线正确)

     

二、复位启动与引导说明

              Boot_1K 主要功能 Boot_4K调入到Sram

以下参看代码(main.c):

void Init() ;

#pragma CODE_SECTION( c_int00,".BOOT_ENTRY_00000") 

//将代码c_int00定位在初始位置

// BOOT_ENTRY_00000   : origin = 0x03F000,         len = 0x000040

//.BOOT_ENTRY_00000      : {} > BOOT_ENTRY_00000

void c_int00()

{

  &n

阅读(1795) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-10-26 22:18:25

您好!关于这篇文章,您给的原文已经找不到,我在这里也看不到全文。能否Email一份给我?zhh.cui@gmail.com,谢谢!