1、从NOR flash启动时,pc指向NOR flash的零地址;从NAND flash启动时,pc指向芯片内部的SRAM令地址,并在启动阶段,将NAND flash前4K程序转移到片内SRAM
2、片外SDRAM的起始地址为0x30000000(s3c2440只有bank6和bank7能接sdram,bank6起始地址为0x30000000),当NAND flash内的程序远大于4k时,需通过前4k程序,将NAND flash内程序拷贝到SDRAM,再将pc指向SDRAM运行(指向手段采取ldr)。
3、所谓N字节对齐,就是根据其存储地址0x***%N==0?,等于零时,可选为存储地址,不为零时,递增改变地址,直到等于零位止。N值由有效对齐位确定,有效对齐位时自身对齐位和指定对齐位中较小一个。对于结构体和类,自身对齐位为其成员最大对齐位,最终结构体或类所占空间应是自身对齐位的整数倍。
4、arm-linux-ld中-T所指定的链接地址只是表明程序理论上应该运行的地址,等价于反编译后第一列的链接地址,但并不等于实际运行地址。当理论与实际相符合时,即进入了主程序
5、s3c2440的sdram芯片K4S561632C使用13根地址线访问32M内存空间实现办法:存储块分为BANK0~BANK3,行地址13位,列地址9位,复用A0-A12。行列地址构成的地址空间为2^22=4194304=4096k=4M,即行列地址可以在一个存储块上寻址4M个存储单元,每个存储单元可存储2个字节(即16位),故在一个存储块上可以寻址8M存储空间,4个存储块即为32M。
6、sdram芯片共占用13根行地址线+9跟列地址线+2根bank选择线=标号24根s3c2440地址线,实际由于复用端口致用了15根。sdram的A0接S3C的addr2,bank接24、25。原因是:sdram本是16位数据线,而arm是32位处理器,一次性要发出32位数据即4字节,通常将两块16位sdram芯片并列组成32位进行接收,并联芯片所使用地址为同一地址。由上条可知,sdram一个地址对应的存储空间是两个字节,当并联后对应4个字节,但arm是一个地址对应一个字节,即一个sdram地址,对应arm的4个地址。由于arm读写数据时,地址格式也刚好是4字节对齐,即以0x00、0x04、0x08……递增,对应于sdram的0、1、2……。即arm想得到0x04-7数据时,发出指令0x04,此时访问sdram的0x01就可以满足,为了让arm发出的0x04到sdram中为0x01,即将0x0000 0100变成0x0001,只需在接线时相对arm左移两个位,即左移两个口。
观点二:地址的尾端r0、r1当同时取1时,代表的值等于3,小于arm指令对齐值4的限制,接不接无影响。