Table of Contents

mb382_um.cfg 와 mb382_emi.cfg 의 관계

우선 저 두 파일의 용도와 역할에 대해서 이해할 필요가 있다. 그 후에 5517 bus 에 관해 알아보도록 하자!

Mb382_um.cfg

전체 메모리의 설정을 해주는 파일이다. 파일을 보면 알겠지만, 처음에 전체 메모리 영역을 잡고, bank 에 따라서 시작 주소를 정해주고, 그로부터 얼마만큼 용량을 잡는다.

memory FLASH0        0x7Fe00000           (2*M)                ROM
memory SDRAM         0xC0000000           (16*M)               RAM

위의 예를 볼 것 같으면, FLASH0 라는 디바이스는 시작 주소가 0x7fe00000 에서부터 2M 용량을 잡는다. 왜 하필 2M 일까?? 곰곰히 생각하면 이유를 알 수 있다. 전체 메모리의Region3 의 범위가 0x40000000 에서 0x7fffffff 까지이기 때문이다. FLASH 영역은 Region3 중에서도 bank5 에 잡혀있다. 당연히 가장 마지막 이기 때문에,

0x7fffffff - 0x7fe00000 = 1fffff (약 2M)

또, 파일에서 0x7F800000 이라면, 용량은 8M 로 잡아주어야 한다.
만일 8M 보다 많거나 적게 잡아주면, hex 파일을 만들 때 에러가 발생한다. 반드시 정확하게 잡아주어야 한다.

그리고 나서 컴파일을 하고 hex 파일을 만들고, 그안을 볼 것 같으면, 위에서 정해준 주소가 가장 앞단에서부터 시작한다는 것을 알 수 있다. 나중에 Flash 가 write 할 때는 바로 이 주소를 참조한다.

나중에 CPU는 각각의 디바이스를 하나의 큰 메모리로 보기 때문에 0x7fe00000 부터는 플래시를 의미하지만 CPU는 램의 일반적인 주소로 인식한다.

Mb382_emi.cfg

이 파일은 각각의 bank 0~ 5까지의 설정을 담고 있다. 하나의 뱅크는 4개의 레지스터로 세팅되어 있는데, 이것은 각각의 시간 타이밍등을 나타내고 있다. 기본적으로 메모리맵은 다음과 같이 설정되어 있다.

Bank0      0x40000000-0x4fffffff     SDRAM 32Mbyte (256 MBit)
Bank1      0x50000000-0x5fffffff     STEM0/SRAM    (256 MBit)
Bank2      0x60000000-0x6fffffff     STEM1         (256 MBit)
Bank3      0x70000000-0x7effffff     ATAPI/DVB-CI  (240 MBit)
Bank4      0x7f000000-0x7f7fffff     DVB-CI        ( 64 MBit)
Bank5      0x7f800000-0x7fffffff     SFLASH 8Mbyte ( 64 MBit)

기존의 메모리맵을 변경하고 싶다면, 아래와 같이 직접 레지스터에 적어주면 된다.

poke -d 0x202ff830   0xFD
poke -d 0x202ff840   0xFE

위는 BANK_3_TOP_ADDRESS 과 BANK_4_TOP_ADDRESS 를 레지스터를 세팅해주는 부분이다. 하지만 해보면 알겠지만, 총 32개의 bit 중에서 8개의 bit만 바꿀 수 있기 때문에 어느정도 한계가 있다.

두 파일의 특징

두 파일 모두에서 각각의 BANK의 시작 주소를 나타낼 수 있다. 결론부터 얘기하자면, 2개의 파일에서 뱅크의 영역은 같아야 한다. 설사 같지 않더라도, 같은 범위내에 있어야 한다.
더 정확히 얘기하면, 레지스터의 범위가 382_um.cfg 의 범위보다 커야 한다.

만일 두개의 파일이 각각 가리키는 주소가 다르다면, 컴파일 에러는 없겠지만, 궁극적으로 우리가 원하는 플래시를 읽고 쓰는 동작은 하지 않을 것이다.

CPU가 플래시에 엑세스하는 과정

  1. 우리는 결과적으로 플래시에 엑세스 해야 한다. CPU 가 처음 Emi 레지스터의 BANK_3_TOP_ADDRESS 을 참조하여, BANK를 찾는다.
  2. 앞으로 CPU 는 BANK 5 , 즉 플래시를 엑세스 할 때는 이 주소를 건드리면 된다.
  3. 이 주소를 엑세스 하면, 뱅크 5의 칩 셀렉트가 동작한다. 그리고 동작한 칩 셀렉터는 플래시의 특정 주소에서부터 읽고 쓰기를 반복한다.

SSC & ASSC

이번에는 하드웨어적인 시각에서 5517 을 접근해보겠다. SSC(Synchronous serial controller) 와 ASSC(Asynchronous serial controller) 이다.
풀어서 설명하자면, 동기적 직렬 통신 과 비동기적 직렬 통신이라고 할 수 있겠다.
좀 더 이해하기 쉽게 예를 들어 설명하겠다.

방식 디바이스
SSC I2C
ASSC UART

5517 에서는 각각의 비동기 또는 동기적으로 동작하는 디바이스에 대응하기 위해, 앞에서 설명한 SSC 와 ASSC 포트를 지원하고 있다.
그렇다면, 과연 SSC 와 ASSC 의 차이는 뭘까? 그것은 바로 클럭(시간)이다.

우선 I2C 의 예를 들어보자! I2C 는 SDA 와 SCLK 로 통신한다. 하나는 데이터를 주고받고, 하나는 클럭신호이다. 통신을 하려면, 현재의 데이터가 보내는 것인지, 받는 것인지 알아야 한다. 그러려면, 그것을 구분할 수 있는 뭔가가 필요한 데, 그것이 바로 클럭신호이다. 그래서 I2C 는 일정한 클럭단위로 동작한다. 그래서 우리는 I2C 가 동기식으로 동작한다고 부른다.

이번에는 UART 를 예로 들어보자! 현재 DAC5000 에서는 2 개의 ASSC 를 사용하고 있다. 하나는 시리얼 통신을 위함이고, 나머지는 프론트(FRONT)를 위함이다. 앞의 I2C 와 다른 점이라면, 바로 RX 와 TX 가 있다는 점이다. 그렇다. 통신 경로가 2 개라는 것이다. 데이터를 보내는 통로와 받는 통로가 따로 있는 것이다. 그래서 굳이 I2C 와 같이 현재 데이터의 구분을 할 필요가 없다. 결국 클럭에 관계없이 통신을 한다.

그래서 우리가 UART 는 비동기식으로 동작한다고 부른다.