검색결과

'분류 전체보기'에 해당되는 글 22건

NAND 작업 진행 상황 (1)

2010. 10. 16. 18:50
1. 작업 배경

smdkc100 용 플랫폼으로 만들어낸 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로 설정해주도록 변경했습니다.


참고 : http://cafe.naver.com/embeddedcrazyboys/5271

 

New Post