오늘의 질문
  • 32비트 MCU 에서 어드레스 디코딩이 어렵습니다. 쉬운 방법이 없을까요?
  • 난이도 : 별3개

우선 문제를 하나 내도록 하겠습니다.
제가 어디가서 하드웨어에 대한 설명을 할때 반드시 묻는 말이기도 합니다.

32-bit MCU 가 엑세스 할수 있는 또는 제어 가능한 메모리의 크기는 몇바이트 일까요?

답은 4GByte 입니다. 답이 쉬울수도 있지만 한번 더 짚어보기로 하죠

2^10 = 1024 = 1K Byte
2^20 = 1024 KByte = 1M Byte
2^30 = 1024 MByte = 1G Byte

32-bit MCU 는 어드레스버스가 32개 있는 MCU 를 말하죠
즉 2^32 = 2^2 * 2^30 = 4 GByte 입니다.

위에서 제시한 어드레스의 개수와 그에 상응하는 메모리의 크기를 구하는 방법을 숙지하셔야 설계하실때 편안합니다.

자, 다시 본론으로 들어가죠.
32-bit MCU 는 최대 4-GByte 의 메모리 공간이 있습니다. 이공간에 필요한 플래시 영역, SDRAM 영역, 레지스터영역등
시스템에 필요한 모든 공간이 할당되어 있는 것이지요

아래그림은 PXA255 에 할당된 메모리 영역중 일부의 내용입니다.


<그림_1>

0번지는 리셋번지이며 이곳에는 Static Chip Select 라고 보이시죠
그리고 0x4400_0000 번지는 LCD 관련 레지스터라고 나와있습니다.
그림에서는 안보이지만 상위의 0xA000_0000 번지는 SDRAM 영역이라고 되어 있습니다.
SDRAM 이라면 우리가 그냥 알고있는 메모리 영역을 말합니다.

회로를 그릴때 우리가 연결할 수 있는 것은 nCS0, nCS1 .. 등으로 표시된 핀과 어드레스핀 입니다.
그런데 어드레스 라인은 반드시 nCS 핀과 함께 움직이는 핀입니다. nCS 와 연동되지 않으면 필요없는 라인인거죠
다시 그림을 잘보시면 nCS0 의 영역이 64MByte 라는것을 확인 할 수 있을겁니다.
64Mbyte 라면 어드레스가 몇개 필요할까요?

어드레스 라인 26개가 필요하죠 풀어보면 2^6 * 2^20 이겟죠
그럼 정말 어드레스가 26개 인지 PXA255 데이타쉬트에서 확인해보죠


<그림_2>

MA[25:0] 이라는 행이 보이시죠. 어드레스가 A0 부터 시작해서 A25까지 있다고 나와 있습니다. 역시 26개의 어드레스가 있군요
참고적으로 데이타버스는 MD[15:0], MD[31:16] 2개의 행으로 분리되어 전체 32비트 버스로 되어있는 것을 보실 수 있습니다.

그럼 PXA255 MCU 에 16비트버스를 지원하는 NOR-Flash 를 nCS0 에 연결해보도록 하겠습니다.
아래 그림은 EZ-X5 보드의 회로중 일부입니다.


<그림_3>

우선 주의 깊게 보실부분은 NOR-Flash (xx29LVxxx) 입니다.
회로상에서 보시는 플레시는 어드레스가 A0..A21 까지 22개의 어드레스를 갖습니다.
그리고 데이타 버스는 16비트로 되어 있습니다.

  • 우리가 메모리의 크기를 말할때는 모두 Byte 단위를 사용합니다.
  • 간혹 Word 라는 단위를 사용할때도 있습니다. 이때 Word 는 2바이트를 말하는 것이 아닙니다.
  • 12비트, 16비트, 18비트, 24비트등 칩이 지원하는 데이타버스의 폭을 말합니다.

그럼 위 회로에서 NOR-Flash 의 크기는 몇 바이트 일까요?
풀어보자면 어드레스가 22개 이므로 4Mbyte 이지만 버스를 16비트를 지원하니까 8MByte 를 지원하죠

MCU 가 아닌 주변의 칩들에서는 A0,A1 이렇게 표시하는 건 그 칩이 지원하는 버스에서의 어드레스를 말합니다.
말이좀 어렵죠.
회로를 자세히 보시면 오른쪽 하단에 nByte 라는 핀이 보입니다. 버스를 Byte 모드로 하고 싶다면
nByte 핀을 LOW 로 놓으면 된다는 것이죠. 아울러 Q15핀은 A-1 이라고도 표현되어 있습니다.
버스가 Byte 모드라면 Q15 핀은 A-1 이라는 어드레스가 된다는 말이죠

중요한 내용을 다시 반복해 드리도록 하겠습니다. MCU 가 아닌 주변의 디바이스(IC칩)들은 자신의 버스 기준으로
어드레스가 표현되어 있다. 그리고 MCU 들은 모두가 8비트 버스기준으로 핀들의 이름이 설정되어 있습니다.

다시 회로를 보시면 플래시의 A0 에는 MCU 의 A1 핀이 연결되어 있는 것를 확인할 수 있습니다.
플래시의 A0는 16비트 버스의 어드레스 이므로 바이트 단위의 MCU 버스에 대응하는 핀은 A1 이 되는 것이죠

아래는 16비트 FRAM 을 2개 연결하여 32비트 버스로 엑세스하도록 만든 회로의 일부입니다.


<그림_4>


FM22L16 의 메모리 크기는 512KByte 입니다. 여러분도 직접 계산해보시기 바랍니다.
FM_CE#0 의 칩 셀렉터 하나로 동시에 2개의 칩을 동시에 엑세하여 32비트 버스를 구현하였으니 MCU 의 버스 A2 가
각 칩의 A0로 연결되어 있습니다. MCU 입장에서는 2개의 FM22L16은 FM_CE#0 핀 하나로 제어되니 하나의 칩으로
간주될수 있습니다.
여기서도 마찬가지로 FM22L16 칩의 어드레스가 자신의 버스 기준으로 되어 있음을 확인 할 수 있습니다.

아래는 74HC138 을 사용하여 nCS2를 디코딩한 회로입니다.
16개의 칩셀렉터를 만들기 위해 74HC138 을 두개 사용하였습니다.


<그림_5>

회로는 74AC138 을 사용한 이유는 반응속도를 높이기 위함입니다.
74HC138 의 입력에 대한 출력의 반응속도는 18nsec 정도입니다. 고속의 MCU에서는 이정도의 시간은 상당히
긴 시간이라 이 시간을 빠르게 하기위해 AC 타입을 사용하였습니다.
추후 HC, HCT, AC, LVC 등의 게이트 들에 대해 말씀드리로록 하겠습니다.