首先,SST39VF16 FLASH是16位的,也就是以两个字节(半字)为最小操作单位的。也就是说你在FLASH地址上给0x00000,则它给出的数据是第一个16位的半字;在FLASH地址上给0x00001,它给出的是第二个16位的半字;在FLASH地址上给0x00002,它给出的是第三个16位的半字。。。但ARM的地址是以字节编址的,它可以以字节单位来读取或者写外设。
假设我们要读取FLASH的第一个[color=#FF0000]字节[/color],LDRB R0,[R1];将R1内容写0x00000,这个时候ARM执行的是这样的操作:
1、送出地址0x00000
2、在D0-D15上读取数据
3、将读到的16位数据的[color=#FF0000]低[/color]8位给R0低8位(高24位为0)
假设我们要读取FLASH的第二个[color=#FF0000]字节[/color],LDRB R0,[R1];将R1内容写0x00001,
这个时候ARM执行的是这样的操作:
1、送出地址ox00001
2、在D0-D15上读取数据
3、将读到的16位数据的[color=#FF0000]高[/color]8位给R0的低8位(高24位为0)
从上面的操作可以看到,如果我们一一对应的将ARM和FLASH得地址连接,那么我们想读FLASH的第2个字节的话,就没有办法读到了。因为你地址给0x00001,FLASH就在数据线上给的是第3个字节和第4个字节的数据,并将高8位(FLASH的第4个字节)给R0;如果你给的地址是0x00000的话,ARM的理解就是将数据线D0-D15的低8位给R0,显然这个16位的数据是FLASH的第1个字节和第2个字节的数据,低8位指的就是第一个自己的数据。显然怎么也读不到FLASH的第2个数据。
我们既要遵循ARM的规则,又要让FLASH给我们正确的数据。你自己想应该怎么办?很简单,把ARM给的地址最低位剪掉,把剩下的给FLASH。要读第2个字节,还是送0x00001,但是最后的1被剪掉了,FLASH得到的地址是ox00000,显然给出的数据是第1个和第二个字节。而ARM觉得送出的地址是0x00001啊,应该把高地址给R0啊,即把第2个字节给了R0。就是一个“欺上瞒下”的过程。
关键字:ARM 存储器 地址线 错位连接
引用地址:
关于ARM和存储器地址线错位连接详解
推荐阅读最新更新时间:2024-03-16 15:04
ARM-linux-gcc交叉编译工具提示arm-linux-gcc can not find
在Ubuntu12.04下安装了arm-linux-gcc后,编译Linux内核发现提示arm-linux-gcc can not find,查找了相关的网络资料找到了答案。 一: 1:常规下,在用户目录下执行交叉工具的解压安装, 2 :并用sudo /etc/profile更改相应的环境变量。(相关查看OK6410Llinux用户手册的交叉工具安装) 3:source /etc/profile使修改的文件生效 4:查看交叉工具是否生效 :arm-linux-gcc -V 以上提示你安装的交叉工具链的把版本信息,但是你编译内核时,系统会
[单片机]
S3C2440A之ARM学习的所有的问题
正文: 问题1:关于Nor/Nand启动判断的问题: 视频讲解是用写0到 ,取出还是0则Nand启动,视频例程: mov r1, 0 ldr r0, str r1, ldr r2, cmp r1, r2 //如果r1 != r2, nor启动 ldr sp, =0x40000000 + 4096 //如果r1 == r2, nand启动 moveq sp, #4096 streq r0, 如果:拨码开关为Nor启动,Norflash 地址中数据原本 即为0,Nor启动不能写入,但cmp r1, r2时,r1==r2依然 成立,系统是否会判断为Nand启动?有没有影响?怎么判断? 答:1 【传说】hceng(13
[单片机]
arm cortex m0 lpc1114寄存器配置
32位的单片机内部各种数据寄存器和控制寄存器都是32位的,同理,8位单片机内部的数据和控制寄存器都是8位的。 例如: AT89C51单片机的“中断控制寄存器”IE定义如下图所示: bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 EA 保留 ET2 ES ET1 EX1 ET0 EX0 LPC1114的“AHB总线时钟控制寄存器”SYSAHBCLKCTRL定义如下图所示: bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit24 保留 保留 保留 保留 保留 保留 保留 保留 bit23 bit22 bit21 bit20 bit19 b
[单片机]
Ramtron推出高速和低电压的F-RAM存储器
Ramtron Internationa l Corporation 宣布 推出 新型 F-RAM 系列中的首款产品,具有高速读 / 写性能、低电压工作和可选器件的特性。 Ramtron 的 V 系列 F-RAM 产品的首款器件 FM25V10 ,是 1 兆位 (Mb) 、 2.0 至 3.6V 、具有串行外设接口 (SPI) 的非易失性 RAM ,采用 8 脚 SOIC 封装,其特点是快速访问、无延迟 ( NoDelay™) 写入、 1E14 读 / 写次数和低功耗。 FM25V10 是工业控制、计量、医疗、汽车、军事、游戏及计算机等应用领域 1Mb 串行闪存和串行 EEPROM 存储器的理想代替产品。此外, Ramtro
[工业控制]
内嵌USB设备的ARM微控制器
爱特梅尔推出基于ARM9 的微控制器AT91SAM9R64,目标市场为高性能的、具有USB接口的嵌入式控制应用。AT91SAM9R64可通过USB、SD卡或外接NAND闪存启动,从而减少保存程序和批量数据的存储器的数量。芯片采用球间距为0.8mm的10x10 mm BGA封装。 高速USB 传输速率高达480 Mbits/sec的高速USB正迅速成为连接设备与PC的标准。SAM9R64可以将现有的全速USB (速率为12 Mbits/sec)产品升级到高速USB,而无需对连接器进行任何物理改动。 可编程的存储器总线电压 除了支持传统的静态存储器外,SAM9R64的存储器总线接口还支持SDRAM和NA
[单片机]
ARM处理器的内存对齐处理
对齐问题主要有3点:变量对齐、结构对齐和数据对齐。前两点是编译器决定的变量映射和结构布局。最后一点与CPU的架构(CISC/RISC)有关。 在大多数情况下,对齐是编译器和CPU的事情,和程序员没什么关系。但在某些情况下,程序员又必须考虑对齐问题,否则会有一些麻烦。 0 约定和预备知识 0.1 地址边界 如果把字节看作小房子,内存就是顺序排列的小房子。每个小房子都有一个顺序编号的门牌号码,例如:0,1,2,...,0xffffffff。我们 把这个门牌号码称作地址。本文将2的整数倍的地址记作2n边界,将4的整数倍的地址记作4n边界,依此类推。显然每个地址都是1n边界,每个4n边界都是 2n边界,每个8n边界都是4n边界。
[单片机]
存储器老大三星的代工梦
三星是全球存储器老大,去年仰仗价格大幅上扬,它的销售额已经超过英特尔居首位,如今要涉足代工,而且来势汹汹,不可否认全球半导体业呈三足鼎立,英特尔、台积电及及三星,它们各有所长,竞争会十分激烈。 2017年三星高调宣布要进入代工领域,并要在未来的五年内实现代工的市占率达到25%。当时觉得它“信口开河”,是不可能的事,因为它的竞争对手是台积电。 一年过后,重新审视三星的系列动作,发现可能要修正之前的认识,因为三星的代工策略有独特之处。 2018跃升老二 据IC Insight最新统计,2018全球代工排名预测,三星已经跃居笫二,超过格罗方德,由2017年的46亿美元,市占6%,上升至今年的100亿美元,市占至1
[嵌入式]
基于ARM7处理器LPC2119的USB-CAN转换器设计
引言 控制器局域网(controller area network,CAN)是20世纪80年代德国BOSCH公司为现代汽车应用而推出的一种多主机局部网,由于CAN总线具有可靠性高、功能完善、成本合理、实时性等优点,CAN总线早已不再局限于汽车行业,而被广泛应用于各个自动化控制系统中,例如汽车电子、工业控制、智能大厦、安防监控、环境控制等。目前CAN总线是国际上应用最广泛的现场总线之一。通用串行总线(universalserial bus,USB)作为一种协议规范,是以Intel为首的7家计算机及通信产业厂商公司于1994年11月共同提出,其除具有使用方便(即插即用)、功耗低、数据传输率高等优点外,还具有软硬件支持广泛、功耗低、
[单片机]