历史上的今天
返回首页

历史上的今天

今天是:2024年09月01日(星期日)

正在发生

2021年09月01日 | S3C2440—7.存储控制器访问外设

2021-09-01 来源:eefocus

一.内存接口的概念

S3C2440是SOC,所以会有很多外设,一般驱动外设的方法可以分为:


通过CPU访问相应的的寄存器,然后通过控制器驱动外设

CPU直接访问外设地址,驱动外设

后一种访问方式是CPU直接对内存地址的访问,即通过内存接口访问外设,CPU通过片选线选定外设,通过地址线先选定地址,通过数据线进行控制。


我们称这种外设为内存类设备,通常有:NOR FLASH、网卡、SDRAM……


那CPU是如何通过这些总线来驱动内存类设备呢?这就涉及到存储控制器了,下面就来介绍一下存储控制器的原理。


二.存储控制器(内存控制器)


2.1 什么是存储控制器?

存储控制器是按照一定的时序规则对存储器的访问进行必要控制的设备,包括地址信号、数据信号以及各种命令信号的控制,使主设备(访问存储器的设备)能够根据自己的要求使用存储器上的存储资源


存储控制器可以看作CPU与内存之间沟通的桥梁,CPU通过存储控制器来访问内存,比如GPIO、UART、IIC、SDRAM……都属于CPU的统一编址,地址都是CPU统一编排的(NAND FLASH不属于),所以CPU就可以通过存储控制器来访问这些外设的地址。


2.2 S3C2440存储控制器介绍

下面是S3C2440的存储控制器介绍:

在这里插入图片描述

其中主要的信息为:


总共1GB的内存,分为8BANK,每个BANK的地址大小为128MB

BANK的位宽是可编程的

BANK0~BANK7的起始地址是固定的

此外,为了访问这1GB的空间,存储控制器引出了27根地址线ADDR0~ADDR27,这时候我们算一下:2^27=128M,这明明是一个BANK的空间呀,怎么可以访问8个BANK的空间呢?


其实还有8根片选线nGCS0~nGCS7,用来选择某一块BANK,就是8个BANK将1GB空间划分为8块128MB大小的空间,当访问某一块范围内的地址时,将此块的片选信号拉低就可以,这8个BANK的地址空间如下:

在这里插入图片描述

注意:S3C2440是32位CPU,理论上可使用的地址大小为4GB,除了上面这由于连接外设的1GB外,还有一部分空间是CPU内部寄存器使用了,剩下的地址空间没有使用。


2.3 存储控制器如何处理不同位宽的外设

有的外设位宽是8bit,有的是16bit,有的是32bit,当CPU访问这些外设的内存空间时,那要怎么办?要分情况来吗?


不需要,因为有存储控制器!CPU只需要向存储控制器提供地址,由存储控制器来解决不同位宽的问题。


以ROM为例:CPU想读取ROM中的某块地址中的数据,可ROM的位宽有8bit、16bit、32bit


下面对比一下三种位宽情况下ROM与存储控制器的接线情况:


8bit:

在这里插入图片描述

16bit:

在这里插入图片描述

32bit:

在这里插入图片描述

区别就是地址线的接法,8bit位宽是相对应的A0对A0;16bit位宽是从A1开始对齐的;32bit位宽是从A2开始对齐的,这是因为不同位宽的ROM内部构造不相同。


ROM的内部构造:


8bit带宽:每个地址的空间大小是8bit(1Byte);


16bit带宽:每个地址的空间大小是16bit(2Byte);


32bit带宽:每个地址的空间大小是32bit(4Byte);


表面上看到A0、A1没用到,实际上是起了别的作用:


8bit:内存控制器A0对应ROM的A0


16bit:内存控制器A1对应ROM的A0,内存控制器A0用来确定16bit(2Byte)中的哪一Byte


32bit:内存控制器A2对应ROM的A0,内存控制器A1A0用来确定32bit(4Byte)中的哪一Byte


实际上这些地址线都是有用的!!!


下面通过俩个例子来说明CPU在对不同位宽ROM读取数据时的差异。


例一:


#读取地址3的一个字节数据到R1寄存器

MOV Ro ,#3

LDRB R1, [R0] 


读地址3的一个字节(LDRB 代表读取一个字节),CPU会将地址3发送给ROM(通过内存控制器),此时A2A1A0对应:011


8bitROM:A0对应A0,直接取出第三个数据,1Byte


16bitROM:A1对应A0,取出第一个数据,2Byte(一个地址16bit)


32bitROM:A2对应A0,取出第0个数据,4Byte(一个地址32bit)


取出的数据中 包含有我们想要的数据,由内存控制器筛选我们所需要的数据。


过程:CPU发出地址,ROM通过存储控制器收到地址,ROM返回数据给存储控制器,存储控制器筛选所需要的数据,存储控制器返回有用数据给CPU。


存储控制器操作16bit、32bit时会根据A0、A1的信息筛选出所需数据给CPU。


例二:


#从地址4开始读取32bit数据(4Byte)

mov R0, #4

LDR R1, [R0]


CPU去地址4开始读取4Byte数据(32位ARM),地址是以Byte为单位的,地址4就是第四个Byte,此时A2A1A0对应:100


8bit:发送四次地址给ROM,每次得到一个ROM返回的字节(8bit),内存控制器整合4Byte数据


16bit:发送俩次地址给ROM,每次得到俩个ROM返回的字节(16bit),内存控制器整合得到4Byte数据


32bit:发送一次地址给ROM,ROM返回四个字节(32bit),正好是地址4开始的4Byte数据


过程:CPU发出地址给内存控制器,内存控制器收到地址转发给ROM,ROM返回数据,内存控制器组装数据后返回CPU。


2.4 怎么确定芯片的访问地址?

第一步:根据片选信号确定基地址(每个片选线确定的地址块有128MB)


第二步:根据芯片所接地址线确定范围(27根地址线)


比如:Nor FLASH

在这里插入图片描述

片选线0,基地址0X0000_0000,因为这个NOR FLASH是16位的,所以内存控制器的LADDR1接A0,LADDR0用来选择低八位还是高八位。


用到A0~A20总共21条地址线,所以NOR FLASH地址范围是:基地址+地址线确定的范围


即:0X0000_0000~0X001f_ffff 2^21=2M空间。


比如:网卡NET

在这里插入图片描述

基地址是nGCS4:0X2000_0000 内存控制器的地址线只接了LADDR2,16位数据线,意味着LADDR0也用到了。


网卡的地址范围:基地址+0b000~基地址+0b101 (LADDR1的位置无所谓)即:0X2000_0000~0X2000_0005


访问这些地址就可以访问到DM9000网卡


比如:SDRAM

在这里插入图片描述

SDRAM输出是32位,所以LADDR0、LADDR1已经包含了,加上LADDR2~LADDR14、LADDR24、LADDR25总共17条地址线,2^17=128k ,然鹅SDRAM是64M的,实际上是行地址和列地址。(这个问题会在下篇博客中细细分析)


三.时序问题

以NOR FLASH读时序为例:

在这里插入图片描述

内存控制器与NOR FLASH有地址线LADDRx、数据线LDATAx、片选信号nGCS0、读信号LnOE、写信号LnWE


这些信号控制线协调工作。


下面是芯片手册中存储控制器对芯片读数据时的时序图:

在这里插入图片描述

各个信号的持续时间根据外设芯片的性能有差异,可以根据具体芯片的手册进行设置,比如NOR FLASH:


(读时序)

在这里插入图片描述

对照AC特性:

在这里插入图片描述

然后就是配置各个信号线的时序:


可以看出,Taa=70ns时,同时发出保证了片选线、读信号线、地址线的时序,可以得到有效的数据


设置寄存器:

在这里插入图片描述

板子默认是14clocks,上电时,HCLK默认晶振12MHz,此时的Tacc=1166ns,相当于牺牲了性能来满足各种NOR FLASH。


我们配置当HCLK=100MHz时,1clock=10ns 所以选择8clock:101。


按照寄存器直接配置就可以了,可以通过烧写NOR FLASH的速度来体现时序中Tacc的影响。

推荐阅读

史海拾趣

AIRPAX公司的发展小趣事

AIRPAX的故事始于一个对电气保护和传感器技术充满热情的团队。在20世纪初,电气技术的快速发展为各种行业带来了巨大的变革。看到这一机遇,AIRPAX的创始人在美国马萨诸塞州的阿特波罗创立了这家公司,专注于传感器、电气保护器和控制器的设计与制造。最初,AIRPAX的产品主要服务于本地的小规模工业应用,但凭借其卓越的性能和可靠性,很快赢得了市场的认可。

启攀微(CHIPHOM)公司的发展小趣事

启攀微电子(CHIPHOM)的创始人们是一群从英美归国的留学精英和国内资深的技术人员。他们在2003年的一个深秋,聚集在上海漕河泾开发区的一间办公室里,怀揣着对集成电路技术的共同热爱和追求,决定创立自己的公司。初始阶段,公司面临着资金紧张、技术难度大等种种挑战,但他们凭借着对技术的执着追求和对市场的敏锐洞察,成功开发出了第一款LED背光驱动芯片,为公司的发展奠定了坚实的基础。

Carlo Gavazzi公司的发展小趣事

为了进一步拓展市场,Carlo Gavazzi公司开始实施国际化战略。公司先后在多个国家和地区设立销售和服务团队,将产品和服务推向全球市场。这一过程中,公司不仅面临着文化差异和市场环境的挑战,也积极寻求与当地企业的合作与共赢。通过不断努力,公司逐渐在全球范围内建立起自己的品牌形象和市场地位。

Bourns公司的发展小趣事

Bourns公司一直以来都注重技术研发与创新。不论是自行研发的产品,还是通过并购或特许所取得的技术,Bourns都持续投入于开发新产品。例如,Bourns推出的最新型旋转式电位器,具备绝缘塑料轴、高额定旋转周期以及宽泛的工作温度范围等特性,这些创新产品在市场上取得了良好的反响。

Eclipse Magnetics公司的发展小趣事

随着公司的不断发展,Bourns在1952年取得了世界上第一个可调式电阻的专利,即TrimpotR。这一技术突破标志着Bourns在电子元器件领域的领先地位,也为公司的产品线增添了核心竞争力。可调电阻的广泛应用推动了Bourns在电子行业的快速发展。

Friedrich Lütze GmbH公司的发展小趣事

在电子行业的萌芽期,Friedrich Lütze GmbH 由弗里德里希·吕策(虚构姓名,代表公司创始人)于20世纪中期创立。当时,电子行业正处于快速发展阶段,吕策凭借对电气技术的深厚理解和敏锐的市场洞察力,决定专注于工业自动化控制领域。公司初期主要研发和生产电子控制元件,如继电器和接触器,这些产品凭借高质量和稳定性迅速在市场上获得认可,为公司的后续发展奠定了坚实基础。

问答坊 | AI 解惑

求助关于基于单片机的数字PID调节问题

我正在做一个基于ATmega16单片机的直流调速系统 要用到PID控制 第一个问题是 怎么用ATmega16实现PID控制 第二个问题 怎么将PID的输出与PWM波的占空比联系起来…

查看全部问答>

Nios 视频学习

Nios工程创建视频学习教程 内容包括: (1)SOPC Builder 的使用创建工程方法 (2)Quartus中的配置 (3)Nios中C语言工程的创建 (4)Nios中Flash的下载…

查看全部问答>

数字转模拟(D/A) 隔离转换器485/232转4-20MA

数字转模拟(D/A) 隔离转换器:ISO DAO系列 RS232/RS485信号转模拟信号 隔离D/A转换器 产品概述: ISO DAO系列产品实现主机RS-485/232接口信号隔离转换成标准模拟信号,用以控制远程设备。ISODA系列产品可应用在 RS-232/RS-4 ...…

查看全部问答>

二个程序它们各有静态变量或静态区。它们的静态区和操作系统的静态区有什么不同?

二个程序它们各有静态变量或静态区。它们的静态区和操作系统的静态区(事件EVENT,互斥体Mutex存放的地方)有什么不同?…

查看全部问答>

转让友善micro2440sdk开发板

         本人去年7月份左右买了友善之臂的micro2440sdk开发板,现在将其转让,并且我愿意回答bootloader以及wince驱动的问题,其余不懂的我也会给一些意见。开发板网址http://www.arm9.net/micro2440sdk.asp就是这 ...…

查看全部问答>

刷卡支付功能的手机的相关技术

可以给我讲讲有关刷卡支付功能的手机的关键开发技术吗?…

查看全部问答>

求解答,工具是ccs2.2,读写flash空间和Clist问题

1.目前要把VC的程序刻录到板子上,请问原程序中用的是CList, c里面有替代的或差不多的吗?如果有,头文件是什么?刚接触这个,挺迷糊,刚 从一个辞职的同事上接手个半成品程序。 2. 请问怎么往板子里的flash空间写数据? typedef struct & ...…

查看全部问答>

WINCE 5.0 Proxy 客户端设置问题?

针对于Platform builder(Windows CE 5.0)的模拟环境下采用WININET API进行设置,通过Proxy访问外部网,其中Proxy需要认证,却可以通过,而相应的OS烧录入设备中却不通,何故?? PS. 应用WININET相关API如下:InternetOpen, InternetConnect, InternetS ...…

查看全部问答>

一个不知名的符号

读程序的时候突然发现的,volatile   GPIO   PA @ 0x5000; volatile   GPIO   PB @ 0x5005; 其中@ 符号是什么意思呢,请教各位大虾了!最好能具体点,关于这个符号的,谢谢!…

查看全部问答>

stm32解码sd卡中的gif图片

http://www.tudou.com/programs/view/m6V_0mbM0-k/…

查看全部问答>