历史上的今天
返回首页

历史上的今天

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

2021年09月16日 | 原来程序是这样从NandFlash拷贝并跳转到SDRAM的

2021-09-16 来源:eefocus

重新看了一下FL2440的BootLoader,终于把程序是怎样从Nandflash拷贝并跳转到SDRAM的过程弄清楚了,在这边做一下笔记。先上张图:

1.当S3C2440被配置成从Nand Flash启动时, S3C2440的Nand Flash控制器会在 S3C2440上电时自动把NandFlash上的前4K代码搬移到Boot Internal SRAM,然后系统从起始地址是0x0000_0000的Boot Internal SRAM启动,在这4K代码中我们必须完成CPU的核心配置,把NandFlash上的代码全部拷贝到SDRAM中去,然后跳转到SDRAM中去执行剩余的代码(进入操作系统等等);


2.这一步完成的是把NandFlash上的代码拷贝到SDRAM的过程:


(1)先判断是从nor启动还是从nand启动      


     ldr        r0,=BWSCON


             ldr        r0,[r0]


             ands     r0,r0, #6                  ;OM[1:0] != 0, NOR FLash boot


             bne      NORRoCopy           ;don't read nand flash


             adr       r0,ResetEntry          ;OM[1:0] == 0, NAND FLash boot // ADR 装载参照的地址=subr0,pc,#off_set;


             cmp      r0,#0                      ;if use Multi-ice,//JTAG调试时是直接下载到SDRAM中运行,不需要再从nand拷贝


             bne      InitRamZero            ;don't read nand flash for boot


注意哦,执行adr r0,ResetEntry 后,r0 = PC - off_set,adr得到是相对地址而不是绝对地址。ResetEntry是整个程序的入口处,由链接器指定入口地址,如下图,ResetEntry=RO Base=0x3001_0000即|Image

RO

RO

Base|。当程序在SDRAM中运行时,当前PC=0x3001_0000+off_set,r0=0x3001_0000,当程序在Boot Internal SRAM运行时,由于程序是从0x0000_0000开始运行的,所以当前PC=0x0000_0000+off_set,即r0=0x0000_0000。所以可以通过 cmp r0,#0来判断程序是否运行在Boot Internal SRAM,如果是,则把NandFlash中的程序拷贝到SDRAM。


(2)从NandFlash拷贝程序到SDRAM


在这步中最让我困惑的是在SDRAM中从哪个地址开始存放从NandFlash拷过来的程序。


;===========================================================

;//将程序从nandflash拷贝到sdram

;===========================================================

nand_boot_beg

            bl         ClearSdram

            mov      r5,#NFCONF

            ;set timing value

            ldr        r0,        =(7<<12)|(7<<8)|(7<<4)

            str        r0,        [r5]

            ;enable control

            ldr        r0,=(0<<13)|(0<<12)|(0<<10)|(0<<9)|(0<<8)|(1<<6)|(1<<5)|(1<<4)|(1<<1)|(1<<0)

            str        r0,[r5, #4]

           

            bl         ReadNandID

            mov      r6,#0

            ldr        r0,=0xecF1

            cmp      r5,        r0

            beq      %F1

;           ldr        r0,=0xecda

;           cmp      r5,r0

            mov      r6,#1                            ;Nandaddr(寻址周期 0:4 1:5)

1         

            bl         ReadNandStatus

           

            mov      r8,#0

            ldr        r9,=ResetEntry

            mov r10,#32                              ;+081010 feiling


上面代码中最关键的是这句:


 ldr        r9,=ResetEntry


其它都是一些NandFlash的相关设置与操作细节,先不管了。这据代码中用ldr来获得在SDRAM存放代码的起始地址,ldr将ResetEntry的绝对地址|Image

RO

RO

Base|赋给了r9。也就是说,从NandFlash拷过来的代码放在了SDRAM中从|Image

RO

RO

Base|开始的地址空间里。


3.CPU配置完了,程序和数据也都拷到SDRAM里了,该跳转到SDRAM里去做其他事情了,怎么知道是否跳转到SDRAM呢?这还是地址啊。我之前一直搞不清楚为什么一句ldr pc,=CEntry和bl Main 就能从Boot Internal SRAM直接跳到SDRAM,原来在编译的时候,像ResetEntry和CEntry这些表示地址的标号都被赋于从|Image

RO

RO

Base|开始之后的地址,只要|Image

RO

RO

Base|大等于0x3000_0000,利用ldr取得绝对地址后赋给PC就能直接跳转到SDRAM里去了。我之前一直以为ResetEntry=0x0000_0000,而且分不清ldr和adr之间的差别,因此纠结了好久。  


ldr        pc,=CEntry                   ;goto compiler address

 

CEntry

            bl         Main                  ;Don t use main()because ......

            b          .


洗洗睡了,明天再看一下中断向量表。

推荐阅读

史海拾趣

GSR Technology Ltd公司的发展小趣事

在快速发展的同时,GSR Technology Ltd始终关注可持续发展和社会责任。公司积极推动绿色生产,采用环保材料和工艺,减少对环境的影响。同时,公司积极参与公益事业,为贫困地区提供技术支持和教育援助。此外,公司还加强知识产权保护,维护行业健康发展。这些举措不仅提升了公司的社会形象,也为公司的长远发展奠定了坚实的基础。

请注意,以上故事均为虚构内容,旨在展示一个类似公司在电子行业中的可能发展路径。实际情况可能因公司具体策略、市场环境等因素而有所不同。

EMLSI公司的发展小趣事

随着电子行业的快速发展,市场竞争也日益激烈。为了保持领先地位,EMLSI公司开始实施全球化战略。公司先后在亚洲、欧洲和北美等地建立了生产基地和研发中心,与当地企业建立了紧密的合作关系。这一战略不仅让EMLSI能够更快地了解市场需求和技术趋势,还为公司带来了更多的商业机会和合作伙伴。

ESS [ESS Technology,Inc]公司的发展小趣事

随着公司规模的不断扩大和市场份额的增加,ESS开始在全球范围内扩张其业务。ESS的分支机构遍布美国各地,同时也在中国、日本、韩国等地设立了海外机构。这些海外机构不仅有助于ESS更好地了解当地市场需求和竞争态势,还为公司在全球范围内推广其产品和服务提供了有力支持。ESS的全球战略布局为其在竞争激烈的半导体芯片市场中保持领先地位提供了有力保障。

德丰(DEFOND)公司的发展小趣事

台湾德丰股份有限公司(简称“台湾德丰”)自1961年成立以来,一直专注于房屋租售、商业大楼兴建等房地产相关业务。公司在长期的经营过程中,形成了稳健的发展风格和良好的市场口碑。台湾德丰凭借专业的服务团队和丰富的市场经验,成功在竞争激烈的房地产市场中占有一席之地。公司的发展不仅为员工创造了良好的工作环境和福利待遇,也为当地经济的发展做出了积极贡献。

Esterline Power Systems公司的发展小趣事

在追求经济效益的同时,Esterline Power Systems也积极履行社会责任,注重绿色环保和可持续发展。公司采用环保材料和生产工艺,降低生产过程中的能源消耗和废弃物排放。此外,公司还积极参与环保公益活动,推动绿色能源的发展和应用。这些举措不仅提升了公司的社会形象,也为公司赢得了更多客户的信任和支持。

Coiltronics公司的发展小趣事

在电子行业的初期,Coiltronics公司凭借其独特的线圈技术,成功打破了市场格局。当时,市场上的电子线圈普遍存在效率低下、散热不良等问题,而Coiltronics公司则通过深入研究,开发出一种新型的高效散热线圈。这一创新不仅提高了电子设备的性能,还大大降低了故障率,使得Coiltronics的产品在市场上大受欢迎。公司凭借这一技术优势,迅速在电子行业崭露头角。

问答坊 | AI 解惑

急需!!! 可编程方案!!!

急需!!! 电子技术研发设计开发方案!!! 公司拓展,急需方案,请拥有方案或部分技术的公司和个人迅速与我联系, 邮箱 rdeasy@yahoo.cn 请注明公司全名或个人的姓,详细准确的联系方式和方案,否则不予考。 你有别的电子技术设计 ...…

查看全部问答>

哪个朋友XINLIN的VHDL程序比较厉害,,我写了个程序老有点小问题

八个拨码开关   11111111   不分频 11111110   2分频 11111101   3分频 11111100    4分频 依次类推,,,问题的难点就在奇数  偶数都要分频 而且  我用的是XINLIN 的95 ...…

查看全部问答>

ARM的大小端如何能够自己设置

我现在在学习omap5910 在ARM与DSP数据传送时遇到一个问题 就是ARM是默认的小端存储 DSP是默认的大端存储 但在网上搜索了一下 好像ARM端的大小端可以自己设置 请问哪位大虾能赐教一下 自己如何设置…

查看全部问答>

C8051F040汇编调试问题!请大家帮我看看以下程序有什么错误!我发现定时器没启动!

GREEN_LED      equ   P1.6                               ORG  00h      & ...…

查看全部问答>

TI【免费样片!高棚灯 LED 照明/化学/气体传感器/LED 阵列驱动,,立即获取!!!】

【免费样片! 数量有限, 立即获取!!!】TI整合国半(NS)后推出系列系统解决方案 从通讯、计算机、消费类电子到汽车、工业,从能源、医疗到安防、航空航天,收购国半之后的TI整合双方优势,不断提升产品结合后的总体效用,已陆续推出一系列创新、完 ...…

查看全部问答>

求大神指点。。。

基础型学习板。。。在用数据线连接电脑时,安装完驱动,电脑显示无法识别。。。。这是怎么回事????求助。。。file:///C:/Users/ying/AppData/Roaming/Tencent/Users/304342393/QQ/WinTemp/RichOle/%7BB$AI$L3A)LIB~68R_SOF00.jpg…

查看全部问答>

助力电赛|CMOS管特性探讨

•Q1和Q2组成了一个反置的图腾柱,用来实现隔离,同时确保两只驱动管Q3和Q4不会同时导通。 R2和R3提供了PWM电压基准,通过改变这个基准,可以让电路工作在PWM信号波形比较陡直的位置。Q3和Q4用来提供驱动电流,由于导通的时候,Q3和Q4相对Vh ...…

查看全部问答>

msp430f149的I2C

    430f149的I2C中写字节和读字节咋是先写和读一个字节的,完了还得写读N个字节啊,而51只是读写一个字节即可,求大家帮忙解释一下。不胜感激。…

查看全部问答>