도와주세요!!
글 수 15,339
2008.08.07 15:41:25 (*.38.77.5)
77650
안녕하십니까! 여기에서 보드를 구매 하지 않고 아는 분을 통해서 AU1200 보드를 하나 얻게 되어
현재 AU1200에 리눅스를 올릴러고 하는 왕 초보입니다.
여기에서 보드를 구매 하지 않아서 질문을 하기가 죄송하나 혼자서 공부하다 보니 물어볼곳이 없어서
염치 불구하고 이렇게 글을 올려 봅니다.
아무리 해도 NAND FLASH에 PID와 VID가 읽혀지지 않아 이렇게 질문을 올립니다.
현재 ezboot코드를 사용 하여 제 보드에 맞게 수정을 하고 있습니다.
ezboot는 AU1250이나 저는 AU1200 인 관계로 CPU클럭 및 버스클럭설정을 바꾼후 시리얼
통신이 정상적으로 되었습니다.
NOR부분도 제가 가진 보드에 맞게 수정하였습니다.
그런데 NAND가 VID, PID가 전혀 읽혀지지 않습니다.
3일동안 삽질해도 도저히 감이 오지 않아 이렇게 질문을 올립니다.
현재 NAND 의 Chip Select의 경우 R_CS2에 연결이 되어 있으며
NOR 플래쉬가 R_CS0에 연결이 되어 있습니다. (플래쉬 - K9K8G08U0A)
일단 제가 PID를 읽어온 코드는..
#define KSEG1_MEM_STNDCTRL __REG(0xB4001100)
#define KSEG1_MEM_STADDR2 __REG(0xB4001028)
#define nCS0_PHYS 0xBE000000 // 0x1E000000 - 0x1FFFFFFF (32M)
#define nCS1_PHYS 0xBC000000 // 0x1C000000 - 0x1DFFFFFF (32M)
#define nCS2_PHYS 0xBA000000 // 0x1A000000 - 0x1BFFFFFF (32M)
#define nCS3_PHYS 0xB8000000 // 0x18000000 - 0x19FFFFFF (32M)
#define NAND_BASE nCS2_PHYS
#define OFFSET_STNDCMD 0x00
#define OFFSET_STNDADDR 0x04
#define OFFSET_STNDDATA 0x20
// disable nand boot mode
KSEG1_MEM_STNDCTRL=0;
// Enable the NAND chip select
KSEG1_MEM_STADDR2= 0x11A03F80;
// Reset NAND
hwnand_CLE( 0xff );
busy_wait()
hwnand_CLE( 0x90); // read-id cmd
hwnand_ALE( 0x00 ); //address
hwnand_IOR(vid); // vendor id
hwnand_IOR(pid); // product id
hwnand_IOR(dumy); //
hwnand_IOR(size_flag); // size info
이러한 형식으로 프로그램 하였습니다.
오실로 스코프 상으로 보았을때 칩셀렉트 핀은 뜨는것 같았으나 정확히 저 타이밍에
뜨는지는 확인 되지 않았습니다.
Busy 체크도 정상적으로 되는것 같습니다.
왜 VID와 PID가 안읽혀 지는지 알수가 없습니다.
하드웨어는 다른 OS를 올렸을 경우 모두다 정상 동작한것을 확인 하였습니다.
또한 타이밍 래치라던지 칩셀렉터 타이밍은 기본 소스에서 따로 수정하지는 않았습니다.
또한가지 궁금한것이 있습니다.
기본 베이직 코드에는 hwnand_CS_en(dumy); // CS open 와 hwnand_CS_di(dumy); // CS close 하는 부분이 있었습니다.
이부분이 기본 회로도가 없어서 잘모르겠으나 Chip Select핀을 ON OFF 하는것인지 아니면 특정한 기능을 수행하는
것인지도 궁금합니다.
거듭 죄송하다는 말씀 드립니다.
즐거운 하루 되세요 ^^
현재 AU1200에 리눅스를 올릴러고 하는 왕 초보입니다.
여기에서 보드를 구매 하지 않아서 질문을 하기가 죄송하나 혼자서 공부하다 보니 물어볼곳이 없어서
염치 불구하고 이렇게 글을 올려 봅니다.
아무리 해도 NAND FLASH에 PID와 VID가 읽혀지지 않아 이렇게 질문을 올립니다.
현재 ezboot코드를 사용 하여 제 보드에 맞게 수정을 하고 있습니다.
ezboot는 AU1250이나 저는 AU1200 인 관계로 CPU클럭 및 버스클럭설정을 바꾼후 시리얼
통신이 정상적으로 되었습니다.
NOR부분도 제가 가진 보드에 맞게 수정하였습니다.
그런데 NAND가 VID, PID가 전혀 읽혀지지 않습니다.
3일동안 삽질해도 도저히 감이 오지 않아 이렇게 질문을 올립니다.
현재 NAND 의 Chip Select의 경우 R_CS2에 연결이 되어 있으며
NOR 플래쉬가 R_CS0에 연결이 되어 있습니다. (플래쉬 - K9K8G08U0A)
일단 제가 PID를 읽어온 코드는..
#define KSEG1_MEM_STNDCTRL __REG(0xB4001100)
#define KSEG1_MEM_STADDR2 __REG(0xB4001028)
#define nCS0_PHYS 0xBE000000 // 0x1E000000 - 0x1FFFFFFF (32M)
#define nCS1_PHYS 0xBC000000 // 0x1C000000 - 0x1DFFFFFF (32M)
#define nCS2_PHYS 0xBA000000 // 0x1A000000 - 0x1BFFFFFF (32M)
#define nCS3_PHYS 0xB8000000 // 0x18000000 - 0x19FFFFFF (32M)
#define NAND_BASE nCS2_PHYS
#define OFFSET_STNDCMD 0x00
#define OFFSET_STNDADDR 0x04
#define OFFSET_STNDDATA 0x20
// disable nand boot mode
KSEG1_MEM_STNDCTRL=0;
// Enable the NAND chip select
KSEG1_MEM_STADDR2= 0x11A03F80;
// Reset NAND
hwnand_CLE( 0xff );
busy_wait()
hwnand_CLE( 0x90); // read-id cmd
hwnand_ALE( 0x00 ); //address
hwnand_IOR(vid); // vendor id
hwnand_IOR(pid); // product id
hwnand_IOR(dumy); //
hwnand_IOR(size_flag); // size info
이러한 형식으로 프로그램 하였습니다.
오실로 스코프 상으로 보았을때 칩셀렉트 핀은 뜨는것 같았으나 정확히 저 타이밍에
뜨는지는 확인 되지 않았습니다.
Busy 체크도 정상적으로 되는것 같습니다.
왜 VID와 PID가 안읽혀 지는지 알수가 없습니다.
하드웨어는 다른 OS를 올렸을 경우 모두다 정상 동작한것을 확인 하였습니다.
또한 타이밍 래치라던지 칩셀렉터 타이밍은 기본 소스에서 따로 수정하지는 않았습니다.
또한가지 궁금한것이 있습니다.
기본 베이직 코드에는 hwnand_CS_en(dumy); // CS open 와 hwnand_CS_di(dumy); // CS close 하는 부분이 있었습니다.
이부분이 기본 회로도가 없어서 잘모르겠으나 Chip Select핀을 ON OFF 하는것인지 아니면 특정한 기능을 수행하는
것인지도 궁금합니다.
거듭 죄송하다는 말씀 드립니다.
즐거운 하루 되세요 ^^
난드플래시에는 미묘한 타이밍 문제때문에 에러가 많습니다.
대표적인 것이 ALE 신호 이후에 CS 를 LOW 상태로 일정시간 끌고 가야 한다는 것입니다.
그래서 저희는 난드플래시의 CS 를 GPIO 로 제어합니다.
hwnand_CS_en(dumy); hwnand_CS_di(dumy); 매크로들은 바로 이 GPIO 을 LOW/HIGH 로 움직이는 매크로 입니다.
최신의 ezboot 소스를 보시면서 이해하시면 됩니다.