历史上的今天
返回首页

历史上的今天

今天是:2025年03月06日(星期四)

正在发生

2020年03月06日 | 【ARM裸板】内存控制器、SDRAM基础与代码重定位

2020-03-06 来源:eefocus

1.CPU如何控制外设?

CPU控制相应外设的寄存器,有外设控制器发出特定的波形


2.CPU如何选择寄存器?

CPU通过内存控制器选择

发出地址addr

根据地址选择不同的模块

CPU

内存控制器

读写数据


3.外设共用地址、数据总线,如何互不干扰?

通过片选CS引脚,选择不同的外设


4.谁控制片选引脚

发出地址addr

根据地址发出片选信号

CPU

内存控制器

使能相应的外设

由芯片手册得知:当CPU发出地址是0x00000000时 nGCS0为低电平选择(有效)

在这里插入图片描述

5.CPU如何读写数据的方向?

通过外设芯片的读写引脚控制

6.CPU不同位宽设备如何连接并读取数据【内存控制器】

6.1 连接方式

8bit ROM (从A0开始对应连接)

在这里插入图片描述

16bit ROM (A0不接,从A1开始)

在这里插入图片描述

32bit ROM(A0、A1不接,从A2开始)

在这里插入图片描述

6.2 CPU读取ROM数据1个字节

例如在 地址3上读取一个字节数据

mov R0.#3

LDRB R1,[R0]


过程 CPU发出的地址 ROM接收到的地址 ROM返回的数据 内存控制器挑出指定字节送给CPU

8bit 000011 000011 第3个byte 第3个byte

16bit 000011 00001 第1个16bit 根据A0=1,挑出16bit中的第1个byte给CPU(从0byte开始)

32bit 000011 00000 第0个32bit 根据A0 A1=11挑出第3个byte给CPU(从0byte开始)

综上,也就是所有的地址线都会用到,内存控制器根据未接的地址线状态判断挑出指定的byte


6.3 CPU读取ROM数据4个字节

mov R0,#4

LDR R1,[R0]  ;从地址4上取出4个字节


过程 CPU发出的地址 内存控制器转发给ROM的地址 ROM返回的数据 内存控制器组装数据返回给CPU

8bit 000100 000100、000101、000110、000111(共四次) 得到地址4、5、6、7上的byte 组装给一个32bit数据给CPU

16bit 000100 00010、00011(共两次) 得到第2、3个16bit 组装给一个32bit数据给CPU

32bit 000100 0001(共一次) 得到第1个32bit 直接发送给CPU


7.如何根据原理图确定芯片访问地址

7.1 方法

1.根据片选引脚确定基地址,见4.谁控制片选引脚

2.根据芯片所接地址线确定范围


7.2 Nor Flash确定访问地址

例如Nor Flash芯片:用到A20~A0共21条线

地址线21:即可访问2M内存,0x1FFFFF

根据它片选信号为nGCS0可以得到基地址BASE = 0x00000000

其范围为BASE+0x0000 0000 ~ BASE+0x001F FFFF,即0x0000 0000 ~ 0x001F FFFF

在这里插入图片描述

7.3 Net芯片确定访问地址

例如网卡net芯片:只连接了A2,但是其A0是用来确定16bit(网卡数据线为16位)中的高8位还是低8位,因此A2 A0

根据其片选引脚为nGCS4,可以得到基地址BASE = 0x2000 0000

其范围为BASE+0x0000 0000 ~ BASE+0x0000 0101,即0x2000 0000 ~ 0x2000 0005

在这里插入图片描述

8. Nor Flash时序分析

8.1 MX29LV160 读数据时序

在这里插入图片描述

Taa:发出地址信号之后多长时间数据有效

Tce:发出片选信号之后多长时间数据有效

Toe:发出读信号之后多长时间数据有效

Toh:数据保持时间

Tdf:数据浮动时间

Trc:读取周期时间(70ns,即读取速率最大为70ns)


8.2 S3C2440 可编程访问周期时序

为了方便,使得Addr、CS、OE信号同时拉低使能,然后确保Tacc>=70ns,即可满足Nor Flash的时序

则当HCLK=100M,内存控制器周期为T=10ns,Tacc = 8T即可

  • 在这里插入图片描述

在这里插入图片描述

9.代码重定位

1.Nand启动时,一上电,硬件会把前4K数据复制到SRAM

2.CPU从0地址运行


如果程序大于4K,前4K的代码需要把整个程序读取出来放到SDRAM【重定位:重新确定程序地址】


9.1 Nor Flash特点

可以像内存一样的读取

不可以像内存一样直接写入(写入有保护)


9.2 Nor直接写入的结果

程序中含有需要修改(写入)的变量,写在Nor上,直接修改变量是无效的

因此需要重定位,放到SDRAM上


9.3 实验

以Nor Flash 启动,修改一变量,改变量并不会被修改,即无效


以Nand Flash 启动,修改一变量,改变量会被修改


9.4 程序包含哪几部分

代码段text 代码

数据段data (一般的全局变量)

只读数据段rodata const 全局变量

bss 初值为0或无初值的全局变量 不保存在bin文件中

comment 注释 不保存在bin文件中

bss:是“Block Started bySymbol”的缩写,意为“以符号开始的块”。 BSS是Unix链接器产生的未初始化数据段。

bss段与注释段不保存在bin文件中

char g_Char = 'A'; //定义全局变量

const char g_Char2 = 'B'; //只读全局变量

int g_A = 0; //初值为0的全局变量

int g_B; //未定义初值的全局变量

推荐阅读

史海拾趣

博众电气(BZCN)公司的发展小趣事

随着市场的不断扩大,博众电气意识到质量是企业生存和发展的关键。因此,公司决定引入国际先进的质量管理体系,全面提升产品质量和服务水平。通过严格的质量控制和持续改进,博众电气的产品质量得到了显著提升,客户满意度也大幅提高。这一举措不仅增强了公司的市场竞争力,还为公司的长远发展奠定了坚实基础。

DIPTRONICS MANUFACTURING INC公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,圜达实业始终坚持创新发展。公司不断推出新产品、新技术,以满足客户的多样化需求。同时,公司还积极与国内外知名企业开展合作,共同研发新技术、新产品,推动电子开关行业的持续发展。

请注意,以上故事梗概仅基于公开信息和一般行业趋势进行编写,可能无法涵盖圜达实业发展的所有细节和具体情况。

Chipcera Technology Co Ltd公司的发展小趣事

在电子行业的激烈竞争中,Chipcera Technology Co Ltd始终坚持以技术为核心的发展策略。某年,公司研发团队成功研发出一款具有更高耐压、更低损耗的陶瓷电容器。这款产品不仅满足了市场对高性能电容器的迫切需求,还为公司赢得了大量订单。随着该产品的广泛应用,Chipcera在行业内的影响力逐渐提升,为后续的发展奠定了坚实基础。

Display Elektronik GmbH公司的发展小趣事

随着环保意识的日益增强,Display Elektronik GmbH将绿色环保理念融入到了公司的发展中。公司采用环保材料和生产工艺,减少了对环境的污染。同时,Display Elektronik GmbH还积极推广绿色显示技术,为客户提供更加环保、节能的显示解决方案。这种对环保的关注和投入,让Display Elektronik GmbH在行业中树立了良好的形象。

Gennum ( Semtech )公司的发展小趣事
作为输出设备,用于显示电路的工作状态。
Diconex公司的发展小趣事

在电子行业中,Diconex公司始终坚持以客户需求为导向的市场定位策略。公司深入调研市场需求,针对不同客户群体推出定制化解决方案。这种精准的市场定位使得Diconex的产品能够更好地满足客户需求,赢得了客户的信任和忠诚。同时,公司还积极拓展国际市场,与全球知名企业建立了长期稳定的合作关系。

问答坊 | AI 解惑

vs2005 + wince6.0 链接错误(处理器类型)

..\\Release\\blit_mmx.obj : fatal error LNK1112: module machine type \'X86\' conflicts with target machine type \'THUMB\' 其中blit_mmx.obj是由blit_mmx.asm 生成的,此文件编译命令行为: yasm -f win32 -o \"$(IntDir)/$(InputName).ob ...…

查看全部问答>

wireshark 可以抓取本机发给本机的数据报文吗?

听说是可以的,大家知道怎么设置吗?多谢了。…

查看全部问答>

wince6.0 作为复合设备识别(compositefn)问题

我在作wince6.0的驱动,用的是6410开发板。我想在pc端让板子被识别为一个串口和一个u盘。现在已经把PUBLIC\\DRIVER\\USBFN\\CLASS\\COMPOSITEFN驱动编成了compositefn.DLL,并且能够当做流驱动,在系统启动的时候加载成功了。 但是主机端设备管理 ...…

查看全部问答>

求此LCD与工控板连接方案

板子是研杨的4310,带44pin的LCD接口,接口定义如下: 01. +12 VDC          02. +12 VDC 03. GND              04. GND 05. +5 VDC     &nbs ...…

查看全部问答>

对Cortex-M3的中断嵌套时堆栈处理的疑问,望指教

看了Cortex-M3技术参考手册后,感觉对异常处理中堆栈的操作理解还是不清晰.1.在Thread mode下,发生异常或中断,处理器自动将xPSR,PC,LR,R12,R3,R2,R1,R0进行压栈,当ISR返回时,又自动将上述寄存器出栈.这个没问题.2.当抢先优先级不同时,优先 ...…

查看全部问答>

测电感简单方法有哪些

因为小的电感用电感表测试是测不出来,即使能测出来误差也相差很大,那请问还有别的方法吧。具体的跟我讲讲,最好有张原理图。谢谢各位高手 急需…

查看全部问答>

求助 波形的匹配

     各位大侠,大家好!本人菜鸟一枚,因最近要写毕业论文,所以要做一些实验。。要实现的就是,存储一组波形(几十个波形)作为波形库,然后输入一个波形,和波形库中波形比对,找出最相似的波形,最后在LCD上显示出来。请问这要 ...…

查看全部问答>

各位兄弟,这到底是怎么回事啊???

本帖最后由 paulhyde 于 2014-9-15 03:34 编辑 今天电赛的证书拿到手里了,我是队长+所有自购原件的买单者+电路绝大部分的设计制作者,为什么名字被放在三个人最后啊????????????????????????我们组是两个大三的带一个大 ...…

查看全部问答>

LPC2104_flash.icf或者LPC2104_ram.icf文件

最近在做ARM7LPC系列芯片的开发,在用IAR开发环境时缺少LPC2104_flash.icf或者LPC2104_ram.icf文件,哪位大侠有类似的配置文件?本人不胜感激。…

查看全部问答>