회원가입 ID/PW 찾기
AA
질문할때는 다음 사항을 정확히 설명해주셔야 답변하시는 분도 최대한 정답에 가깝에 답할 수 있습니다.
----------------------------------------------------------------------------------------------------
| 1. 컴파일러, 에디터, 운영체제등 개발환경 :
| 2. 알고리즘, 소스코드의 개발목적 :
| 3. 에러증상과 예상되는 문제점 :
----------------------------------------------------------------------------------------------------

마이크로 프로세서 관련질문은 해당 게시판에 해주세요. 이 게시판은 프로그래밍 언어에 대한 질의 응답 게시판입니다.

 

안녕하세요~ 일단 인사부터 드리겠습니다.

가입인사드릴려 하는데 어디다가 쓰는 지를 모르겠네요..

저는 이번에 임베디드 개발 회사에 입사한  초짜 펌웨어 개발자 서정무 입니다.

닉넴은 짱무구요 ㅋ

어쨋든 마이컴 박스에 와서 선배님들께 많은 것을 배우고 도움도 받고

미천하나 제가 도움이 되어주고 싶어서 왔습니다. 앞으로 잘 부탁드리고 많이 배워가겠습니다.

이상 인사는 여기까지고요~

 

인제 펌웨어라는 것을 하게된지(아직 펌웨어라고 말하기도 어렵지만..) 4개월이 넘어가는 시점에서

프로젝트가 떨어졌는데.. 저의 실력으로는 도무지 해답이 안나와서 도움을 요청합니다.

그럼 질문의 대해 설명을 드리자면은요...

 

1. MIPS 32 USIP professor 을 사용하고 있습니다.

2. Linux (Ubuntu 8.04 )기반의 MAXIM 사의 Toolchain을 이용하여 사용하고 있습니다.

3. 간단한 (간단한거 같진 않은 데 ㅜㅡ) Pinpad용 단말기를 개발하고 있습니다.

4. 소스는 전에 사용하던 부트로더 소스를 이용하고 있습니다.

 

배경은 위와 같습니다. 현재 참고용 소스는 같은 칩을 쓰고 있는 카드 단말기 소스인데요. 이 소스는

부트로더 -> 커널 -> 어플 이런식으로 진행하기 위한 소스입니다.

근데 여기서 부트로더 소스만 가지고 개발하고 있습니다. 왜냐하면 Pinpad는 커널을 필요할 정도로

큰 시스템을 가질 필요가 없어서 부트단에서 바로 어플리케이션으로 점프를 하도록 개발할 예정입니다.

지금 개발 타겟은 칩내의 ROM, SRAM, FLASH, 외부 SRAM(512k), 외부 FALSH(8M)를 가지고 있습니다.

 

문제는 이제부터 입니다. 부트로더에서 처음 CPU를 초기화를 한 후에 칩셋들을 초기화 하는 과정에서

외부 SRAM을 사용하기 위해 UMC(USIP Memories Controler)에서 설정을 한 후에, 가상 메모리에 맵핑을 하였습니다.

그리고 잘 초기화가 되었는 지 외부 SRAM을 쓰고 읽기를 하면서 테스트를 하게 되었습니다. 헌데 여기서 문제가

발생을 하게 되었습니다. 자세한 소스는 아래와 같습니다.

 

//--------------------------------------------------------SRAM 상세 정보 --------------------------------------------------

 

/*
* SLOT2
*/
#undef CONFIG_SLOT2_DEV_NONE
#undef CONFIG_SLOT2_DEV_FLASH
#define CONFIG_SLOT2_DEV_SRAM 1 //슬롯 2번에 SRAM이 설정
#undef CONFIG_SLOT2_DEV_OTHERS
#undef CONFIG_SLOT2_DEV_AM29LV800B_70
#undef CONFIG_SLOT2_DEV_AM29LV800B_90
#undef CONFIG_SLOT2_DEV_AM29LV800B_120
#undef CONFIG_SLOT2_DEV_28F128J3C150
#undef CONFIG_SLOT2_DEV_28F256J3C125
#undef CONFIG_SLOT2_DEV_S29PL064J60
#undef CONFIG_SLOT2_DEV_S29PL032J70
#undef CONFIG_SLOT2_DEV_M29W320_70N6
#define CONFIG_SLOT2_DEV_CS18LV1024 1 //SRAM의 모델명
#undef CONFIG_SLOT2_DEV_DM9000
#define CONFIG_SLOT2_DEV SRAM_CS18LV1024 //SRAM의 모델명
#define CONFIG_SLOT2_DEV_GCC_WAR SRAM_GCC_WAR_CS18LV1024 //SRAM의 모델명
#define CONFIG_SLOT2_DEV_TYPE "sram" //SRAM타입
#define CONFIG_SLOT2_HALFWORD_ADDRESSING 1 //하프 워드 전송
#undef CONFIG_SLOT2_HALFWORD_ADDRESSING_DQ15
#undef CONFIG_SLOT2_BYTE_ADDRESSING
#define CONFIG_SLOT2_ADDRESS_MODE HALFWORD_MODE //하프 워드 전송

/*
* CHIPPLUS
*/
#define SRAM_CS18LV1024 \
{ \
.name = "CS18LV1024", \
.t_elwl = 0, \
.t_avav = 55, \
.t_whwl = 40, \
.t_whgl = 0, \
.logsize = 19, \
}
#define SRAM_GCC_WAR_CS18LV1024 \
0, 55, 40, 0, 19

 

 

//---------------------------------- 메인 함수에서 SRAM(SLOT2)맵핑----------------------------------------------------

 

 

static struct map_info download_map_info = {
.paddr = USIP_SLOT2_PADDR,                                          //물리적 주소 Slot 2에  0x5000 0000
.vaddr = KSEG2,                                                                    //가상메모리 주소 0xc000 0000
};

slot = USIP_SLOTX(download_map_info.paddr);               //슬롯위치 설정
download_map_info.logsize = umc_slot_logsize(slot);
bios_map(&download_map_info);                                        //TLB(Translation Look-aside Buffer)

 

그래서 SRAM 의 가상 메모리 주소는 KSEG2 즉 0xc000 0000의 위치에 맵핑 됐습니다.

그리고 나서 SRAM 메모리 테스트를 다음과 같이 하였습니다.

int test_sram(void)

{

     unsigned char data[8];                                                            //내부 RAM안의 변수

     unsigned char *sram ;

     sram = KSEG2 ;                                                                    //외부 SRAM 가상메모리 주소 0xc000 0000(KSEG2)

    for(cnt = 0 ; cnt < SRAMSIZE; cnt += 8 )                            //SRAMSIZE = 512*1024 byte

    {

        for(i = 0; i < 8; i++)                                                               //외부SRAM에 테스트 값 쓰기

       {

           data[i] = (1 << i);

          *(sram+cnt+i) = data[i];

       }

    }

 

    for(cnt = 0 ; cnt < SRAMSIZE ; cnt++)                                 //외부 SRAM의 값을 읽기

    {

         printf("sram = %x\n", *(sram + cnt));

     }

}

 

이와 같이 테스트를 실행 시 쓸 때는 헥사 값으로

 

0x01, 0x02,0x04, 0x08, 0x10, 0x20, 0x40, 0x80

 

이렇게 8개를 반복해서 쓰는데

쓰고 나서 읽어보면

 

0x01, 0x00, 0x04, 0x00, 0x10, 0x00, 0x40, 0x00, 0x01, 0x00, 0x04, 0x00,......

 

과 같이 중간에 하나씩 빼먹어 버립니다...

커널이 없이 부트단에서 해서 그런가요..?? 선배님들 도와주세요..

 

댓글 1

하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
번호 분류 제목 글쓴이 조회 수 날짜
106 펌웨어 & 코딩언어 객체지향프로그래밍4 끼르 322 2017.06.19
105 펌웨어 & 코딩언어 적외선 센서에 대한 질문입니다.3 jaemi2010 336 2016.02.25
104 펌웨어 & 코딩언어 구조체 포인터 캐스팅??1 기다려줄래 309 2015.07.10
103 펌웨어 & 코딩언어 matlab에서 작성된 m file을 c++로 변환하고 싶습니다.1 마린스토리 278 2014.04.28
102 펌웨어 & 코딩언어 HOTC언어로된 MPPT제어 프로그램 Code Vision 으로 변환하기 찰떡젤리 574 2014.04.21
101 펌웨어 & 코딩언어 C 명령어 좀 상세히 알고 싶습니다1 jsp 394 2014.04.03
100 펌웨어 & 코딩언어 HOT피보나치 수열..2 aNitMotD 538 2013.10.30
99 펌웨어 & 코딩언어 HOT1D FEM coding 문제 ..원하는 답이 안나와요 수치해석미쵸 494 2013.09.29
98 펌웨어 & 코딩언어 HOTPIC 16F628A와 CCSC 기반의 프로그래밍 질문입니다. 제발 도와주세요ㅠㅠ 신천동주민 467 2013.09.24
97 펌웨어 & 코딩언어 HOT비주얼베이직 연산 및 줄바꿈에 대한 질문입니다.1 원할머니보고쌈 672 2012.11.07
96 펌웨어 & 코딩언어 c언어 질문인데요..3 하하하하히 385 2012.09.10
95 펌웨어 & 코딩언어 HOTC언어제어3 tbwnaoslwj1 645 2012.08.09
94 펌웨어 & 코딩언어 HOTmatlab 질문입니다.. 소다수1 403 2012.06.06
93 펌웨어 & 코딩언어 HOT-(C언어(함수호출)로 만든 크리스*마스*트리*프로그램)-1 리종순2 1460 2011.12.14
펌웨어 & 코딩언어 HOT외부 SRAM 컨트롤하는 것좀 도와주세요.1 쩡무 1366 2011.11.15
91 펌웨어 & 코딩언어 HOTunikey program 수정 jjhuem 1105 2011.10.11
90 펌웨어 & 코딩언어 HOTAtmega128에서 Reset 하는 방법 중 궁금한 점이 있습니다!!!4 공돌이의꿈 3144 2011.06.21
89 펌웨어 & 코딩언어 HOTC언어랑 matlab의 차이?1 약곰탱이 3517 2011.06.02
88 펌웨어 & 코딩언어 HOTVHDL 전가산기 설계 질문입니다. 나트륨 2976 2011.03.26
87 펌웨어 & 코딩언어 HOTC 배열이용해서 엑셀 데이터 끌어오는 방법???2 꼬꼴리 2114 2011.03.24
  • 사람은 타향에서 태어난다. 산다는 것은 고향을 찾는 일이다. 결국 생각하는 것은 삶이다.
    - 베르네
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.