请教各位,我在运行flash的烧写程序的时候resume 按钮成灰色的不能使用
请问大家有没有遇到过?希望有经验的坛友指导一下!运行环境是ccs5.5 tms6747 xds100v1
Denny%20Yang99373:
先按暂停,应该就绿了
yang gao8:
回复 Denny%20Yang99373:
谢谢你回复,使用暂停后确实可以再次使用resume。
我有其他的一些问题关于nandflash
1、当通过cs3连接nandflash的时候,以0x62000000开始的地址里面对应的寄存器是什么作用呢? 我在手册上没有找到,只是通过程序感觉0x62000000是数据寄存器?
2、#define NAND_READ_RB ( ( *( volatile Uint32* )( 0x01E00064 ) ) & 1 ) 为什么取0x01E00064指向的数据
以上两个都是在nandflash.h文件夹的,
Look forward to your reply
Denny%20Yang99373:
回复 yang gao8:
1,0×62000000起始是CS3的片选空间,这块应该对应着NAND的片上资源
2, ( ( *( volatile Uint32* )( 0x01E00064 ) ) & 1 )把0x1e00064地址的内容取出来,再&1.
yang gao8:
回复 Denny%20Yang99373:
谢谢您的回复
可能我提问的不是很清楚
1、0x62000000不是和nand flash一一映射的吧,访问nandflash都是通过发送命令和地址来进行操作的。我看三星的芯片对应nand flash的片选空间都是定义的一些命令寄存器数据寄存器和地址寄存器。 但是在c6747的手册上没有找到说明
2、我清楚后边定义的含义但是不明白为什么 是要 取0x01E00064地址的内容,这个地址对应的不是usb0???
谢谢
Tony Tang:
回复 yang gao8:
yang gao81、0x62000000不是和nand flash一一映射的吧,访问nandflash都是通过发送命令和地址来进行操作的。我看三星的芯片对应nand flash的片选空间都是定义的一些命令寄存器数据寄存器和地址寄存器。 但是在c6747的手册上没有找到说明
0x62000000只代表对应的CS3,即访问0x62xxxxxx开始的地址空间,则CS3有效,对于NAND,不是地址映射方式访问,所以其它地址与NAND没有关系了。至于访问NAND内部的寄存器,是通过CMD, ALE结合数据线送出相应的命令。而相应的命令是NAND要求的,在它的手册上定义,其实都是标准的,与C6747无关。
yang gao82、#define NAND_READ_RB ( ( *( volatile Uint32* )( 0x01E00064 ) ) & 1 ) 为什么取0x01E00064指向的数据
以上两个都是在nandflash.h文件夹的,
这是哪个软件包下的代码?
yang gao8:
回复 Tony Tang:
/**Copyright 2009 by Spectrum Digital Incorporated.*All rights reserved. Property of Spectrum Digital Incorporated.*//**nandflash header file**/#include "evmomapl137.h"#ifndef NANDFLASH_ #define NANDFLASH_#define USE_ECC/* ------------------------------------------------------------------------ **Flash Device - SAMSUNG NAND Flash Memory K9F5608U0B** ------------------------------------------------------------------------ */ #define MFG_SAMSUNG0xEC #define K9K2G08U0M0xDA #define K9K2G08U0M_PAGE_COUNT64 * 2048#define DEV_K9F5608U0B0x75 #define DEV_K9F5608U0B_PAGE_COUNT32 * 2048 // 32 pages * 2048 blocks#define DEV_K9F5608Q0B0x35 #define DEV_K9F5608Q0B_PAGE_COUNT32 * 2048 // 32 pages * 2048 blocks#define DEV_K9F2808U0C0x73 #define DEV_K9F2808U0C_PAGE_COUNT32 * 1024 // 32 pages * 1024 blocks#define DEV_K9K1208Q0C0x36 #define DEV_K9K1208Q0C_PAGE_COUNT32 * 4096 // 32 pages * 4096 blocks#define DEV_SMCARD_1280x79 #define DEV_SMCARD_128_PAGE_COUNT32 * 8192 // 32 pages * 8192 blocks#define MFG_STI0x20#define DEV_NAND512W3A0x76 #define DEV_NAND512W3A_PAGE_COUNT32 * 4096/* ------------------------------------------------------------------------ **Flash Memory Property Definitions** ------------------------------------------------------------------------ */ #define NAND_BASE 0x62000000 // SNAND.CS0 BASE#define NAND_PAGESIZE2 * 1024 #define NAND_PAGESIZE_POW29 #define NAND_SPARESIZE64//64 #define NAND_SPARESIZE_POW24 #define NAND_PAGES_PER_BLOCK128//64 #define NAND_PAGES_PER_BLOCK_POW25#define NAND_BLOCKSIZE\NAND_PAGESIZE * NAND_PAGES_PER_BLOCK#define NAND_BLOCKSIZE_POW2\NAND_PAGESIZE_POW2 + NAND_PAGES_PER_BLOCK_POW2/* ------------------------------------------------------------------------ **NAND Flash Command Codes** ------------------------------------------------------------------------ */ #define CMD_READ0x00 #define CMD_READ_CONFIRM0x30 #define CMD_READ_HALF0x01 #define CMD_READ_SPARE0x50 #define CMD_READID0x90 #define CMD_RESET0xFF #define CMD_POINTER_MAIN0x00 #define CMD_POINTER_MAIN_HALF0x01 #define CMD_POINTER_SPARE0x50 #define CMD_PROGRAM0x80 #define CMD_PROGRAM_CONFIRM0x10 #define CMD_COPYBACK0x00 #define CMD_COPYBACK_CONFIRM0x35 #define CMD_ERASE0x60 #define CMD_ERASE_CONFIRM0xD0 #define CMD_STATUS0x70 #define CMD_CHIP1_STATUS0xF1 #define CMD_CHIP2_STATUS0xF2/* ------------------------------------------------------------------------ **NAND Flash Status Register Definitions** ------------------------------------------------------------------------ */ #define CMD_STATUS_SUCCESS0xFFFE #define CMD_STATUS_ERROR0x0001 #define CMD_STATUS_BUSY0xFFBF #define CMD_STATUS_READY0x0040 #define CMD_STATUS_WPROTECT0xFF7F #define CMD_STATUS_NOWPROTECT0x0080/* ------------------------------------------------------------------------ **NAND Flash Memory Data Pointer** ------------------------------------------------------------------------ */ #define NAND_BASE_PTR *( volatile Uint8* )( NAND_BASE + 0x00 ) #define NAND_CLE_PTR *( volatile Uint8* )( NAND_BASE + 0x10 ) #define NAND_ALE_PTR *( volatile Uint8* )( NAND_BASE + 0x08 )#define NAND_ASSERT_CE( ); #define NAND_DEASSERT_CE( ) ;#define NAND_READ_RB ( ( *( volatile Uint32* )( 0x01E00064 ) ) & 1 )/* ------------------------------------------------------------------------ **NAND Flash R/B functions** ------------------------------------------------------------------------ */ #define NAND_ERR_NOERROR( 0 ) #define NAND_ERR_TIMEOUT( -1 )/* ------------------------------------------------------------------------ **Address decoding**_4 = 26 address bits [00-07]--->[09-16]--->[17-24]--->[25-26]**_3 = 24 address bits [09-16]--->[17-24]--->[25-26]**_2 = 16 address bits [17-24]--->[25-26]**_1 =8 address bits [25-26]** ------------------------------------------------------------------------ */ #define NAND_DATA NAND_BASE_PTR #define NAND_CMD( cmd ) NAND_CLE_PTR = cmd;#define NAND_ADDR_4( addr ) NAND_ALE_PTR = (addr >> 0) & 0xff; NAND_ADDR_3( addr ); #define NAND_ADDR_3( addr ) NAND_ALE_PTR = (addr >> 8) & 0x0f; NAND_ADDR_2( addr ); #define NAND_ADDR_2( addr ) NAND_ALE_PTR = (addr >> 12) & 0xff; NAND_ADDR_1( addr ); #define NAND_ADDR_1( addr ) NAND_ALE_PTR = (addr >> 20) & 0xff; NAND_ADDR_0( addr ); #define NAND_ADDR_0( addr ) NAND_ALE_PTR = (addr >> 28) & 0x03;/*#define NAND_ADDR_4( addr ) NAND_ALE_PTR = (addr >> 0) & 0xff; NAND_ADDR_3( addr ); #define NAND_ADDR_3( addr ) NAND_ALE_PTR = (addr >> 8) & 0x0f; NAND_ADDR_2( addr ); #define NAND_ADDR_2( addr ) NAND_ALE_PTR = (addr >> 12) & 0xff; NAND_ADDR_1( addr ); #define NAND_ADDR_1( addr ) NAND_ALE_PTR = (addr >> 20) & 0xff; NAND_ADDR_0( addr ); #define NAND_ADDR_0( addr ) NAND_ALE_PTR = (addr >> 28) & 0x01;*//* ------------------------------------------------------------------------ **Prototypes** ------------------------------------------------------------------------ */ Int16 EVMOMAPL137_FLASH_init( );Uint32 EVMOMAPL137_NANDFLASH_getTotalPages( );Int16 EVMOMAPL137_NANDFLASH_erase( Uint32 start, Uint32 block_count ); Int16 EVMOMAPL137_NANDFLASH_readPage( Uint32 src, Uint32 dst, Uint32 page_count ); Int16 EVMOMAPL137_NANDFLASH_writePage( Uint32 src, Uint32 dst, Uint32 page_count );#endif
yang gao8:
回复 Tony Tang:
非常感谢您耐心的回复!2、 NAND_READ_RB 在上面代码的106行具体的软件包哪里下载的记不清了,上面是nandflash.h的文件内容,是我从C6747_common C6747_example 和C6747_headers三个压缩文件中解压出来的。1、通信时候,命令是用确定的8位数字表示的。但是进行通信的数据地址和命令寄存器地址应该分别对应101行三个宏定义(因为格式问题,三个显示在了一行),应该cs3区的寄存器的 但是我没有在c6747手册上找到相应的寄存器说明。附图:三星6410芯片手册上有与nandflash通信的相应的寄存器说明谢谢!
Tony Tang:
回复 yang gao8:
yang gao8但是进行通信的数据地址和命令寄存器地址应该分别对应101行三个宏定义(因为格式问题,三个显示在了一行)
没显示出来,看不到,但是我估计是跟这个贴里的是一样的(对这个文件来源,我怀疑可能不是TI官方提供的吧):
http://www.deyisupport.com/question_answer/dsp_arm/c6000_dsp/f/32/p/109915/299203.aspx#299203
*(volatile UINT8* ) (0x62000000+0x00000000)=DATA;
*(volatile UINT8* ) (0x62000000+0x00000010)=CMD;
*(volatile UINT8* ) (0x62000000+0x00000008)=ADDR;
你的图中的第一列的地址不是从EMIFA地址线上送出去的,是从EMIFA的数据线上送出去的,理解一下NAND接口的时序,以及CLE,ALE的作用就明白了,NAND接口分为命令,地址,数据这几种不同的周期,但是其内容都是从数据线上送出去的,由CLE,ALE来区别这数据的不同功能。
不要纠结在DSP EMIFA接口这边,NAND就是一个异步接口,需要配置的无非是异步时序setup, strobe, hold。
Tony Tang:
回复 yang gao8:
看上面文件头显示是spectrum digital来的代码,但是从OMAPL137 EVM板网页下载的BSL里我也没找到你说的nandflash.h文件,而且没有NAND的例程,因为他的EVM板上没有NAND。
http://support.spectrumdigital.com/boards/evmomapl137/revg/
如果你是从一些非官方网站下载的代码,然后又到官方网站来提问,这会造成误解的。
我附上一份TI官方提供的flash_writer,希望对你有用。
yang gao8:
回复 Tony Tang:
非常感谢你的回复!
我下载并且导入了工程文件但是在编译的时候提示缺少rts32e.lib(在linker.cmd中指定了连接),在网上没有找到该库文件,我就改为了C6747.lib,但是debug后
resume成灰色,点击暂停 disassembly中显示的都是 NOP命令