免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 871 | 回复: 0
打印 上一主题 下一主题

uboot流程+NAND地址 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-23 22:42 |只看该作者 |倒序浏览
0x00000000 中断向量表
  start_code

ram启动   bl cpu_init_crit

不在SDRAM,就在FLASH,那么直接跳到stack_setup
we load ourself to 33F8'0000
# download area is 3300'0000
TEXT_BASE = 0x33F80000
/***************** CHECK_CODE_POSITION ******************************************/
adr r0, _start /* r0 <- current position of code   */
ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
cmp r0, r1 /* don't reloc during debug         */
beq stack_setup
/***************** CHECK_CODE_POSITION ******************************************/

不是NANDFLASH,就意味着是NORFLASH,那么就把所有代码拷贝到SDRAM,即跳到relocate
如果是NANDFLASH的话,那么就是NANDFLASH的初始化,然后也把所有代码拷贝到SDRAM
/***************** CHECK_BOOT_FLASH ******************************************/
ldr r1, =( (4<<28)|(3<<4)|(3<<2) ) /* address of Internal SRAM  0x4000003C*/
mov r0, #0 /* r0 = 0 */
str r0, [r1]


mov r1, #0x3c /* address of men  0x0000003C*/
ldr r0, [r1]
cmp r0, #0
bne relocate

/* recovery  */
ldr r0, =(0xdeadbeef)
ldr r1, =( (4<<28)|(3<<4)|(3<<2) )
str r0, [r1]
/***************** CHECK_BOOT_FLASH ******************************************/






 32   `31 30 29 28 27 26 25 24   `23 22 21 20 19 18 17 16   `15 14 13 12 11 10 9 8   `7 6 5 4 3 2 1 0
 28   `27 26 25 24 23 22 21 20   `19 18 17 16 15 14 13 12   ` -  -  -  - 11 10 9 8   `7 6 5 4 3 2 1 0 
 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@@@@@@@@@@@@@@@@@     ############################
28~18 哪一块          17~12 哪一页    11~0 页内

1device=2048块=131072页
1block =64页
1页    =2K+64B=2K(main)+64B(spare)

每一页中又分为main区和spare区,main区用于正常数据的存储,spare区用于存储一些附加信息,如块好坏的标记、块的逻辑地址、页内数据的ECC校验和等

1000页=64×15+40页=960+40页
1989页=64×31+ 5页=1984+5页

以page(页)为单位进行读写,
       NF_ADDR(0x00);                                   //列地址A0~A7
       NF_ADDR(0x00);                                  //列地址A8~A11
       NF_ADDR((page_number) & 0xff);                 //行地址A12~A19
       NF_ADDR((page_number >> 8) & 0xff);           //行地址A20~A27
       NF_ADDR((page_number >> 16) & 0xff);         //行地址A28

以block(块)为单位进行擦除
 //写入3个地址周期,从A18开始写起
       NF_ADDR((block_number << 6) & 0xff);         //行地址A18~A19
       NF_ADDR((block_number >> 2) & 0xff);         //行地址A20~A27
       NF_ADDR((block_number >> 10) & 0xff);        //行地址A28

Nand

没有地址线,只有8根数据线和控制信号线

在控制信号的作用下,地址线借用数据线

控制信号线直接接到CPU相应引脚上,控制信号线的状态由cpuNAND寄存器设置

 

操作方式:Nand内自己编址,

以字节为单位:256M=268435456b

以页为单位256M=131072

以块为单位256M=2048

 

硬件上对Nand访问,

一,发命令,CLEDATA BUS

二,给地址,ALEDATABUS

三,传输数据,R/WDATABUS


2440NAND的访问:即对这四个寄存器的操作

1,  NFCMND

2,  NFADDR

3,  NFDADA

4,  NFSTAT

读状态命令可以实现读取设备内的状态寄存器,通过该命令可以获知写操作或擦除操作是否完成

(判断第6位),以及是否成功完成(判断第0位) 

由2440datasheet图知:

TACLS:表示CLT/ALE的建立时间,CLE/ALE有效到nWE有效的时间

TWRPH0:表示WE为低电平的时间

TWRPH1:表示CLE/ALE的维持时间,nWE有效到CLE/ALE无效的时间


再看K9F2G08B的datasheet可知:

TACLS就相当于tCLS参数-tWP,=0ns

TWRPH0就相当于tWP,=21ns

TWRPH1就相当于tCLH,=5ns

取最小值:tCLS=21ns tCLH=5ns tWP=21ns 假设HCLK=100MHZ=10ns,则

TACLS=HCLK*TACLS >0ns   ->TACLS=1

TWRPH0=HCLK*(TWRPH0+1) >21ns ->TWRPH0=3 

TWRPH1=HCLK*(TWRPH1+1)  >5ns ->TWRPH1=0

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP