
ARM
BugSu
一不小心喜欢了机器人,一不小心喜欢了嵌入式,又一不小心做了coder。
展开
-
SDRAM的逻辑Bank与芯片容量表示方法
1、逻辑Bank与芯片位宽 简单地说,SDRAM的内部是一个存储阵列。因为如果是管道式存储(就如排队买票),就很难做到随机访问了。阵列就如同表格一样,将数据“填”进去,你可以把它想象成一张表格。和表格的检索原理一样,先指定一个行(Row),再指定一个列(Column),我们就可以准确地找到所需要的单元格,这就是内存芯片寻址的基本原理。对于内存,这个单元格可称为存储单元,那么这个表格(存储阵列)叫什么呢?它就是逻辑Bank(Logical Bank,下文简称L-Bank)。L-Bank存储阵列示意图转载 2011-01-24 15:48:00 · 800 阅读 · 0 评论 -
DRAM, SRAM, SDRAM的关系与区别
<br /><br />DRAM,动态随机存取存储器,需要不断的刷新,才能保存数据.而且是行列地址复用的,许多都有页模式。 ARM<br />SRAM,静态的随机存取存储器,加电情况下,不需要刷新,数据不会丢失,而且,一般不是行列地址复用的。 ARM开发论坛<br />SDRAM,同步的DRAM,即数据的读写需要时钟来同步。 DRAM和SDRAM由于实现工艺问题,容量较SRAM大。但是读写速度不如SRAM,但是现在,SDRAM的速度也已经很快了,时钟似乎已经有 150兆的了。那么就是读写周期小于10ns了。转载 2011-01-24 15:47:00 · 836 阅读 · 0 评论 -
s3c2440对nandflash的操作
nandflash在对大容量的数据存储中发挥着重要的作用。相对于norflash,它具有一些优势,但它的一个劣势是很容易产生坏块,因此在使用nandflash时,往往要利用校验算法发现坏块并标注出来,以便以后不再使用该坏块。nandflash没有地址或数据总线,如果是8位nandflash,那么它只有8个IO口,这8个IO口用于传输命令、地址和数据。nandflash主要以page(页)为单位进行读写,以block(块)为单位进行擦除。每一页中又分为main区和spare区,main区用于正常数据的存储,s转载 2011-01-25 11:31:00 · 3866 阅读 · 1 评论 -
S3C2410 bootloader vivi阅读笔记
<br /><br />建议读一读《嵌入式系统Boot Loader技术内幕》(詹荣开著),google一下就会找到一片。什么是Bootloader就不再这里废话了,看看上面的文章就明了了。 Bootloader有很多种,如本文将要阅读的vivi,除此之外还有uboot,redboot,lilo等等。Vivi 是韩国mizi公司专门为三星s3c2410芯片设计的Bootloader。<br />先来看看vivi的源码树:<br />vivi-+-arch-+-s3c2410<br />|-Documenta转载 2011-01-27 21:06:00 · 849 阅读 · 0 评论 -
VIVI中MTD驱动的实现(1)
<br /><br />在vivi中使用的flash有nor和nand,而mtd的作用就是提供一个中间层的驱动,实现接口函数的统一管理,这里首先介绍nand flash在mtd中的实现。<br />在vivi bootloader中,第6步的时候就是实现mtd中间驱动的实现,MTD驱动的函数调用关系如下:<br />mtd_dev_init()---->mtd_init()---->smc_init()在这里需要说明,mtd_init()函数可以按照配置调用不同的函数,包括cfi_init(),smc_in转载 2011-01-27 23:20:00 · 825 阅读 · 0 评论 -
基于MTD的NAND驱动开发
<br />○、说明 大约用了两个礼拜不到的时间为公司的IPcamera系统写了基于MTD的NAND驱动(linux-2.6.22.10内核),目前已可以在该驱动的支持下跑cramfs和jffs2文件系统,另外,该驱动也可以同时支持small page(每页512 Byte)和big page(每页2048 Byte)两种NAND芯片。在此整理一下与NAND驱动相关的概念,结构体,驱动框架和流程,同时分析一下基于MTD的NAND驱动的部分函数,尤其是其中的nand_scan()函数。(涉及到具体NAND芯片转载 2011-01-29 00:41:00 · 452 阅读 · 0 评论 -
ARM 汇编 伪指令 MACRO及MEND
原文链接:http://hi.baidu.com/wypnewbie/blog/item/fd315f5128a009571138c22a.htmlMACRO伪操作标识 宏定义的开始,MEND标识宏定义的结束。用MACRO 及MEND定义一段代码,称为宏定义体,这样在程序中就可以通过宏指令多次调用该代码段语法格式MACRO{$label} macroname {$parameter {,$p转载 2011-06-23 23:54:00 · 1136 阅读 · 0 评论 -
原来程序是这样从NandFlash拷贝并跳转到SDRAM的
重新看了一下FL2440的BootLoader,终于把程序是怎样从Nandflash拷贝并跳转到SDRAM的过程弄清楚了,在这边做一下笔记。先上张图: 1.当S3C2440被配置成从Nand Flash启动时, S3C2440的Nand Flash控制器会在原创 2011-07-05 02:31:14 · 6642 阅读 · 4 评论 -
关于s3c2410 中断异常处理
知道原文作者是:蔡于清,原文链接无法打开s3c2410的中断异常处理模块总共由以下寄存器构成SRCPND(SOURCE PENDING REGISTER)INTMOD(INTERRUPT MODE REGISTER)INTMSK(INTERRUPT MASK转载 2011-09-08 19:51:58 · 686 阅读 · 0 评论 -
【ARM】2440init.s文件分析(3)
; 注意adr得到的是 相对 地址,非绝对地址 == if use Multi-ice, bne copy_proc_beg ;如果!=0,说明在using ice, 这种情况也不读取NAND FLASH. don't read nand flash for boot;nop;==============这一段代码完成从NAND Flash读代码到RAM=====================nand_boot_beg ; mov r5, #NFCONF ;首先设定NAND的一些控制寄存器;se转载 2011-01-21 08:48:00 · 628 阅读 · 0 评论 -
【ARM】2440init.s文件分析(2)
;这里引入一些在其它文件中实现在函数,包括为我们所熟知的main函数 ;IMPORT MMU_SetAsyncBusMode ;IMPORT MMU_SetFastBusMode ;hzh IMPORT Main;从这里开始就是正真的代码入口了! AREA Init,CODE,READONLY ;这表明下面的是一个名为Init的代码段 ENTRY ;定义程序的入口(调试用) EXPORT __ENTRY ;导出符号_ENTRY,但在那用到就还没查明__ENTRYResetEntry;1)Th转载 2011-01-21 08:48:00 · 614 阅读 · 0 评论 -
ARM的AREA指令的使用
<br /><br />AREA指令指示汇编程序汇编新的代码节或数据节。节是不可分的已命名独立代码或数据块,它们由链接器处理。有关详细信息,请参阅ELF节和AREA指令。<br />语法<br /> AREA sectionname{,ATtr}{,ATtr}...<br />其中:<br /> sectionname<br />是将要指定的节名。<br />可以为节选择任何名称。但是,以数字开始的名称必须包含在竖杠内,否则会产生一个缺失节名错误。 例如,|1_DATaArea|。有些名称是习惯转载 2011-01-24 21:45:00 · 9774 阅读 · 1 评论 -
ARM中断学习一/[友善2440test中的中断处理部分]
<br /><br />《 嵌入式开源网:www.embedos.org ,不可错过的网站,有兴趣的朋友还可以做版主,开源、共享、免费!——博主推荐 》<br />一直在看2440的中断处理部分,不懂的实在太多了,百度到这篇文章,实在有听君一席话,胜养十年猪的感觉啊,下面上文章:<br />中断向量 <br /> b HandlerIRQ ;handler for IRQ interrupt <br />很自然,因为所有的单片机都是那样,中断向量一般放在开头,用过单片机的人都会很熟悉转载 2011-01-24 23:39:00 · 671 阅读 · 0 评论 -
ARM汇编伪指令介绍
在 ARM 汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。 在 ARM 的汇编程序中,有如下几种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪指令。 符号定义( Symbol Definition )伪指令 符号定义转载 2011-01-21 10:14:00 · 495 阅读 · 0 评论 -
ARM立即数,LDR和MOV的区别
Mov 是把立即数赋给一个寄存器,但对立即数的范围有要求。只能是由8bit连续有效位通过偶数次移位能得到的数。如果立即数超出这个范围,就没办法用一条MOV指令给寄存器赋值。LDR除了普通的读数之外,也有给寄存器赋立即数的功能。你只要写 LDR R0,=0xabcdef它没有立即数范围的限制。因为这是一条伪指令。如果立即数在MOV的要求内,那就用一条汇编来实现。如果不在Mov的范围内,就用其它方式实现,如变成两条指令,或从PC偏移地址读一个32位数给寄存器。MOV是从一个寄存器或者移位的寄存器或者立即数的值传转载 2011-01-21 16:44:00 · 442 阅读 · 0 评论 -
S3C2410中断处理
在进入正题之前,我想先把ARM920T的异常向量表(Exception Vectors)做一个简短的介绍。:]ARM920T 的异常向量表有两种存放方式,一种是低端存放(从0x00000000处开始存放),另一种是高端存放(从0xfff000000处开始存放)。关于为什 么要分两种方式进行存放这点我将在介绍MMU的文章中进行说明,本文采用低端模式。ARM920T能处理有8个异常,他们分别是:Reset,Undefined instruction,Software Interrupt,Abort (prefe转载 2011-01-22 15:34:00 · 834 阅读 · 0 评论 -
DRAM SRAM SDRAM 说明精典完整版
<br />问题1:什么是DRAM、SRAM、SDRAM?<br />答:名词解释如下<br />DRAM--------动态随即存取器,需要不断的刷新,才能保存数据,而且是行列地址复用的,许多都有页模式<br />SRAM--------静态的随机存储器,加电情况下,不需要刷新,数据不会丢失,而且一般不是行列地址复用的<br />SDRAM-------同步的DRAM,即数据的读写需要时钟来同步<br /><br />问题2:为什么DRAM要刷新,SRAM则不需要?<br />答:这是由RAM的设计类型决转载 2011-01-24 15:46:00 · 688 阅读 · 0 评论 -
【ARM】2440init.s文件分析(1)
;=========================================; NAME: 2440INIT.S; DESC: C start up codes; Configure memory, ISR ,stacks; Initialize C-variables; 完全注释; HISTORY:; 2002.02.25:kwtark: ver 0.0; 2002.03.20:purnnamu: Add some functions for testing STOP,转载 2011-01-21 08:46:00 · 631 阅读 · 0 评论 -
RAM,SRAM,SDRAM工作原理 之一
<br /><br />为了便于不同层次的读者都能基本的理解本文,所以我先来介绍一下很多用户都知道的东西。RAM主要的作用就是存储代码和数据供CPU在需要的时候调用。但是这些数据并不是像用袋子盛米那么简单,更像是 图书馆中用有格子的书架存放书籍一样,不但要放进去还要能够在需要的时候准确的调用出来,虽然都是书但是每本书是不同的。对于RAM等存储器来说也是一样的,虽然存储的都是代表0和1的代码,但是不同的组合就是不同的数据。<br /> 让我们重新回到书和书架上来,如果有一个书架上有10行和10列格子(每行和转载 2011-01-24 15:42:00 · 1237 阅读 · 0 评论 -
RAM,SRAM,SDRAM工作原理 之二
关于Bank的问题 前面我们讲述的都是8bit的内存,现在这种东西我们基本上都接触不到了,更常用的是32bit、64bit或者128bit。由于前面我们已经讲到了4Mx1bit模块实现bit输入输出的方法,所以我们很容易想到我们把足够多的芯片放在一个模块中就可以了。不过在实际应用中,仅仅这样做还是不行的,这里就需要引入bank的概念,bank是由多个模块组成的。请看下面的示意图: 上面的示意图显示的是由4组8bit模块组成的一个bank,如果构成模块的是4194304 x 1芯片,那么每个模块的架构应该转载 2011-01-24 15:43:00 · 768 阅读 · 0 评论 -
RAM,SRAM,SDRAM工作原理 之三
<br />在介绍FPM的读取过程的最后我着重提到了 FPM DRAM是在上一次的数据读取完毕才会进行下一个数据的读取,但是对于EDO DRAM却是完全不一样的。EDO DRAM可以在输出数据的同时进行下一个列地址选通,我们依然结合下面的EDO读取时序图来了解EDO DRAM读取数据的过程:<br /> <br /><br /><br /> <br /> 1、RAS在结束上一次的读取操作之后,进入预充电状态,当接到读取数据的请求之后,行地址首先通过地址总线传输到地址引脚,在这个期间CAS依然处于预充电转载 2011-01-24 15:44:00 · 1217 阅读 · 0 评论 -
PX2摄像头驱动调试笔记
soc_camera_probe{ if (icl->board_info) { ret = soc_camera_init_i2c(icd, icl); } ret = soc_camera_video_start(icd);}原创 2015-11-24 10:52:17 · 1612 阅读 · 0 评论