历史上的今天
返回首页

历史上的今天

今天是:2025年04月07日(星期一)

正在发生

2020年04月07日 | ARM底层学习笔记-存储管理器及sdram的使用

2020-04-07 来源:eefocus

什么是存储管理器?

存储管理器是片内模块,与arm模块一起被集成在2440这种芯片中,arm cpu模块要访问外部的sdram或网卡/Nor等,就需要通过存储管理器来完成,其作用类似于PC上的南桥。


存储管理器工作:

根据配置信息决定访问哪些设备,

1.片选信号;

2.bank选择信号;

3.列地址信号 ;

4.行地址信号等待;


想访问一个存储介质芯片,需要哪些条件:

1.地址线;

2.数据线8/16/32bits,即数据宽度;

3.时钟频率;

4.芯片相关,如sdram行地址,列地址,bank等,其地址是多少位,有多少个bank等;

这些条件都是配置信息。


我们需要做哪些工作才能使用存储管理器?

1.数据位宽看原理图;

2.配置存储管理器——行/列/bank/刷新周期查看芯片手册;

3.使用;


注:由于CPU的访问是以byte为单位,而内存是以nbits为单位,如32bits的内存每组数据都是以32bits为单位。那么如果CPU发出数据请求,第0个byte的数据,对应内存中第0个byte位置会返回第0个32bits的数据;第1个byte的数据,对应内存中第1个byte位置会返回第0个32bits的数据;第2个byte的数据,对应内存中第2个byte位置会返回第0个32bits的数据;第3个byte的数据,对应内存中第3个byte位置会返回还是第0个32bits的数据。这个问题会导致不同位的内存与同一个CPU连接时,地址线连接方式不同。


sram访问比较快但是比较贵大小较小,不需要刷新  ;sdram访问比较复杂,因此会慢,但比较便宜,大小较大,而且需要刷新,否则会丢数据。 


2440有两种启动方式:

1.Nor启动;

2.Nand启动;

如果硬件上连接有Nor,且选择从Nor启动,这系统的0地址即为Nor的起始地址,系统启动是就从这个地址开始执行;如果硬件连接有Nand,且选择使用Nand启动,那么不论有没有Nor其0地址都失效,系统的0地址为片内sram(在汇编中叫steppingstone)的起始地址,系统会将Nand的前4k拷贝到片内sram,然后从片内0地址开始执行。选用Nand启动时程序启动过程为:1.上电,Nand前4k拷到片内sram的0地址开始启动;2.关看门狗,初始化存储管理器;3把代码拷贝到sdram,继续执行;最后一步在存储管理器被初始化之后开始拷贝代码到sdram中执行,原因是,Nand中要执行的程序可能很大,而片内sram空间有限,因此后面的内容拷贝到sdram中执行。


链接地址:运行时,程序“应该”所处的位置。


以下代码源码来自韦东山老师的资料,仅供学习参考。

@*************************************************************************

@ File:head.S

@ 功能:设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行

@*************************************************************************       

.equ        MEM_CTL_BASE,       0x48000000

.equ        SDRAM_BASE,         0x30000000


.text

.global _start

_start:

    bl  disable_watch_dog               @ 关闭WATCHDOG,否则CPU会不断重启

    bl  memsetup                        @ 设置存储控制器

    bl  copy_steppingstone_to_sdram     @ 复制代码到SDRAM中

    ldr pc, =on_sdram                   @ 跳到SDRAM中继续执行

on_sdram:

    ldr sp, =0x34000000                 @ 设置堆栈

    bl  main

halt_loop:

    b   halt_loop


disable_watch_dog:

    @ 往WATCHDOG寄存器写0即可

    mov r1,     #0x53000000

    mov r2,     #0x0

    str r2,     [r1]

    mov pc,     lr      @ 返回


copy_steppingstone_to_sdram:

    @ 将Steppingstone的4K数据全部复制到SDRAM中去

    @ Steppingstone起始地址为0x00000000,SDRAM中起始地址为0x30000000

    

    mov r1, #0

    ldr r2, =SDRAM_BASE

    mov r3, #4*1024

1:  

    ldr r4, [r1],#4     @ 从Steppingstone读取4字节的数据,并让源地址加4

    str r4, [r2],#4     @ 将此4字节的数据复制到SDRAM中,并让目地地址加4

    cmp r1, r3          @ 判断是否完成:源地址等于Steppingstone的未地址?

    bne 1b              @ 若没有复制完,继续

    mov pc,     lr      @ 返回


memsetup:

    @ 设置存储控制器以便使用SDRAM等外设


    mov r1,     #MEM_CTL_BASE       @ 存储控制器的13个寄存器的开始地址

    adrl    r2, mem_cfg_val         @ 这13个值的起始存储地址

    add r3,     r1, #52             @ 13*4 = 54

1:  

    ldr r4,     [r2], #4            @ 读取设置值,并让r2加4

    str r4,     [r1], #4            @ 将此值写入寄存器,并让r1加4

    cmp r1,     r3                  @ 判断是否设置完所有13个寄存器

    bne 1b                          @ 若没有写成,继续

    mov pc,     lr                  @ 返回



.align 4

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


c代码文件:


#define GPFCON (*(volatile unsigned long *)0x56000050)

#define GPFDAT (*(volatile unsigned long *)0x56000054)

 

#define GPF4_out (1<<(4*2))

#define GPF5_out (1<<(5*2))

#define GPF6_out (1<<(6*2))

 

void  wait(volatile unsigned long dly)

{

for(; dly > 0; dly--);

}

 

int main(void)

{

unsigned long i = 0;

GPFCON = GPF4_out|GPF5_out|GPF6_out; // 将LED1,2,4对应的GPF4/5/6三个引脚设为输出

 

while(1){

wait(30000);

GPFDAT = (~(i<<4)); // 根据i的值,点亮LED1,2,4

if(++i == 8)

i = 0;

}

 

return 0;

}

makefile文件:


sdram.bin : head.S  leds.c

arm-linux-gcc  -c -o head.o head.S

arm-linux-gcc -c -o leds.o leds.c

arm-linux-ld -Ttext 0x30000000 head.o leds.o -o sdram_elf

arm-linux-objcopy -O binary -S sdram_elf sdram.bin

arm-linux-objdump -D -m arm  sdram_elf > sdram.dis

clean:

rm -f   sdram.dis sdram.bin sdram_elf *.o

推荐阅读

史海拾趣

Elec & Eltek公司的发展小趣事

随着全球对环境保护和可持续发展的重视日益加深,Eltek公司也积极响应这一趋势。在产品研发和生产过程中,Eltek公司始终坚持环保理念,采用环保材料和工艺,减少对环境的影响。同时,Eltek公司还加大了在可再生能源领域的投入力度,积极研发具有更高效率和更低成本的电力电子产品。此外,Eltek公司还积极参与各种环保活动和公益事业,为推动全球可持续发展贡献自己的力量。

以上五个故事虽然是虚构的,但其中所蕴含的发展思路、创新精神和国际化视野是电子行业公司普遍需要关注和借鉴的。希望这些故事能为您提供一些启示和灵感。

普芯达电子(Chipswinner)公司的发展小趣事

普芯达电子自创立之初,就立志成为国产高品质、高性价比的IC产品供应商。在成立初期,公司面临着资金紧张、技术积累不足以及市场竞争激烈等多重挑战。然而,凭借着创始人对集成电路行业的深厚理解和坚定信念,普芯达电子逐步克服了这些困难,通过引进优秀人才、加大研发投入以及不断优化产品质量,逐渐在市场上崭露头角。

常州能动(ENDRIVE)公司的发展小趣事

常州能动(ENDRIVE)公司自创立之初,就将技术创新作为公司发展的核心驱动力。在公司发展的早期阶段,研发团队成功开发出一款高效能、低能耗的电源管理芯片,这一创新产品在市场上引起了广泛关注。通过不断的技术迭代和优化,这款芯片的性能逐渐提升,成本逐渐降低,成为了公司的明星产品,为公司的快速发展奠定了坚实基础。

Grande Electronics Ltd公司的发展小趣事
观察遥控器上的指示灯是否在按键时正常闪亮,若指示灯不亮或闪烁异常,则可能是发射电路存在问题。
ECS公司的发展小趣事

随着云计算技术的不断发展,ECS公司意识到只有不断创新才能保持竞争优势。他们投入大量研发资源,对ECS服务进行了多次技术升级和产品优化。例如,他们引入了智能调度算法,实现了计算资源的自动分配和负载均衡;同时,他们还加强了数据安全性和隐私保护措施,确保客户的数据安全。这些技术突破和产品升级使得ECS公司的服务更加稳定、可靠和高效。

DDK公司的发展小趣事

DDK公司在发展过程中,不仅注重技术创新和品质提升,还非常注重市场布局的智慧。公司根据市场需求和竞争态势,灵活调整产品结构和市场策略,不断开拓新的市场领域。同时,DDK公司还积极与国内外知名企业合作,共同开发新产品、新技术,共同拓展市场份额。这种市场布局的智慧,让DDK公司在电子行业中始终保持领先地位。

问答坊 | AI 解惑

之前看到NEC有送开发板的活动,大家使用的如何呢?

本帖最后由 paulhyde 于 2014-9-15 09:24 编辑 之前看到NEC有送开发板的活动,大家使用过程中有什么感触或心得呢? 希望可以贴图出来分享下。 因为我们学校已经有自己的开发板了,所以当时没有申请,但是很想了解下相关的信息。  …

查看全部问答>

PCB互连设计过程中最大程度降低RF效应的基本方法

电路板系统的互连包括:芯片到电路板、PCB板内互连以及PCB与外部器件之间的三类互连。在RF设计中,互连点处的电磁特性是工程设计面临的主要问题之一,本文介绍上述三类互连设计的各种技巧,内容涉及器件安装方法、布线的隔离以及减少引线电感的措施 ...…

查看全部问答>

场效管放大电路

场效管放大电路…

查看全部问答>

主流GPS相关芯片点评

从元器件角度看,GPS设备包含的关键元器件有七个,分别是天线、低噪音放大器(LNA)、RF接收转换(RF Section)、数字基带(Digital Baseband)、微处理器(Microprocessor)、微处理器周边外设(Processor Peripherals)、输入输出和驱动(I/O and Driver)。 ...…

查看全部问答>

WINCE6.0 支持SQLCE3.0?

如何让WINCE6.0支持SQLCE3.0? 谢谢! …

查看全部问答>

请教: 利用4个感应探头来判断运动方向 的C程序

4个感应探头采集动作信号后输入51单片机   输出2个方向信号 。 这个命题我做不来 请高手指点。…

查看全部问答>

便携式数据采集系统中ADC的选用指南

   真实世界的应用需要真实世界的物理连接,一般来说,这意味着模拟信号要在系统内的某处被数字化处理,以便于微处理器、ASIC或FPGA采集数据并做出决策。 基本选用标准 当选择一款模拟数字转换器(ADC)时,大多数设计师似乎只关注几个主 ...…

查看全部问答>

单片机控制可控硅

那位能说一说单片机控制可控硅的原理呀,…

查看全部问答>

C51初学者 的程序 日记(每天更新)

  1. 51单片机 P2.5 I/O口上的LED灯一闪一闪:   #include <reg51.h>sbit led0=P2^5;   void delay () {   unsigned int a;   a=50000;   while (a--); } void main (main){  vo ...…

查看全部问答>

WEBENCH使用说明和设计工具手册

对学习WEBENCH工具的使用和操作很有用。 内容见附件…

查看全部问答>