안녕하세요.
이번에 aESOP 보드를 근간으로 2410 보드를 만들고 nand Flash를 붙였는데요.. Nand 인식이 안되어서 경험해보신 분들의 도움을 받고자 합니다.
[증상]
- 보드는 S3C2410, 우리 이솝에서 쓰는 동일한 Nand 64MB 붙이고.
- u-boot도 이솝 u-boot를 근간으로 2410으로 했습니다.
부팅후에... 아래와 같이 메시지가 나오구요.
U-Boot 1.1.2 (Aug 30 2006 - 07:01:25)
U-Boot code: 33F80000 -> 33F9BE2C BSS: -> 33FA02A4
SDRAM Configuration:
Bank #0: 30000000 64 MB
Flash: 4 MB
NAND: <--- 여기서 멈춤니다.
실제로 U-boot 코드를 따라가 보니..
NanD_IdentChip 이 함수에서. Nand 로 Reset 커맨드를 내리는데..
/* Reset the chip */
if (NanD_Command(nand, NAND_CMD_RESET)) {
이 부분에서 실제로 include/configs/smdk2410.h 에서는 아래와 같이 해주었지요.
#define NAND_WAIT_READY(nand) udelay(10); while(!(rNFSTAT & 0x01))
이 부분에서 계속 while 문을 돌고 있고 ready가 되지 않네요. ㅠ.ㅠ
[질문]
- 이와같이 계속 Nand가 Ready가 되지않고 Busy라고만 나오는데.. 이런현상 경험해보신분 계신가요?
[질문]
- 지금 h/w, s/w 전부 다시 살펴보는 과정이라서.. 거의 좌절모드 이네요.
s/w으로 수정 포인트는 아래와 같은데.. 혹 더 수정해야 할 부분이 있을까요?
1. include/configs/smdk2410.h 파일 수정부분
#define CONFIG_AESOP_YAFFS
#define CFG_MAX_NAND_DEVICE 1
#define SECTORSIZE 512
#define ADDR_COLUMN 1
#define ADDR_PAGE 3
#define ADDR_COLUMN_PAGE 4
#define NAND_ChipID_UNKNOWN 0x00
#define NAND_MAX_FLOORS 1
#define NAND_MAX_CHIPS 1
#define NAND_WAIT_READY(nand) udelay(10); while(!(rNFSTAT & 0x01))
#define WRITE_NAND_COMMAND(d, adr) rNFCMD = d
#define WRITE_NAND_ADDRESS(d, adr) rNFADDR = d
#define WRITE_NAND(d, adr) rNFDATA = d
#define READ_NAND(adr) rNFDATA
// kingseft
#define NAND_DISABLE_CE(nand) rNFCONF |= 0x0800
#define NAND_ENABLE_CE(nand) rNFCONF &= ~(0x0800)
#define NAND_CTL_CLRALE(nandptr)
#define NAND_CTL_SETALE(nandptr)
#define NAND_CTL_CLRCLE(nandptr)
#define NAND_CTL_SETCLE(nandptr)
2. common/cmd_nand 부분에서는 아래 부분만 수정
#ifdef CONFIG_S3C2410
#include <s3c2410.h>
#endif
3. lib_arm/board.c 파일에서는 아래만 수정
#if (CONFIG_COMMANDS & CFG_CMD_NAND)
puts ("NAND:");
nand_init();
#endif
- U-boot 역시 이솝 U-boot를 2410용으로만 한것이기에.. 우선 Nand 수정 포인트를 위와같이만 했습니다. s/w 적으로는 더 봐야할 부분이 없을까요?
[질문]
- H/W 적으로는 첨부된 파일과 같이 Nand를 연결했습니다. 혹 회로적으로 잘못된 부분이 있을까요? (제가 H/W는 문외한입니다만... ㅠ.ㅠ)
- 두번째 첨부파일은 CPU의 NCON 핀을 설정한 상황입니다.
[이상한 현상]
- U-Boot 에서 위와 같이 while문으로 ready 를 체크하는 부분을 막고 무대뽀로 돌리면.. 부팅메시지에..
Nand : 64M 라고 나오구요.
Nand ID와 제조사 ID등이 출력됩니다.
부팅 커맨드에서 nand info 명령을 치면 잘 나오구요. 물론 이때에 read write 등은 전부 에러가 납니다. 또한 nand bad 라고 치면 모든 블럭이 bad라고 주소를 출력하네요... 이상해서 다른 Nand를 붙여서 해보아도 동일하구요.
** 질문 자체도 난감한 질문이라.. 어떤 부분들을 검토해봐라... 이런식의 답변이라도 부탁드립니다.
** 우리 이솝보드나 smdk2410 보드등에서 nand는 전부 잘 구동되었는데.. 자작보드 한번 만들어서 해보니.. 이런부분에서 실력이 판가름 나나 봅니다. (ㅠ.ㅠ)
같다고 보여지는데요..........흠....
잘 해결되길 바랍니다.......^^;