tiny4412之内存控制器(DDR3 SDRAM)(一)

Table of Contents

一、原理图解析

1.1、jz2440

1.1.1、jz2440引脚说明 

1.1.2、地址(ADDR)引脚说明

1.1.3、Bank引脚说明

1.1.4、DQM引脚说明

1.1.5、片选(CS)说明(决定寻址起始地址)

1.1.2、jz2440内存大小计算方法

1.2、tiny4412

1.2.1、tiny4412引脚说明 

1.2.2、DQS引脚说明

1.2.3、片选(CS)说明(决定寻址起始地址) 

1.3、内存颗粒级联说明

1.3.1、jz2440级联接法(高16bit  低16bit)方式

1.3.2、tiny4412级联接法(0~7  16~23 / 8~15 24~31bit  )错开方式

二、读写控制原理

2.1、内存控制器怎么寻址 ?

2.1、地址范围的确定

 


一、原理图解析

1.1、jz2440

1.1.1、jz2440引脚说明 

1.1.2、地址(ADDR)引脚说明

13根地址线(行列地址共用线)(因为内存控制器寻址方式是先发出行地址,再发出列地址)

(查数据手册地址数为13,列地址数为9

1.1.3、Bank引脚说明

DRAM内部由多个bank组成,目的是一块一块动态循环刷新,而不需要一下刷新整块内存,因此可以降低功耗

内存控制器在寻址之前必须先通过bank线发出信号,选择内存条里面的哪个bank

jz2440有2根bank线,因此bank块数=2^2=4块

1.1.4、DQM引脚说明

     DQM就是掩码控制位,在sdram中每个DQM控制8bit Data。在读操作的时候没什么大的影响,比如读32位的sdram module,但只要其中低8bit的数据,没有关系,只要读出32bit数据,再在软件里将高24位bit和0“与”就可以了,有没有DQM关系不大。但在执行写操作时。如果没有DQM就麻烦了,可能在软件上是写一个8bit数据,但实际上32根数据线是物理上连接到SDRAM的,只要WR信号一出现,这32位就会写sdram中去,高24bit数据就会被覆盖。通过使用DQM就可以将其对应的8bit屏蔽不会因为写操作而覆盖数据了。

1.1.5、片选(CS)说明(决定寻址起始地址)

内存控制器可以控制多块存储芯片,具体选择哪块要根据片选信号决定

jz2440选择的是LnGCS6

起始地址:0x30000000 

1.1.2、jz2440内存大小计算方法

一片内存的大小size(字节) = 2^(13Row+9Column)*4(bank)*(16bit/2)=32MB

1.2、tiny4412

tiny4412上面接有4片内存颗粒,每2片16位组成一块32位逻辑上的一片内存条,

4片内存颗粒组成2块内存条,正好接2根片选线(CS0 CS1)

1.2.1、tiny4412引脚说明 

 

 

 

1.2.2、DQS引脚说明

DQS信号主要用来在一个时钟周期内准确区别每个传输周期,并便于接收方准确接受数据,它是双向的,在数据写入内存时,DQS信号由内存控制器发出,在读出数据时,DQS信号由DDR芯片内部发出通知控制器接受数据,说白了它就是数据同步信号

1.2.3、片选(CS)说明(决定寻址起始地址) 

起始地址:0x40000000  (有别于jz2440,这个需要通过寄存器MEMCONFIG0/1配置)

 起始地址:0x60000000  第一块起始地址0x40000000+0x20000000(512MB第一块大小)=0x60000000

1.3、内存颗粒级联说明

一般内存颗粒以16位的居多,一般是级联成一块32位的内存条

32位=4字节   4个字节怎么分配?

可以分配高16位给第一片,低16位给第二片,也可以错开分配,数据引脚的连线必须和DQM  DQS同步

1.3.1、jz2440级联接法(高16bit  低16bit)方式

 

1.3.2、tiny4412级联接法(0~7  16~23 / 8~15 24~31bit  )错开方式

二、读写控制原理

Chapter12 lesson4 001.jpg

2.1、内存控制器怎么寻址 ?

参考:http://wiki.100ask.org/%E7%AC%AC012%E8%AF%BE_%E5%86%85%E5%AD%98%E6%8E%A7%E5%88%B6%E5%99%A8%E4%B8%8ESDRAM

  • 问题1:怎样访问里面的某个格子呢?

1. 首先发出一个片选信号,选中整个芯片;

2. 发出Bank地址,选择是哪一个Bank(块,即表格);

3. 发出行地址;

4. 最后发出列地址,才能选中是个格子;

2.1、地址范围的确定

jz2440:

开发板中使用两片16位的SDRAM芯片并联组成32位的位宽,与CPU的32根数据线(DATA0—DATA31)相连。 BANK6的起始地址为0x30000000,所以SDRAM的访问地址为0x30000000~低0x33FFFFFF,共64MB。

tiny4412:

chip0: 0x40000000~0x5FFFFFFF  chip1: 0x60000000~0x7FFFFFFF  共1GB需要通过寄存器配置

详细解析上面片选部分已经说明,不再赘述

 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 嵌入式Linux点灯实验通常涉及以下步骤: 1. 准备硬件:选择一个嵌入式开发板,例如Tiny4412,连接电源和串口线,以便通过终端程序与开发板进行交互。 2. 下载和编译内核:从开发板制造商的网站上下载适用于该板的内核源代码,并使用交叉编译工具链编译内核。在内核配置时,需要确保启用GPIO子系统以及相关的GPIO驱动程序。 3. 编写应用程序:使用C或Python等编程语言编写一个简单的应用程序,用于点亮或熄灭开发板上的LED灯。该应用程序可以使用GPIO用户空间API来控制GPIO引脚。 4. 将应用程序复制到开发板上:使用FTP或SCP等工具将编译好的应用程序复制到开发板上,并在终端上运行该应用程序。 5. 调试:通过查看终端输出,可以检查应用程序是否正确地控制了LED灯。如果出现问题,可以使用GDB等调试工具进行排查。 需要注意的是,嵌入式开发需要具备一定的硬件和软件知识,建议在实验前先学习相关的嵌入式Linux开发知识。 ### 回答2: 嵌入式系统是指将计算机技术与其他领域相结合,设计出适应特定应用领域的硬件系统和软件系统。其中,Linux系统是嵌入式系统中使用最多的操作系统之一。本篇文章将介绍如何使用Linux系统进行嵌入式设备的点灯Tiny4412实验。 首先,需要先了解一下Tiny4412开发板的一些基本信息。Tiny4412是一款基于ARM Cortex-A9的嵌入式开发板,具有4核CPU,1GB内存和8GB扩展存储空间。该开发板还集成了多种外设,如4.3英寸液晶屏、USB接口、以太网口等,可以满足各种嵌入式系统的应用需求。 接着,我们需要对Tiny4412开发板进行连接和配置。首先将开发板连接到计算机端,并使用串口线连接开发板和计算机、通过串口终端对开发板进行配置。启动开发板后,进入系统终端,创建一个新的文件夹用来存放程序。cd ~ // 进入主目录,输入mkdir tiny4412_led // 创建新文件夹,输入cd tiny4412_led // 进入新文件夹,输入 接下来,下载并安装软件工具链。需要先下载安装arm-linux-gcc-4.4.3工具链,这个工具链是基于 ARM926EJ-S 架构的版本。输入以下命令下载并安装: sudo apt-get install zlib1g-dev libncurses5-dev libssl-dev sudo apt-get install gcc-arm-linux-gnueabi 安装完成后,我们就可以编写点灯程序了。首先,在tiny4412_led文件夹下新建一个C语言文件led.c,需要注意的是,由于Tiny4412采用了GPIO作为点灯的控制接口,因此需要引入头文件gpio.h、stdio.h、stdlib.h和unistd.h。代码如下: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "gpio.h" #define LED5 110 int main(void) { GPIO_Handle gpio; int led = LED5; gpio = GPIO_Init(); if (gpio == NULL) { fprintf(stderr, "GPIO_Init failed\n"); return 1; } GPIO_SetDir(gpio, led, GPIO_OUTPUT); while (1) { GPIO_SetValue(gpio, led, 1); sleep(1); GPIO_SetValue(gpio, led, 0); sleep(1); } GPIO_Fini(gpio); return 0; } 上面的代码定义了一个引脚(LED5)来控制灯的亮灭,通过GPIO_SetDir函数设置该引脚为输出模式,进入一个无限循环,每隔1秒钟,将LED5的输出电平设置为高电平和低电平,实现LED灯的闪烁。 编写完程序后,使用命令行编译该程序: arm-linux-gnueabi-gcc -o led led.c 然后,将编译生成的可执行文件(led)拷贝到Tiny4412开发板上: cp led /mnt/nfs/root/tiny4412_led/ 最后,在Tiny4412的终端输入以下命令运行程序: ./led 由于程序是一个无限循环,因此,LED灯会一直闪烁,知道我们手动停止该程序。通过上述方式,我们成功实现了使用Linux系统进行嵌入式设备的点灯Tiny4412实验。 ### 回答3: 嵌入式系统是指在电子设备中嵌入的小型计算机系统,用于控制或监控设备的运行。Linux是一种自由、开放源代码的类Unix操作系统,广泛应用于服务器和嵌入式系统中。点灯实验是一项基础实验,通过控制LED点亮和熄灭,来了解嵌入式系统的基本操作和控制。 本文将介绍如何在嵌入式系统中运行Linux操作系统,并通过点灯实验控制LED灯的点亮和熄灭。 实验材料: - Tiny4412板子 - USB转串口模块 - 文本编辑器 - Linux交叉编译工具链 - LED灯 步骤1. 安装Linux操作系统 首先需要在Tiny4412板子中安装Linux操作系统。可以通过交叉编译工具链将Linux内核和根文件系统交叉编译到SD卡中,然后将SD卡插入到Tiny4412板子中,并启动板子。 步骤2. 连接USB转串口模块 接下来需要将USB转串口模块连接到Tiny4412板子上,然后通过串口工具连接到板子。 步骤3. 编写LED控制程序 使用文本编辑器编写LED控制的C程序。通过控制GPIO口实现控制LED点灯。LED灯连接到Tiny4412板子上的GPIO口。 步骤4. 交叉编译程序 使用交叉编译工具链将程序交叉编译到Linux系统中。将编译生成的ELF文件拷贝到Tiny4412板子中。 步骤5. 运行程序 使用命令行启动编译生成的ELF文件。此时就可以通过程序控制LED的点亮和熄灭了。 总结 通过上述步骤,我们就可以在Tiny4412嵌入式系统中实现Linux操作系统和点灯实验。这些步骤并不是非常困难,只需要一点编程基础和嵌入式系统相关的知识即可。嵌入式开发是一门非常有前景的技术,希望本文对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值