내가 했던 POD Physical 에 대한 결론을 설명한 문서이다. 나름대로는 열심히 했다고 했지만, 거의 5개월 정도를 이 것에 매달렸다. 지금 보면, 정말 어이없는 것으로 시간을 낭비한 듯하다. 하지만, 이로 인해 깨달은 것도 많다.
POD 의 특징과 구성은 관련 문서를 통해 설명을 했다. 나는 그 중에서 가장 밑단의 물리 계층을 맡았다. 얼핏 봐서는 대단해 보여도, 알고 보면 그렇지 않다. 여기서는 POD Physical 에서 반드시 알고 넘어가야 하는 성패를 좌우하는 것들을 다시한번 짚고 넘어간다.

  1. 시그널의 이해
  2. 표준문서의 이해
  3. 프로그램의 이해

너무나 당연한 것을 얘기하는 것 아닌가? 하고 반문할지도 모르겠다. 이제 하나,하나씩 설명해보겠다.
참고로 위의 세가지 요건 중 하나라도 이해하지 못했다면, 정신건강에 해로울 것이다.

세상의 모든 컴퓨터 및 기계가 그렇듯, 모두 1 아니면 0 이다. High(하이) 또는 Low(로우)
POD 역시 마찬가지다. 단, 두가지 신호로 인식하는 것이다. 참 간단해 보인다. Yes 또는 No 라니 말이다. 중간이란 존재하지 않는다.
이 간단한 사실을 반드시 염두하기 바란다.
POD 는 POD 이기 이전에 PCMCIA Card 이다. 그렇기 때문에, 중간에 Personality Change 를 하기 전까지는 PCMCIA 로 동작한다.
PCMCIA 스펙 문서를 보면, PCMCIA 는 총 3가지 모드가 존재한다. 각각

  1. common memory mode : 일반적으로 자료와 실행 가능한 파일들을 저장하는 메모리맵으로 사용되는 주소 공간.
  2. attribute memory mode : PCMCIA Card 의 속성을 읽을 수 있는 모드. CIS Read 모드.
  3. io memory mode : POD 가 Personality Change 를 하면 바뀌는 모드.

위에서 POD 가 사용하는 모드는 attribute 와 io 이다.

각각의 모드에서 필요로 하는 시그널은 다르다. 이 것은 대단히 중요하다. 나 역시 이 것을 우습게(?) 봤다가, 5개월씩이나 지연이 되버렸다. POD 는 크게 4개의 동작을 한다. Attribute read & write 와 Io read & write 이다.
시나리오 상으로 보자면, 처음에는 POD 가 인식하고 나서 CIS 를 읽고, COR write 하고 Personality Change 를 하는 것이다.

OE WE IORD IORW REG
Read L H H H L
Write H L H H L

참고로 REG 신호는 attribute 와 io 모드에서는 항상 LOW 이다. common 모드에서만 HIGH 이다. 위의 표를 보면, 정확히 read 할 때는 OE(output enable) 만 Low 가 되는 것을 알 수 있다. 이걸 볼 때, PCMCIA 카드는 OE 시그널을 보고, '아~ 이것이 Read 하겠다는 뜻이군!!' 알아채는 것이다.
또한, write 할 때는 WE(write enable) 만 Low 가 되는 것을 알 수 있다. 이걸 볼 때, PCMCIA 카드는 WE 시그널을 보고, '아~ 이것이 Write 하겠다는 뜻이군!!' 알아채는 것이다.
만일 위와 같이 시그널이 들어가지 않는다면, 제대로 된 결과를 얻지 못할 것이다.

나의 문제가 그랬다. CIS READ, 즉 Attribute read 때에 제대로 된 Tuple 값을 읽어오지 못했다. 차라리 아예 엉뚱한 값을 읽었다면, 좀 더 빨리 원인을 알아챌 수 있었겠지만.. -_-;
2~4 번지의 특정한 번지만 깨지는 현상을 보였다. 나중에 알고 봤더니, 문제는 아주 간단했다. CIS Read 를 할 때 필요한 시그널들이 제대로 뜨지 않았던 것이다.
스코프로 찍어본 결과, Read 시에 WE 도 LOW 로 뜨고 있었다. 그러니, PCMCIA Card 로서는 이것이 read 인지 write access 인지 구분할 수가 없었던 것이다.
이 문제를 수정해 주었더니, CIS Read 는 문제 없이 수행되었다.
후에 COR write (Attribute Write) 경우에도, 위의 표와 같이 시그널을 넣어주었더니, 문제없이 동작했다.

지금은 그렇지 않지만, 그 당시 타겟보드의 WE 핀은 5517 에서 직접 나오는 POD_WE 라는 핀이었다. 이름이 정확이 이것이었는지는 모르지만, 회로도를 보면, 분명히 이핀에 연결되어 있다. 그 당시 내가 스코프를 찍어봐서 문제점을 제대로 파악했다면, 빨리 문제를 해결할 수 있었을 텐데.. 나는 WE 핀은 Read access 시에 상관없다(Don`t care)고 생각하고 그냥 대수롭지 않게 넘겼었다.
내가 원하는 결과가 WE 핀 때문에 나오지 않았기 때문에, 후에 이 핀을 사용하지 않고, EMI_RDWR 핀을 사용하기로 했다.
이 핀의 특징이라고 하면, Read access 시에는 HIGH 로 되고, Write access 시에는 Low 로 되었다. 이 결과는 내가 원하는 결과를 얻을 수 있었다.
이를 표로 나타내면 다음과 같다.

OE EMI_RDWR IORD IORW REG
Read L H H H L
Write H L H H L

어떤 제품이든지 표준이 있기 마련이다. 일종의 약속이기 때문이다. 그래서 모두 표준을 벗어나는 제품은 없다. POD 의 동작방식을 이해하기 위해서는 무엇보다도, POD 의 표준문서를 보아야 한다.
문서에 나와 있는 CIS 튜플의 구조나, 하는 역할을 숙지하여야 한다.
자꾸 얘기하지만, 위의 시그널 테이블 또한 표준 문서에 이미 나와 있는 사실이다. 한가지 나에게 걸리는 것이 있다면, 거의 모든 문서가 영어로 되어 있다는 것이다.
하지만, 한글자, 한글자 주의깊게 볼 필요는 없다. 대강의 전체적인 흐름만 파악할 수 있다면, 그걸로서 족하다.
또한, 하드웨어와 같이 엮여서 동작하는 것이기 때문에, 각 게이트나 칩의 로직을 알아두어야 한다. 특히 74LCV244 와 74LCV245
현재 타겟보드는 ST 에서 나온 5517 이라는 CPU 를 사용한다. 그리고 여기서 제공하는 ST20 이라는 RTOS 를 사용한다. POD 가 Personality Change 를 하게 되면, 호스트 역시 이에 대응하는 모드로 바뀌어야 한다. 기존의 OE 와 WE 를 사용했다면, 후에는 IORD 와 IOWR 을 사용해야 한다는 얘기가 된다. 이것은 특정 레지스터를 세팅해줌으로써 바꿀 수 있다.

내가 만일 전체 프로그램을 모두 만들었다면, 모르겠지만 그렇지가 않다. 분명 프로그램을 만든다면, 어떻게 동작하는 모두 알아야 할 것이다.
나의 경우 나중에 COR write 를 할 때 주소를 엉뚱한 곳에다가 적어서 제대로 Personality Change 가 제대로 안 되었었다. 프로그램을 따라가 보면, CIS Read 를 하는 부분에서 POD 의 전체 튜플 중에 몇개의 튜플만 제대로 된 값이 들어있는지 확인한다. COR write 를 하는 주소 또한 제대로 된 튜플을 읽어서 설정되는 것이다.

  • computer/digitalarena/pod_결론.txt
  • Last modified: 3 years ago
  • by likewind