EzDoum

찾기
처음으로 | 찾기 | 아카이브 | 글 올리기 | 링크 | 자료실 | 통계 | 연락처 | 자유게시판
이지도움 특집
전체보기
네트워크
TI OMAP35x
TI DaVinci
Analog Blackfin
RobotWar2005
임베디드!
캐쉬의 모든것
메모리 할당 알고리즘
CPU 파이프라이닝
자료구조(Tree)
금융

Login
이름

암호

기억하기


사용자 등록

현재 접속중인 등록 사용자는 0명, 익명 사용자는 2명 입니다.
전체 등록 사용자: 751명

마지막 답장
·libcurl + fuse 조합으로 되는게 많네. (1)
·Linux Ftrace에 관해 (3)
·Android MTP ( Media Transfer Protocol ) (1)
·Lighttpd에 인증을 digest 사용시 IE 오동작 문제? (1)
·Dtrace에 관해 (1)

최근글
·OpenSSL and multi-threads (0)
·ARM 환경에서 OpenCL 사용 (0)
·IoT용 WIFI 모듈 비교 ( MCU ) 클래스 (0)
·Glances - 리눅스 여러 가지 항목을 한 화면에서 모니터링 (0)
·plugin 방식의 로그 분석기 (0)

뜨거운 감자
·나는 인터렉티브한 환경에서 역어셈블 한다. (12)
·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)
·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)
·ASP.NET의 데이터 그리드와 사용자 컨트롤 (7)
·DHTML Editing Control (7)

가장 많이 읽은 글
·[Cache] 2-way Set-Associative 방식이란 무엇일까? (2)
·멀티쓰레드(Pthread) 프로그래밍
·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)
·Sorting Algorithm Animation (2)
·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)

임베디드! - flash memory 맛보기
글쓴이: EzDoum 글쓴날: 2004년 07월 16일 오전 02:59
하드웨어



지난 금요일에 시작한 임베디드 관련 일이 오늘 어느 정도 가닥을 잡았다.
이번 일을 하면서 배운것들을 정리해 봤다.

cpu에서 URT를 지원하면 시리얼 통신이 다 되는줄 알았는데,
cpu에서는 rx/tx 두가닥만 나오고 이것을 rs-232표준인
12볼트 신호로 바꾸어 주고, 또 외부로 부터 들어오는 잡음을
필터링 해주는 max232 같은 별도의 ic가 달야아 함
그리고 시리얼 통신에서는 2,3핀만 사용되고 나머진 필요없음

ic를 달 때는 전문가용 인두를 사용했는데 그 끝이 조각칼 중에
칼 끝이 / 이렇게 사선처럼 생긴것을 사용하고 플럭스란
촉매를 사용하면 납이 동글동글하게 뭉쳐서 신기하게 칩의
가느다란 다리사이로 납이 끼지 않고 딱 제자리로 땜질이 되었다.

이렇게 보드에 ic를 달고 나서 이게 잘 달렸나 확인하는 것은
소프트웨어라면 디버깅으로 확인하겠지만 하드웨어에서는
오실로스코프로 확인하는 거였다.

전에 오실로스코프를 잠깐 써보긴 했는데 이번에 제대로 써본거
같다. cpu에서 max232까지 신호가 날 나오나 확인하고
또 max232에서 시리얼 포트까지 잘 나오나 확인을 하고
컴퓨터에 연결을 하고, 하이퍼터미널로 연결해보니 잘 나왔다..

이제 크로스컴파일을 해야 하는데, 여기에 사용되는 cpu가
아날로그디바이스에서 만든 blackfin이란 cpu이고 여기엔
visual studio와 메뉴체계가 비슷한 visualDSP++란 것을 사용했다.
(덕분에 쉽게 개발환경에 익숙해짐, 그러나 jtag나 multi-ice
같은 디버깅 포트가 없어서 디버깅은 어려웠음)

이걸로 바이너리를 컴파일 하고 롬에 프로그램을 구워서
실행해야 하는데, 롬을 굽는 작업이 아주 귀찮다.
그래서 개발 효율을 높이기 위해서 usb인터페이스로
롬에뮬레이터를 만들어서 사용하고 있었다. 그런데
요것을 만든 사람이 windows 2000용 드라이버로 만들어서
내 노트북에선 잘 되질 않았다.. (xp는 드라이버를 초기화 하는
과정이 2000과는 다른가보다. 그게 적용이 안되었던듯.)

지금 까지가 임베디드 개발 환경을 만든것이고
내가 맞은 부분은 플래쉬메모리를 컨트롤 하는 것이다.
일을 지도해주시는 분이 플래쉬 메모리 컨트롤 하는 것으로
시작한 이유는 이것이 부트로더에 제작의 중요한 부분이기도 하고
플레쉬 메모리를 다룰려면 cpu에서 어드레스와
데이터버스등 보드내에서 여러 부분과 연결되어있어 전체
흐름을 잡기에 좋은거 같다.

내가 사용한 플래시 메모리는 sst39vf160 이란 이름을 가진놈으로
2메가 바이트 이고 nor 타입이다.
플래시 메모리를 사용은 많이 해봤지만 직접 컨트롤을 하자니.
난감했다. 그렇다 나는 플래시 메모리를 control하는 것을 배운적이 없었다.
우선 구글에서 검색을 해서 datasheet를 구하고 또 제조사에서 제공하는
예제 소스를 받아 보았는데,

플래시에서 읽을 때는 cpu에 memory map되어 있어서 주소값만
주면 읽어 졌다. 하지만 플래시에서 기록을 할때는 블럭이나
섹터단위로 해당 영역을 지우고 한바이트씩 기록을 해야 했다.
(플래시의 기록 원리는 휴즈가 끊어져서 정보가 저장되어서
다시 기록을 할려면 휴즈를 연결하는 과정이 필요하다. )

그러면 플래시에 영역을 지우는듯 명령은 어떻게 내리는가?
cpu에 예약된 명령어가 있는게 아니라, 특정 주조에 특정
데이터를 순차적으로 주면 해당 명령어가 실행되는 거다..

예를 들어 칩 전체를 지우기를 원하면

코드:
#define sysAddress(offset) (*(volatile unsigned char *)(0x20100000 + (offset<<1) ))

void Erase_Entire_Chip()
{
int timeout;

sysAddress(0x5555) = 0xaa;
sysAddress(0x2aaa) = 0x55;
sysAddress(0x5555) = 0x80;
sysAddress(0x5555) = 0xaa;
sysAddress(0x2aaa) = 0x55;
sysAddress(0x5555) = 0x10;
// 다지워 질라면 약간의 지연이 필요함 100ms
timeout = Tmr_cnt;
while((Tmr_cnt - timeout) <100) ;
printf("delay [%d] [%d]\n\r", timeout, Tmr_cnt);

}


그런데 작업의 대부분이 플래시 메모리가 제대로 동작을 하지 않아서
하드웨어 / 소프트웨어 디버깅에 매달렸다.
(하드웨어적으로 문제도 있었고 내가 보드에 사용된
칩들의 특징을 모르는 것도 문제였다. 하지만 이 문제를
해결하면서 오실로스코프 사용법이라던지 플래쉬 메모리에
대해서 더 잘 알게되었다)

blackfin이란 cpu가 dsp 칩으로 16비트 머신이다.
그리고 홀수 번지의 주소가 접근이 금지 된다. 홀수 번지의
주소를 지정하면 cpu가 예외 인터럽트를 타서 보드가 멈추게 된다.
이러니 아에 주소 0부터 시작하는게 아니라서
이것이 플래시의 주소핀 a0~a19에 1:1로 연결된것이 아니라,
cpu의 주소핀 a1가 플래시의 a0에 연결되서

#define sysAddress(offset) (*(volatile unsigned char *)(0x20100000 + (offset<<1) ))

쉬프트해서 접근해야 제대로 주소가 지정이 되었다.

하지만, 소프트웨어적으로 아무리 해도 플래시가
정상 동작을 하지 않았다. 여기에 더 답답한 것은 내가 정상으로
동작하는 플래시 형태를 보지 못해서 내가 잘하고 있는지
판단하기도 힘들었다. 그 나마 이전에 보았던 임베디드 관련
서적들이 도움이 되긴 했지만 궁금한 것을 100% 만족시켜 주진 못했다
또 일을 주시는 분도 이것 말고도 진행하는 회사일이 많아서
자꾸 물어보는 것도 힘들었고( 내가 시간을 얻을수 있는게
주로 밤이었다. ㅌㅌ)

그래서 생각해낸것이 kldp에 질문을 하는 것이었다. 리눅스관련 커뮤니티기는
하지만, 임베디드 리눅스도 있고 워낙 다양한 사람들이 모여서 답을
얻을수 있으리란 희망도 있고 이참에 친구해두면 좋을까 싶었다.
글을 올리고 모니터링을 하고있는데 으핫.. 댓글이 달렸다..
스코프로 이것저것 해보라 하고 상황에 대한 추가 정보를 원했다.
내가 테스트 한정보를 댓글로 달고 그사람이 답글로 단것중에
스코프의 트리거라던지 기타 모르는 것도 추가 질문을 했다
이걸 주거니 받거니 하면서 유대가 생기고 끝에 이르러서는
msn 친구로 등록하기 까지 됐는데, .. 알고보니 업소용 게임기
개발하시는 분이었다. ^^ 감사드린다. 정말 땡큐

암튼 잘 모르는 문제를 풀려고 하니 오랫만에 짜릿함을 느꼈다.
옛날 리눅스 처음 할때 1달 짜리 버그를 다룰때의 그 느낌을 다시
경험한거 같다.

오늘은 여기까지~~


[분류: 하드웨어 인쇄용 페이지 본문 email로 보내기 ]

<  임베디드! - DSP 특이한 ALU구조 | 애플 WWDC 2004 동영상 볼만함  >
임베디드! - flash memory 맛보기 | 답장: 3개 | 본문에 답장
정렬 :  
답장 EzDoum 2004년 07월 16일 오전 03:03 [ 이글에 답장 | 본문에 답장 | 책갈피 ]
남은 이야기가

플래시 메모리의 어드레스핀, 데이터핀, write enable, read enable, chip enable 핀 확인하기
cpu의 플래시 메모리 뱅크 셋팅하기 위한 메모리 레지스터 셋팅에 관련된거
cpu가 플래시 접근할때 타이밍 관련된거
회로도 보기


[수정]

답장 EzDoum 2004년 07월 18일 오전 01:36 [ 이글에 답장 | 본문에 답장 | 책갈피 ]
(4) ★ /2001_08월호/실전!강의실/내 손으로 만드는 USB 플래시 디스크 1/USB 플래시 디스크 개요와 HW 구조 살펴보기/01.08usb.
(5) ★ /2001_09월호/실전!강의실/내 손으로 만드는 USB 이동식 플래시 디스크 2/펌웨어로 HW에 생명 불어넣기와 마이컴 초기화/0109-330
(6) ★ /2001_11월호/실전!강의실/내 손으로 만드는 USB 이동식 플래시 디스크 3/플래시 디스크에서 USB를 이용한 데이터 전송/0111-354
(7) ★ /2002_03월호/실전! 강의실/임베디드 리눅스에서 플래시 메모리 블럭 디바이스 구현 1/플래시 메모리 기반 보조 기억장치 시스템 구성/0203-398
(8) ★ /2002_05월호/실전강의실/비트프로젝트-리눅스에서_플래시_메모리_블럭_디바이스_구현_2/NAND_플래시_메모리를_마음대로_사용하자(1)/0205-368
(9) ★ /2002_06월호/실전강의실/비트프로젝트-리눅스에서 플래시 메모리 블럭 디바이스 구현 3/NAND 플래시 메모리를 마음대로 사용하자(2)/0206-378
(10) ★ /2002_08월호/실전강의실/임베디드 리눅스에서 플래시 메모리 블럭 다바이스 구현 4/임베디드 시스템과 PC간 데이터 통신 구현/0208-356
(11) ★ /2002_08월호/실전강의실/한걸음씩 다가가는 시맨틱 웹 2/리눅스 MTD를 이용한 NAND 플래시 메모리 블럭 디바이스 만들기/0208-374
[수정]

답장 EzDoum 2004년 07월 18일 오전 01:39 [ 이글에 답장 | 본문에 답장 | 책갈피 ]
[실전! 강의실]ARM 부트로더 제작기5
부트로더와 플래시 메모리
http://www.imaso.co.kr/lecture/hw/article.html?id=4139


[수정]

임베디드! - flash memory 맛보기 | 답장: 3개 | 본문에 답장
정렬 :  

답장 쓰기
글을 올리시려면 로그인 (사용자 등록) 하셔야 합니다.

검색
Google

분류
·공지 (6)
·인터넷 (87)
·하드웨어 (260)
·C/C++ (65)
·어셈블리 (7)
·리눅스 (136)
·리눅스 커널 (67)
·윈도우즈 (25)
·데이터베이스 (20)
·보안 (16)
·.NET (25)
·그래픽 (13)
·책소개 (42)
·호기심 천국 (80)
·잡담 (111)
·사랑 (3)

전체 본문수: 963
전체 답장수: 525


분류 : 하드웨어
최근글
최근글
가장 많이 읽은 글
·[Cache] 2-way Set-Associative 방식이란 무엇일까? (2)
뜨거운 감자
·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)

EzDoum투표
이지도움 어때요?
이게 뭐야. 다시 안올란다. --;
아이 좋아라~ +_+;
관심없다.
먼가는 있는거 같은데 뭐하는 곳이지?
기타 (자유게시판에 글로 남겨 주세요)
[ 결과 | 투표 ]

랜덤 링크
http://kldp.net


 Home ^ BACK TO TOP ^ EzDoum - 도움이 필요하세요~??
 Powered by KorWeblog 1.5.8 Copyleft © 2001 EzDoum, 관리자: EzDoum