DDR2 学习笔记

Posted light-weight-ip

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DDR2 学习笔记相关的知识,希望对你有一定的参考价值。

访问四大步骤:
1:命令&地址分发
2:Bank内数据操作,含预充电,行选中,放大等
3:Device数据移动,将数据由Bank移动到latch中
4:数据输出

bank和bank间是share相同的行地址的
存储单元的寻址就变成了-> bank -> row -> colum的顺序
一个bank又由多个array组成,arrays间是同时动作。

接下来重点看看bank内部array的具体操作:

每个bit都采用差分结构,提升灵敏度,降低放大器的设计难度和面积
采用版图上对称的走线减少耦合电容
vcc/2的参考电压,相当于提高mos管的基准,当bit line的信号输出时,会让ref+和ref-变为(vcc)1或者(vss)0;

0.precharge会将bitline和~bitline都被充电到vcc/2
1.电荷被读取到bitline上
3.bitline上面微弱的信号被放大到vcc或者vss
4.将bitline的值回写到存储电荷的位置。

tRCD = row -> colum delay
tRAS = row access strobe
tRP = row precharge
tWR = write recovery

SDRAM的更新:

tCAS = tCL = colum latency
突发操作让ddr的效率提高,random操作可能导致ddr的效率不高
prefetch技术成为ddr性能提升的主要技术,cmd&address的decode逻辑或者器件本身速度并没有明显提高。

IMX6ULL学习笔记——获取和编译U-Boot

一、简介

1.1 BootLoader

BootLoader 是系统上电时运行的一段初始化代码,用于引导完整的操作系统,然后将控制器交给操作系统。 这段 BootLoader 程序会先初始化 DDR 等外设,然后将 Linux 内核从 Flash(NAND,NOR FLASH,SD,MMC 等)拷贝到 DDR 中,最后启动 Linux 内核。

另外,某些 BootLoader 可能含有一些高级特性,如校验操作系统镜像,从多个操作系统镜像中选择引导合适的操作系统, 或者添加网络功能,让系统自主从网上寻找合适的镜像并且进行引导等等。

1.2 U-Boot

U-Boot(Universal Boot Loader) 是一个主要用于嵌入式系统的引导加载程序。可以支持多种不同的计算机系统结构,包括 PPC、ARM、AVR32、MIPS、x86、68k、Nios 与 MicroBlaze。这也是一套在 GNU 通用公共许可证之下发布的自由软件。U-Boot 的主要作用是用来启动操作系统内核,它分为两个阶段,即 boot + loader, boot 阶段启动系统,初始化硬件设备,建立内存空间映射图,将系统的软硬件带到一个合适的状态, loader 阶段将操作系统内核文件加载至内存,之后跳转到内核所在地址运行。U-Boot 发展至今,已经可以实现非常多的功能,比如支持液晶屏、网络、USB 等高级功能。

二、U-Boot工程结构

目录/文件说明
api通用的API函数相关目录
arch与芯片架构相关目录
board板级相关信息目录
cmduboot命令相关目录
common通用代码目录
configsboot配置文件目录
disk磁盘相关内容目录
doc说明文档
drivers驱动代码相关目录
dtoverlay
dts设备树相关目录
envuboot环境相关
examples示例代码目录
fs文件系统相关目录
include头文件相关目录
liblib库文件目录
Licenses许可证相关目录
net网络相关代码目录
post上电自检相关目录
scripts相关脚本目录
test测试代码目录
toolsuboot构建工具相关目录
Kconfig图形配置界面相关文件
MakefileMakefile文件

三、安装编译工具和依赖

sudo apt install make git gcc-arm-none-eabi gcc bison flex libssl-dev dpkg-dev lzop libncurses5-dev

四、获取U-Boot

【不推荐,仅列出】

【新手推荐使用以下开发板商提供uboot】

五、编译野火提供U-Boot

  • 获取野火提供U-Boot源码
    git clone -b ebf_v2020_10_imx https://gitee.com/Embedfire/ebf_linux_uboot

  • 进入工程目录
    cd ebf_linux_uboot

  • 清除工程
    清除上次生成的编译环境,避免之前的环境干扰影响编译结果
    sudo make distclean

  • 配置工程
    加载板级配置文件,具体的板级配置文件在uboot根目录下的configs目录下。

    野火提供的imx6ull uboot分为nand版本和emmc版本,以编译emmc版本为例
    sudo make ARCH=arm CROSS_COMPILE=arm-none-eabi- mx6ull_fire_mmc_defconfig

    • ARCH=arm:设置目标为 arm 架构
    • CROSS_COMPILE:指定所使用的交叉编译器

    若想编译nand版本的uboot需要将 mx6ull_fire_mmc_defconfig 改为 mx6ull_fire_nand_defconfig

  • 编译工程
    sudo make ARCH=arm CROSS_COMPILE=arm-none-eabi-

    • ARCH=arm:设置目标为 arm 架构
    • CROSS_COMPILE:指定所使用的交叉编译器

  • 生成文件
    编译完成以后多了一些文件:

    • uboot :裸机程序,因此需要在其前面加上头部(IVT、DCD 等数据)才能在 IMX6ULL 上执行。
    • u-boot-nodtb.bin :是在 uboot 的基础上,经过 objcopy 去除符号表信息之后的可执行程序
    • u-boot.dtb :uboot 的设备树,是由 arm-none-eabi-gcc 和 dtc 编译出来的
    • u-boot.bin :是在 u-boot-nodtb.bin 后追加了 u-boot.dtb 形成的二进制文件。
    • u-boot-dtb.imx就是我们最终要烧写到开发板中的 uboot 镜像文件。是 u-boot.bin 添加了3KB头部信息和尾部信息(结尾添加了1298字节的00,00实际没什么作用)组成的镜像。
  • 新建编译脚本文件
    每次编译 uboot 都要输入一长串命令,为了简单起见,我们可以新建一个 shell 脚本文件,将这些命令写到 shell 脚本文件里面,然后每次只需要执行 shell 脚本即可完成编译工作。

    1. 新建名为 imx6ull_uboot.sh 的 shell 脚本文件:
      vim imx6ull_uboot.sh

    2. 然后在里面输入如下内容:
      建议还是使用 arm-none-eabi- 编译器编译uboot,编译出来的镜像文件会小点,否则编译的uboot可能无法运行。

    #!/bin/bash
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_fire_nand_defconfig
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
    
    • 第1行:shell 脚本要求的,必须是 “#!/bin/bash” 或者 “#!/bin/sh”。
    • 第2行:使用了 make 命令,用于清理工程,也就是每次在编译 uboot 之前都清理一下工程。带有三个参数,第一个是 ARCH,也就是指定架构,这里肯定是 arm;第二个参数 CROSS_COMPILE 用于指定编译器,只需要指明编译器前缀就行了,比如 arm-linux-gnueabihf-gcc 编译器的前缀就是 “arm-linux-gnueabihf-”;最后一个参数 distclean 就是清除工程。
    • 第3行:也使用了 make 命令,用于配置 uboot。同样有三个参数,不同的是,最后一个参数是 mx6ull_fire_mmc_defconfig。前面说了 uboot 是 bootloader 的一种,可以用来引导Linux,但是 uboot 除了引导 Linux 以外还可以引导其它的系统,而且 uboot 还支持其它的架构和外设,比如 USB、网络、SD 卡等。这些都是可以配置的,需要什么功能就使能什么功能。所以在编译 uboot 之前,一定要根据自己的需求配置 uboot。mx6ull_fire_mmc_defconfig 就是野火针对 I.MX6ULL 的 EMMC 核心板编写的配置文件,这个配置文件在 uboot源码的 configs 目录中。
    • 第4行:用于编译 uboot,通过第 3 行配置好 uboot 以后就可以直接 “make” 编译 uboot 了
    1. 增加可执行权限
      chmod 777 imx6ull_uboot.sh.sh

    2. 执行脚本文件
      ./imx6ull_uboot.sh.sh


• 由 Leung 写于 2022 年 9 月 3 日

• 参考:3. Uboot的编译
    IMX6ULL - 移植uboot-imx_v2020.04_5.4.70_2.3.0
    【Linux系统移植】U-Boot编译、烧写与使用
    【Linux系统移植】NXP 官方开发板 uboot 编译与烧录

以上是关于DDR2 学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

Altera DDR2 IP核学习总结2-----------DDR2 IP核的生成

Altera DDR2 IP核学习总结3-----------DDR2 IP核的使用

DDR2学习之SRAM,SDRAM,DDR,DDR2的区别

小梅哥FPGA进阶学习之旅基于Altera FPGA 的DDR2+千兆以太网电路设计

内存工作电压 ddr,ddr2 ,ddr3 各多少。。为啥会有这种变化?

Windows7复制大文件后MD5不正确的问题之解决一法