初段——2440地址空间理解和jlink烧写SRAM

来源:互联网 发布:国外期刊 数据库 编辑:程序博客网 时间:2024/06/08 13:03

对于一个习惯51,AVR,对于理解程序下载在什么地方,执行时又是在那个地址所带来的安全感是开发的开始。2440仅仅是一快ARM9的处理器内部内有ROM,而ram也少的可怜(4KBoot SRAM),因而需要在其外部挂上储存芯片,而24408个部分的外接储存设备接口,每个接口的地址已经固定且最大不能超过128M

2440支持两种启动模式:

启动模式通过管脚电平设定,所以在上电之前其启动模式已经设定好。

1Nand启动:上电,硬件立即从外部的nand flash 的前4K拷贝到SRAM中,地址0x0000SRAM0地址开始,及上电时cpu的主控权完全交给BootInternalSRAM (4KB),至于要把nand flash中的内容复制到SDRAM还是点亮一个LED就看你怎么编写。

2nor启动: 0地址指向nor flash0地址而非sram0地址,上电cpu0地址执行。

上电之前确定2440的启动模式后所有的储存设备的物理地址就已经确定,其执行各个设备的地址同时也已经确定。烧写地址和执行时的设备地址一样,烧写不过是利用jlinkh-link等把二进制文件烧写烧对应的地址address内,address为设备地址既保持该二进制文件的地址,你需要注意address的地址是否指向你要的设备,还有该设备是否需要擦除。

以下是我烧写用jlinkled流水灯到jz2440的程序:

step1:关看门狗,默认看门狗是开的

disable_watch_dog:
    @ 往WATCHDOG寄存器写0即可
    mov r1,     #0x53000000
    mov r2,     #0x0
    str r2,     [r1]
    mov pc,     lr      @ 返回


step2:设置寄存器的值便于使用Bank6外接的SDRAM可以不要,流水灯程序很小boot internnal SRAM空间足够了

mem_cfg_val:
    @ 存储控制器13个寄存器的设置值
    .long   0x22011110      @ BWSCON
    .long   0x00000700      @ BANKCON0
    .long   0x00000700      @ BANKCON1
    .long   0x00000700      @ BANKCON2
    .long   0x00000700      @ BANKCON3  
    .long   0x00000700      @ BANKCON4
    .long   0x00000700      @ BANKCON5
    .long   0x00018005      @ BANKCON6
    .long   0x00018005      @ BANKCON7
    .long   0x008C07A3      @ REFRESH
    .long   0x000000B1      @ BANKSIZE
    .long   0x00000030      @ MRSRB6
    .long   0x00000030      @ MRSRB7

step3:跳转到C语言的main()中、main为流水灯

   bl  main

Step4生产编译链接生成bin文件

Step5利用jlink commander烧写binaddress 0x00  (注意是nand启动)

jlink执行的命令

1

2loadbinC:\Users\Michael\Desktop\sdram\leds.bin  0x00 (如果是nor启动则是 ox40000000)

3setpc ox00(如果是nor启动则是 ox40000000)

4g


记住启动时nan  和nor是 其地址会不同一定要弄明白下表在写代码:




源文档 <http://blog.csdn.net/chinalj2009/article/details/12349163