历史上的今天
今天是:2025年01月30日(星期四)
2020年01月30日 | ARM的STRB和LDRB指令分析
2020-01-30 来源:eefocus
一、SDRAM
1、存储结构
SDRAM的内部是一个存储阵列。阵列就如同表格一样,将数据“填”进去。在数据读写时和表格的检索原理一样,先指定一个行(Row),再指定一个列 (Column),我们就可以准确地找到所需要的单元格,这就是内存芯片寻址的基本原理

这个单元格(存储阵列)就叫逻辑 Bank(Logical Bank,下文简称 L-Bank)。 由于技术、成本等原因,不可能只做一个全容量的 L-Bank,而且最重要的是,由于 SDRAM的工作原理限制,单一的 L-Ban k将会造成非常严重的寻址冲突,大幅降低内存效率。所以人们在 SDRAM内部分割成多个 L-Bank,目前基本都是 4个(这也是SDRAM规范中的最高L-Bank数量),由此可见,在进行寻址时就要先确定是哪个 L-Bank,然后在这个选定的 L-Bank中选择相应的行与列进行寻址。

2、引脚说明
DQM可以阻塞其对应的空间长度(8位)的有效性。例如,当LDQM有效时,如果输出时,将输出的[7,0]位置成高阻态;如果输入,则阻碍[7,0]的输入,也就是不能修改[7,0]的数据。当UDQM有效时,如果输出时,将输出的[15,8]位置成高阻态;如果输入,则阻碍[15,8]的输入,也就是不能修改[15,8]的数据。
3、S3C2440与内存相关的硬件电路图
SDRAM以两片32M的K4S561632构成64M的RAM存储为例进行说明。


4、对SDRAM访问的步骤
(1) CPU发出片选信号nSCS0有效,选中SDRAM芯片
(2) SDRAM中有4个L-Bank,需要2根地址信号选中一个,利用的是ADDR24和ADDR25
(3) 先后发出行地址信号和列地址信号。K4S561632的行地址数是13,列地址数是9。所以,当nSRAS有效时,ADDR2~ADDR14上发出的是行地址信号,它对应32位地址空间的bit[23:11];当nSCAS有效时,ADDR2~ADDR10上发出的是列地址信号,它对应32位地址空间的bit[10:2]。由于BANK6以32位宽度外接SDRAM,ADDR0、ADDR1恒为0,不参与译码。
(4) 找到存储单元后,被选中的芯片就要进行统一的数据传输了。
二、分析ldrb/strb指令
1、S3C2440有关ldrb/strb指令的描述

2、LDRB
ldrb指令会根据提供的地址,从数据总线中选择需要的字节。例如:
ldrb r0,0x30000000取的是0x30000000这个字的[7,0]
ldrb r0,0x30000001取的是0x30000000这个字的[15,8]
ldrb r0,0x30000002取的是0x30000000这个字的[23,16]
ldrb r0,0x30000003取的是0x30000000这个字的[31,24]
也就是说ldrb指令会先把0x30000000这个地址的字取出来,然后根据ldrb指令提供的地址选择合适的字节。
ldrb指令接下来要把取到的数据放在目的寄存器的低8位,然后将高24位填充为0。
3、STRB
STRB指令首先数据总线(整个字的四个字节)都填充上要写入的一个字节的数据。然后,外部存储系统激活合适的字节存储子系统去存储这一个字节的数据。
“外部存储系统激活合适的字节存储子系统去存储这一个字节的数据”这句话,我是这样理解的,以"strb r3,[r4]"为例进行说明。
假设r3 = 0x12 ,r4 = 0x30000001
STRB指令首先数据总线上都填充上要写入的一个字节的数据,也就是数据总线为0x12121212,访问的字地址是0x30000000。因为要存储一个字节的数据到0x30000001,而0x30000000这个字的其他单元不能更改,所以就将DQM0、DQM2、DQM3都有效,而不屏蔽DQM。这样在写入的过程中,只将0x12写入到0x30000001单元中,而其他三个单元不修改,从而完成strb指令规定的任务。
上一篇:ARM920T系统总线时序分析
下一篇:ARM函数调用过程分析
史海拾趣
|
大家觉得搞单片机(嵌入式电子技术开发)累吗??? http://bbs.21ic.com/viewthread.php?tid=127427… 查看全部问答> |
|
定时器产生的中断请求,如何获取来响应自己的程序呢? 我想利用定时器在指定的时间到达时,执行我写的一段程序,怎么获取定时器的这个中断呢? 有例程最好,我不知道这个过程如何写,是不是中断有一个固定的模式?? 新手求指教啊~~~~… 查看全部问答> |
|
PSDSoft Express软件生成的编程文件obj格式解析 各位好: 最近用到PSDSoft Express软件,其生成的编程文件obj中,包含:PLD映射,SRAM数据,EPROM数据,不知如何划分!因为编程PSD501芯片要用到这个文件. 另外,发现此软件生成的项目中,在生成obj文件之前,会自动 ...… 查看全部问答> |
|
就是在一个SPI总线上我有两个一样的IC,A,B;现在SPI总线是如何识别他们两个呢?怎样确定他们的优先级呢?比如说要把A的那个信号切换到什么状态的方法? 请高手指教!… 查看全部问答> |
|
首先介绍一下我的系统:PXA270 + wince5.0 系统启动过程,上电 --> eboot将wince5.0镜像从flash 搬运到RAM中, -->跳转到RAM运行 现象:用4.2V给系统供电,正极串入电流表,在eboot阶段的电流为300mA左右,跳转到wince5.0后,功耗降到220mA,在bo ...… 查看全部问答> |
|
使用NiosII控制高频头CU1216,在NiosII IDE中运行下列程序后,由于没有应答,程序死在Write_I2C_Byte函数的while(I2C_Ackn() );,reset,sda,scl均加了上拉电阻,进行了一些检查均没有结果 ,哪位高手能帮我指点迷津?谢谢。 #include \"i2c.h\" ...… 查看全部问答> |
|
return 大家都不陌生吧,我想每个人写的第一个程序基本都差不多,就是helllo world,就是现在,我在验证平台的时候还是会用hello world,但是大家不知道有没有关注return,它是函数吗?这些细节问题在公司的笔试面试最容易考你了!~#incude <stdi ...… 查看全部问答> |
|
图片是一个跟430手表一样方案的手表叫做metwatch可以配合智能手机使用,两张图片一张是在阳光下,一张是在无阳光的地方,液晶的表现都很清晰,有没有人认识这个到底是什么类型的液晶… 查看全部问答> |
|
我最近在设计一个正弦波发生器的过程中,出现了很诡异的问题。频率稍微上调多点,输出波形就截止。采取fpga的de0开发板,方案如下:1. 频率处理以及显示(元件1) ——> 输出整形(integer)频率 f2. 输入频率 —— ...… 查看全部问答> |




