본문 바로가기

Embeded Programming/AVR

tapito의 AVR 정복기 - 3부. RAM

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

tapito의 AVR 정복기

3부. RAM

(c) tapito


  1. Ram이란?

    그림 1. PC에서 사용되는 RAM의 한 종류

     병렬 메모리는 1 사이클당 1바이트의 데이터를 취급하는 기억 소자입니다. 이 중 RAM은 전원이 차단되면 기억하고 있던 내용이 모두 지워지며 내부 구조에 따라 플립플롭형인 SRAM과 커패시터형인 DRAM 등으로 분류됩니다.

    그림 2. 병렬 메모리의 개념도

  2. 병렬 RAM의 핀 배열

     대부분의 병렬 RAM의 핀은 주소 핀 + 데이터 핀 + 제어 핀으로 구성되어 있습니다. 즉, 어느 제조사의 어느 모델이든 공통적으로 Axx, I/Ox, /OE, /WE, /CE를 가지고 있습니다. 여기에서는 AMIC에서 제조하는 A625308A-70SF를 예로 들어 보겠습니다.

    그림 3. A625308A-70SF의 핀 배열

    표1. A625308A-70SF의 핀 배열

    핀 이름 핀 번호 약어 핀 설명
    A0 10 Address Input (Bit 0) 데이터를 읽거나 쓸 메모리의 번지 수를 지정합니다. 이 소자는 15개의 주소 핀을 지원하므로 용량은 (2^16 - 1) Bytes, 약 32KB입니다.
    A1 9 Address Input (Bit 1)
    A2 8 Address Input (Bit 2)
    A3 7 Address Input (Bit 3)
    A4 6 Address Input (Bit 4)
    A5 5 Address Input (Bit 5)
    A6 4 Address Input (Bit 6)
    A7 3 Address Input (Bit 7)
    A8 25 Address Input (Bit 8)
    A9 24 Address Input (Bit 9)
    A10 21 Address Input (Bit 10)
    A11 23 Address Input (Bit 11)
    A12 2 Address Input (Bit 12)
    A13 26 Address Input (Bit 13)
    A14 1 Address Input (Bit 14)
    I/O0 11 Data Input/Output (Bit 0) 데이터를 읽거나 쓰기 위한 핀입니다. 한번에 8비트를 처리할 수 있습니다.
    I/O1 12

    Data Input/Output (Bit 1)

    I/O2 13

    Data Input/Output (Bit 2)

    I/O3 15

    Data Input/Output (Bit 3)

    I/O4 16

    Data Input/Output (Bit 4)

    I/O5 17

    Data Input/Output (Bit 5)

    I/O6 18

    Data Input/Output (Bit 6)

    I/O7 19

    Data Input/Output (Bit 7)

    /CE 20

    Chip Enable

    이 칩의 저장 공간에 접근할 때는 0을 입력합니다. 여러 RAM을 연결해서 쓸 때 그 중 한 개의 칩을 지목할 경우에 자주 사용됩니다.
    /OE 22

    Output Enable

    이 칩의 저장 공간에서 데이터를 읽을 때는 0을 입력합니다. /CE에 0이 입력된 상태에서만 작동합니다.
    /WE 27

    Write Enable

    이 칩의 저장 공간에 데이터를 기록할 때는 0을 입력합니다. /CE에 0이 입력된 상태에서만 작동합니다.

    Vcc 28

    Vcc

    전압을 공급합니다.

    GND 14

    Ground

    접지와 연결합니다.

  3. 액세스 방법

    • 메모리에 값 쓰기

       Datasheet에 따르자면 메모리에 값을 쓰기 위하여 Ax, Dx, /CE, /WE 핀을 다음과 같은 순서로 조작합니다. 그러나 각 단계를 진행할 때마다 메모리 내부에서 이를 처리할 시간으로 수십 ns가 소요됩니다. AVR의 처리속도가 RAM의 작동 속도보다 빠르다면 RAM이 미처 준비하기도 전에 AVR이 다음 명령을 진행하므로 RAM이 제대로 작동하지 않을 수도 있습니다. PC로 치자면 CPU와 RAM의 처리 속도 차이가 있는 것과 마찬가지죠. 해결 방법으로는 AVR과 RAM 사이에 PC에서처럼 별도의 캐시(Cache) 메모리를 넣거나 각 단계 사이에 일정한 시간 지연을 두도록 프로그래밍을 할 수 있겠습니다.

      1. Address 핀을 통해 주소 지정
      2. CE와 WE를 LOW 상태로 두기 (RAM이 데이터를 받을 수 있는 상태로 설정
      3. Data 핀을 통해 데이터 입력
      4. CE와 WE를 HIGH 상태로 되돌려 놓기

      그림 4. RAM의 쓰기 제어

    • 메모리에서 값 읽기

      메모리에서 값을 읽는 과정도 위와 유사합니다.

      1. Address로 주소 핀 지정
      2. /CE 핀 취급 (연결된 여러 개의 메모리 중 이 소자를 선택)
      3. /OE 핀 취급 (RAM이 내용을 출력할 수 있도록 설정)
      4. I/O 핀에서 해당 번지의 데이터를 출력함

      그림 5. RAM의 읽기 제어

  4. 실험해보기

    위에서 알게 된 몇 가지 사실들을 통해 직접 RAM을 조작해 보는 회로를 구성해 보았습니다.

    그림 6. RAM 조작 회로

    표2. RAM 조작 회로의 부품

    기호 품목 규격
    DIP-SW1, DIP-SW2 DIP 스위치 8비트
    LED1-LED8 LED 아무거나
    R1-R17 저항 4.7k 1/8W
    SW1-SW3 Tact 스위치(누름 스위치) 아무거나
    U1 RAM SRAM (A625308A-70SF)

    그림 7. RAM 조작 회로의 구현


    3 부분으로 이루어진 스위치 조작부. 왼쪽부터 차례로 제어버스, 주소버스, 데이터버스입니다.

    오늘 실험의 핵심이 된 SRAM
    전체적인 실습 회로