'Boot Loader'에 해당되는 글 4건
-
플래시 메모리 접근하기 1
2010.10.28
-
NAND 작업 진행 상황(2) 1
2010.10.28
-
NAND 작업 진행 상황 (1) 3
2010.10.16
-
시리얼 포트란? 1
2010.10.09
플래시 메모리 접근하기
2010. 10. 28. 21:53NAND 작업 진행 상황(2)
2010. 10. 28. 21:09NAND 작업 진행 상황(1) 까지의 내용을 계속하여 진행.
가정 : mango-2010-6 버전에 s5pc100의 nand driver가 존재 할 것이다.
근거 : mango-2010-6/cpu/s5pc1xx/nand.c 파일 존재.
진행 : mango-2010-6/cpu/s5pc1xx/nand.c -> U-Boot-2010.6.29 이식
결과 : NAND 드라이버 인식 .
진행과정 :
NAND 작업 진행 상황(1) 에서
로 대체하여 진행.
U-Boot-2010.6.29/drivers/mtd/nand/s5pc100_nand.c 수정내용
변경이유 : regs.h의 내용은, s5pc100의 레지스터 내용을 참고하므로, 대체.
[D] line33> extern int board_nand_init(struct nand_chip *nand);
삭제이유 : s5pc100_nand.c 에서, 이미 #include <nand.h> 이므로, extern erro발생.
작업 결과의 의미
NAND가 동작하던 그렇지 않던, 부팅을 해야 한다.
부팅이 되어야, 다른 것들에 접근해보고, 생각해볼 수 있기 때문이다.
prompt를 띄우는 것. 불완전 하더라도, 부팅을 완료하는 것.
그런의미에서, 의미 있는 결과가 아닌가 생각된다.
NAND 다음 단계는 serial 관련 초기화라고 추측 된다.
NAND는 정상적으로 인식되었지만, In: serial , Out: serial, Err: serial 에서 멈춘 것인지,
아니면,
NAND가 정상적으로 동작되지 않아서, In: serial , Out: serial, Err: serial로 진입하지 못한 것인지를 판단하기 위해여 더 많은 공부와 분석이 필요할 것으로 생각된다.
하나를 해결하면, 하나가 막히고, 하나를 해결하면 하나가 막히고...
해결을 하기위해선 엄청난 시간이 걸린다.
근본적으로 드라이버가 코드로 어떻게 동작 하는지를 공부해야할 필요성을 느낀다.
다음단계 초기화 내용 확인. (In: serial , Out: serial, Err: serial 이라 추측됨)
'Boot Loader > NAND' 카테고리의 다른 글
NAND 작업 진행 상황 (1) (3) | 2010.10.16 |
---|
NAND 작업 진행 상황 (1)
2010. 10. 16. 18:50smdkc100 용 플랫폼으로 만들어낸 mango100 U-Boot 이미지 파일을 보드에 탑재했을 경우, NAND 에 대한 정보를 출력하다 다운. 고로 NAND device 에 대한 수정이 필요할 것이라는 가정을 세우게 됨.
2. 가정
시리얼과 SDRAM에 대한 초기화는 끝났다는 가정하에 작업을 진행 함.
smdkc100은 Onenand device를 사용하고 있고, mango100 은 NAND 디바이스를 사용.
그 때문에 mango100 에 맞는 NAND driver를 이식해 주어야 한다.
3. 방법 ([A] : add, [C] : Change, [D] : Delete)
다른 보드의 driver 이식
.../drivers/mtd/nand/s5pc100_nand.c 파일 생성 (s3c64xx.c 파일을 기반으로 복사 생성)
# cd drivers/mtd/nand
# cp s3c64xx.c ./s5pc100_nand.c
컴파일 할때 Object로 인식하도록 수정
.../drivers/mtd/nand/Makefile 수정
[A] 50 COBJS-$(CONFIG_NAND_S5PC100) += s5pc100_nand.o
Onenand 에 대한 설정을 NAND 에 대한 설정으로 전환
.../include/configs/smdkc100.h (.../common/Makefile 을 참조하여 수정하였음)
[A] #define CONFIG_NAND_S5PC100
[C] #define CONFIG_CMD_ONENAND -> CONFIG_CMD_NAND
[C] #define CONFIG_ENV_IS_IN_ONENAND -> CONFIG_ENV_IS_IN_NAND
[A] #define CONFIG_SYS_NAND_BASE
[A] #define CONFIG_SYS_MAX_NAND_DEVICE 1
[D] #define CONFIG_SAMSUNG_ONENAND
[D] #define CONFIG_SYS_ONENAND_BASE
필요한 Header파일 추가(s5pc100.h, s5pc1x0.h : 두파일 모두 S5PC100에 대한 Register address 정보를 포함하고 있음)
(1.3.4 버젼에서 가져옴)
# cp mango-2010-6/include/s5pc100.h
U-Boot-2010.6.29/arch/arm/include/asm/arch-s5pc1xx/
# 복사한 s5pc100.h에 s5pc1x0을 붙여넣기..
s5pc100.h 파일 수정
[A] #define NFCONT_ENABLE (1<<0)
[A] #define __REG(x) (*(vu_long *)(x)) // Register에 값 할당위해 함수 선언
[D] #include <asm/hardware.h>
[D] #include <asm/s5pc1xo.h> // 이미 s5pc100.h에 포함시켜줌
4. 향후 방향
NAND Controller에 대한 이해없이, 단순 Error를 제거하는 방식으로 작업을 진행해 나감. Driver 자체의 인식은 성공했으나 어떤 흐름으로 NAND device 를 초기화하는지는 정확히 이해하지 못하며 이 때문에 Device를 찾지 못한다고 생각된다. 전체적인 컴파일 에러들은 모두 잡았고, Image 파일의 생성도 문제없이 이루어지니, 앞으로의 작업은 NAND Controller의 초기화 흐름에 대한 이해후 (남용씨..) NAND device 코드(s5pc100_nand.c) 에 대한 직접적 수정을 해 나가 주길 바람. Chip ID를 확인한다던지.. 특별한 부분이 있을거라고 생각됨.
소스 : 남용님 컴퓨터의 /working/kdj/u-boot-2010.06/
작성자 : 김 동준 / djkim@q.ssu.ac.kr
'Boot Loader > NAND' 카테고리의 다른 글
NAND 작업 진행 상황(2) (1) | 2010.10.28 |
---|
시리얼 포트란?
2010. 10. 9. 14:29시리얼 포트란?
시리얼 포트는 입/출력이 모두 가능합니다.
입력일 경우 : 호스트 피씨에서 타켓보드로 바이너리를 전송합니다. 즉, 시리얼 통신을 통해 타겟의 플래시 메모리에 전송해서 프로그램이 동작하게끔 해줍니다.
출력일 경우 : 디버깅용으로 사용하며 메시지가 타겟에서 호스트 피시로 출력을 시켜줍니다.
하드웨어 구성
망고보드에서는 rs-232c규격의 sp3232c 시러얼 전용칩을 사용했습니다.
RS-232C와 같은 규격의 시리얼 통신에서는 기본적으로 3개의 선이 사용됩니다.
데이터 전송을 위한 RxD, 수신을 위한 TxD, 그리고 GND로 이루어져있습니다.
추가적으로 RTS(Ready To Send)는 호스트가 받을 준비가 됐음을 나타내는 신호선,
CTS(Clear To Send)는 타겟보드가 받을 준비가 됐음을 나타내는 신호선을 뜻합니다.
RTS와 CTS는 주고 받을 때 동기식으로 통신하기 위해 사용하지만, 디버깅용으로 단순히 메시지 출력을 할땐 비동기식을 사용하므로 디버깅용으로 사용할때는 RTS,CTS는 사용하지 않는다고 봐도 무관합니다.
디버깅용으로는 CON307단자를 사용했습니다. 위 회로도를 보면 CON307단자는 SP3232c칩의 7,8핀에 연결되어 9,10번 핀에서 나옵니다.
sp3232c에서 나온 라인은 MCU(S5PC100)의 4개의 UART중 UART1번에 연결된 것을 볼 수 있습니다.
UART1_xxx가 GPA4, 5에 할당된 것을 알수 있습니다.
S5PC100의 datasheet를 통해 확인해보면
GPA4, 5는 UART1을 가리키는 것을 확인 할 수 있었습니다.
여기서 실제 소스 부분을 살펴보도록 하겠습니다.
../include/s5pc100.h
1430 #define ELFIN_UART_BASE 0XEC000000
1432 #define ELFIN_UART0_OFFSET 0x0000
1433 #define ELFIN_UART1_OFFSET 0x0400
1434 #define ELFIN_UART2_OFFSET 0x0800
1435 #define ELFIN_UART3_OFFSET 0x0c00
1437 #if defined(CONFIG_SERIAL1)
1438 #define ELFIN_UART_CONSOLE_BASE (ELFIN_UART_BASE + ELFIN_UART0_OFFSET)
1439 #elif defined(CONFIG_SERIAL2)
1440 #define ELFIN_UART_CONSOLE_BASE (ELFIN_UART_BASE + ELFIN_UART1_OFFSET)
1441 #elif defined(CONFIG_SERIAL3)
1442 #define ELFIN_UART_CONSOLE_BASE (ELFIN_UART_BASE + ELFIN_UART2_OFFSET)
1443 #elif defined(CONFIG_SERIAL4)
1444 #define ELFIN_UART_CONSOLE_BASE (ELFIN_UART_BASE + ELFIN_UART3_OFFSET)
1445 #else
1446 #define ELFIN_UART_CONSOLE_BASE (ELFIN_UART_BASE + ELFIN_UART0_OFFSET)
1447 #endif
위와 같이 s5pc100.h 부분을 보면 UART0는 CONFIG_SERIAL1이고, UART1은 CONFIG_SERIAL2 임을 알 수 있습니다.
../include/configs/smdkc100.h
#define CONFIG_SERIAL11 -> #define CONFIG_SERIAL2 1
망고보드는 UART1을 사용하기 때문에 CONFIG_SERIAL2를 define해주어야 합니다.
위와 같이 CONFIG_SERIAL2를 1로 설정해주도록 변경했습니다.