2011년6월20일_ATMEL社의 ARM MCU SAM3S조사와 SAM7S Datasheet, ISP, GCC 3.4 download

 

 

ATMEL社에 접속하여 정보와 개발도구를 얻는다.
http://www2.atmel.com

 

image

귀여운 안드로이드로봇이 무언가를 하고 있다. 무엇?
귀여운 안드로이드 그만보고 상단의 메뉴에서 Products(생산물)을 클릭하면...


image

제일 처음에 Microcontrollers가 나온다.
원래 ATMEL社는 메모리를 전문으로 만드는 회사인데 MCU시장이 커지니 MCU쪽으로 많이 투자를 하나 보다.


image 

MCU카테고리내의,
① 우리가 이 때까지 함께 공부했던 AVR MCU 8bit와 32bit
② ARM기반의 솔루션
③ MCU Wireless (무선)
④ 8051 Architecture (옛날에 많이 쓰였던 intel의 8051 core)

2번 ARM core가 들어간 MCU들을 살펴보자.

 

image

ARM(Advanced RISC Machine) 아키텍처는 임베디드 기기에 많이 사용되는 32-bit RISC 프로세서이다. 저전력을 사용하도록 설계하여 ARM CPU는 모바일 시장에서 뚜렷한 강세를 보인다. (출처: 위키백과)
최근에는 모바일 시장 뿐 아니라 PC시장까지 넘보고 있는 것 같다. (학습용 저가격 PC에 들어가더라)
intel CPU는 성능은 좋으나 ARM에 비해 전력소모가 커서 모바일시장에선 약세를 보이는 것 같다.

제일 처음 SAM3S가 나온다.
SAM은 SAMSUNG이 아니다. ㅋㅋ
 
SAM3S가 무엇인지 간단히 알아보고 이번에 실습할 SAM7S에 대해 알아보고 프로그램 설치도 해보자.






 

ATMEL社의 ARM MCU SAM3S는 무엇?

 

SAM3S가 무엇인지 알기 위해선 ARM CPU의 구조의 발전사(이력)을 볼 필요가 있다.
위키백과에서 검색해보니..

image 
[출처] 위키백과 http://ko.wikipedia.org/wiki/ARM_%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98

ARM1부터 6까지는 요즘 사용하지 않아 잘 모르겠으나..
관련문서를 찾아보니 intel사에서 80386을 출시하였을 때 ARM社에서도 ARM2를 내놓아 판매하였다고 한다.
intel의 80386에 비해 적은 트렌지스터로 회로가 간단하니 당연히 소비전력도 적고 시작부터 32bit CPU로 시작한 ARM core는..
intel의 8086 (16bit) CPU에서 호환을 유지하며 32bit로 확장된 것과는 많이 다르다.

아무튼 ARM6까지는 잘 쓰이지 않으니 각설하고,

image 
[출처] 위키백과 http://ko.wikipedia.org/wiki/ARM_%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98

우리가 배울 ARM7TDMI core는,

  • 32/16-bit RISC 구조 (ARM v4T)

  • 최대 성능과 유연성을 위한 32-bit ARM 명령 세트

  • 증가된 코드 밀도를 위한 16-bit Thumb 명령 세트

  • 통일된 버스 인터페이스, 32-bit 데이터 버스가 명령과 데이터를 전달

  • 8-, 16-, 32-bit 데이터 유형

  • 3 단계 파이프라인

  • 4GBytes 선형 주소 공간

  • 32-bit ALU 와 고성능 multiplier

  • 매우 적은 다이 크기와 저전력 소비

  • 보조처리장치 인터페이스

  • 광범위한 디버깅 기능

  • EmbeddedICE-RT 실시간 디버거유닛

  • On-chip JTAG 인터페이스 유닛

  • Embedded Trace Macrocell (ETM) 에 대한 직접연결을 위한 인터페이스

  • 매우 낮은 전력 소비

    [출처] ARM7 TDMI 마이크로컨트롤러|작성자 툴봇

상기의 특징들을 요약하면 32bit CPU이면서 16bit명령어셋을 가지고 있어 프로그램메모리의 용량을 절약할 수 있고,
3단계파이프라인을 가진 저전력 소규모 범용 CPU core라는 것을 알 수 있다.

다음 SAM3S시리즈에 들어간 Cortex-M3 core에 대해 보자...


image 
[출처] 위키백과 http://ko.wikipedia.org/wiki/ARM_%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98

ARM11의 ARMv6아키텍처 다음으로 Cortex ARMv7아키텍처가 나온다.
뒤에 나온다는 것은 최근에 개발되었다는 것이고,
최근에 개발되었다는 것은 CPU core의 구조가 그 이전에 나온 것에 비해 개선되었다는 것이다.
그러므로 Cortex ARMv7아키텍처가 ARM11 ARMv6아키텍처보다 더 좋다고 할 수 있다.
그런데 시중에 나온 제품들을 보면 아직 ARM11이하의 제품이 많고 Cortex는 특이하게 그 이전 상품과 달리 등급별로 나뉘어져 있다.

Cortex를 등급별로 분류를 하면,
① A시리즈 – 어플리케이션 프로세서…고성능 CPU로 스마트폰과 같이 고성능장치에 들어감.
② R시리즈 – 실시간처리시스템을 위한 임베디드 프로세서...A시리즈보다 성능이 낮으나 저전력core(?) 
③ M시리즈 – 초소형 저전력 저가격 제어용 마이크로컨트롤러, A,R시리즈와 달리 이것만 MCU이다.

SAM3S는 Cortex-M3니 저가격 제어용 MCU라는 것을 쉽게 알 수 있다.
출시된 제품리스트를 봐도...

image

프로그램이 들어가는 Flash메모리의 크기가 ATmega(AVR)과 크게 차이나지 않는다. 실제 소매가격도 비슷하다.

cortex-M3의 핵심사양을 보면..

image

①간단한 시스템 설계와 저가격
   칩의 가격도 싼데다 주변회로까지 단순한가 보다 그럼 제품이 더욱 저렴해 진다. 아마 8bit MCU시장을 잠식하기 위한게 아닐까?
②병렬캡쳐모드
   ATmega와 같이 간단한 MCU이면서 PIO(병렬I/O)에 데이터캡쳐기능과 DMA(직접메모리엑세스)기능까지 넣었다.
   캡쳐기능과 DMA는 고속데이터전송시 주변회로의 부하를 CPU가 직접처리하지 않아 빠르게 처리가 가능하다.
   (사실 캡쳐기능에 대해선 잘 모르겠으나 고속으로 들어오는 데이터를 잡는 회로가 아닌가 한다.)
③Atmel QTouch 정전용량 터치 지원
   QTouch라는 것은 ATMEL社의 터치회로의 상표인 것 같고 따로 터치IC를 구입할 필요없이 MCU 하나로 터치입력도 가능함.
④안전과 보안
   메모리 보호 유닛이 있어 코드 보호 및 다중실행성능을 향상시킨다. (왜? 보호가 되면 빨라지나 잘 모르겠음)
   하드웨어 CRC 메모리 무결성을 검사하는 동안 고유한 128 비트 ID와 외부 버스 인터페이스 스크램블 소프트웨어 비밀을 보장.
   (ATmega보단 많이 좋아진 것 같다. lock bit 몇 개 보단 훨씬 좋아 보인다.)

이외에도 ARM7에 비해 처리속도가 30%정도 향상되었다고 알고 있으나 지금은 그렇게 중요한건 아니다.
왜냐하면 Cortex-M3는 과정에 없으니 ARM7만 자세히 공부하면 된다.

요점은 cortex-M3 core는 ARM7TDMI와 달리 범용이 아닌 제어용으로 전용 MCU라고 할 수 있다.




 


SAM7S시리즈(AT91SAM7S256) Datasheet download과정



image
  
SAM3S는 그만보고 SAM7S/SE메뉴를 클릭하여 보자…


image   

개요에서 밑으로 쭉 스크롤하다 보면...


image 

SAM7S256이 나온다. 용량은 256이라서 256KBytes로 ATmega와 넘버를 붙이는게 비슷하다.


image

Datasheet가 필요하니 Documents를 클릭하자...


image

ARM7TDMI Technical Reference Manual은 ARM7TDMI core에 관한 메뉴얼이니 받지 말고,
그 아래에 있는 SAM7S Series Summary는 요약본이니 받지 말고,
SAM7S Series를 받자. 779 pages로 왠지 무시무시한 책인 것 같다.

image

왠일로 ATMEL社 파일서버 업로드 속도가 빠르다.

 

image

AT91SAM7S256 MCU는 ARM7TDMI core로 SAM3S를 조사하며 ARM7TDMI의 특징을 조사한 것과 같이..
Datasheet에도 Thumb명령셋(16bit 고밀도-용량이 적으니 2배 많이 들어감)으로 메모리를 절약한다는 것이 장점으로 기술되어 있다.

프로그래밍하면서 계속 참조할 것이니 폴더에 잘 정리해 두자.

이외에 도움이 될 만한 문서는..


image

어플리케이션 노트로 이 칩을 사용해 어떻게 응용회로를 만드는지 실제 CPU활용법에 대해 기술한 문서들이 있다.
ARM같은 경우엔 동작순서와 절차를 소스코드로 배포한다.

상기의 문서리스트를 보면,
제일 처음 시작할 때 튜토리얼과 같은게 있고,
Schematic(전자회로도) 체크 리스트,
어셈블리어로 된 스타트업코드 (인입함수와 비슷한 코드) 등이 있다.
분량이 꽤 되고 도움이 되는 내용인 것 같으니 후에 필요하면 봐야겠다.

 

image

Evaluation Board는 칩을 시장에 출시하면서 같이 만들어 MCU의 사용법과 성능을 맛 볼수 있는 평가보드이다.
우리가 실습에 사용할 보드는 MCU만 달랑 있는 보드이고 평가보드는 완제품이다.
그래서 평가보드는 비싸고 MCU만 있는 보드는 싸다.

 

 

 


AT91-ISP download과정

 

ISP프로그램은 PC에서 소스코드를 작성하고 컴파일을 거친 기계어코드를 ARM Board에 다운로딩하는 툴이다.
이 때 사용되는 컴파일러는 크로스컴파일러라고 불리우고,
이렇게 생성된 기계어코드는 PC에서 실행이 되지 않는다.
ATmega128을 실습할 때 사용했던 avr-gcc가 크로스컴파일러이고,
self.exe는 ISP프로그램이라 할 수 있다.


image

Documents는 다 보았으니 Tools로 가서 ISP프로그램을 다운받자.

 

image

SAM7S-EK 평가키트를 클릭한다.

 

image

ISP프로그램이 나올 때까지 계속 밑으로 스크롤한다.

 

image

AT91-ISP.exe 중에 가장 최신버전인 v1.13을 받는다.

 

image    image

다운받은 설치파일을 더블클릭하여 실행하면...

 

image image

설치마법사가 실행되어 환영메세지가 나오고 계속하려면 다음 버튼을 누르라고 한다.  Next클릭…
동의하지 않으면 설치가 되지 않으니 동의를 클릭…

 

image image

라이센스확인(?)...Next클릭
설치경로를 선택하고 Next…

 

image image

시작메뉴에 생성될 폴더와 링크아이콘이름을 정하고 설치버튼 클릭…
압축을 풀면서 설치가 진행이 된다.

 

image image

설치가 끝났으니 Next를 클릭하고...
SAM-BA구조와 SAM-PROG구조는 뭔지 모르니 그대로 체크된 상태로 두고 Next클릭


image image

왠지 재부팅을 해야 할 것 같다. 그대로 둔 상태에서 Finish클릭..
바탕화면에 SAM-PROG v2.4와 sam-ba v2.9아이콘 생성되어 있다.

 

 

 

‘GNU ARM toolchain for CygWin’ download과정

 

image 

google에서 “gcc arm”키워드로 검색하면 최상단에 http://www.gnuarm.com 사이트가 보인다.


image

gnuarm.com에 접속하여 상단의 FILES메뉴를 클릭하자…

 

image

처음에 나오는 압축파일(?)들은 소스코드이니 스크롤 아래로 내려...실행파일을 받자.

 

image

Binaries는 기계어…즉, 실행파일을 의미한다.
버전뒤에 숫자가 홀수이면 기능은 한 단계 높은 숫자인 짝수에 비해 기능은 떨어지나 안정화를 충분히 거쳐 안정적이라..
GCC-3.3을 받아야 하나 아쉽게도 Max OS X용 밖에 없다.

그래서 그 아래의 GCC-3.4를 받는다.

 

image  image

속도는 좀 느리지만 용량은 크지 않으니 금방 받는다. 
다운 받은 설치파일을 더블클릭하여 실행하면...

 

image image

환영메세지가 나오니 Next를 클릭하여 계속 진행한다.
라이센스에 동의할 것인지 묻는데 당연히 동의를 해야 계속 진행이 되니 라디오버튼을 동의쪽으로 옮기고 Next를 클릭한다.

 

image image

어느 디스크의 폴더에 설치할 것인지 묻는데 기본설정이 좋을 듯 하다. Next클릭...
모두 설치하는게 좋을 듯 하니 그대로 두고 Next클릭..



image image

시작메뉴폴더를 설정하고 Next클릭..
바탕화면에 단축아이콘을 만들거냐와 Cygwin DLLs(동적링크라이브러리)를 설치할 것인지 모두 그대로 체크된 상태로 두고 Next클릭..




image image

최종확인하고 설치버튼을 클릭하면 설치가 진행된다.

 

image

실행디렉토리를 환경변수에 추가할 것인지 묻는데 그대로 체크된 상태로 두고 Finish를 클릭하자.
뭐든 모르면 디폴트상태로 두고 진행하는 답이다. ㅎㅎ

 

image  CM선생님께서 나눠주신 예제소스압축된 것을 압축해제해 컴파일해보자…


image

> del *.bin
del명령으로 모든 bin파일(기계어 실행파일, ARM MCU에서만 실행되는 코드)을 지운다.

> dir
지워졌는지 확인하기 위해 dir명령으로 확인해 본다.

 

image

> make
make명령으로 Makefile에 들은 규칙대로 컴파일을 한다.

 

image

> dir
dir명령으로 컴파일이 제대로 되었는지 확인한다.
아쉽게도 ARM MCU Board가 없으니 제대로 실행이 되는지 확인은 할 수 없다.

Makefile안의 내용이 궁금해졌다…

 

image
image

all라벨을 보면 sram과 flash라벨을 의존한다는 것을 알 수 있고,
sram라벨부터 수행하고 flash라벨을 수행할 것이다.

main.c는 유저프로그램 C Code인 것을 쉽게 알 수 있고,
lowlevel.c는 하드웨어와 밀접한 관련이 있는 코드(함수)가 들어 있는 소스파일일 것이다. 
cstartup.s는 확장자가 s이니 어셈블리어파일일 것이다.

clean라벨을 보니 오브젝트파일과 바이너리파일, elf파일, map파일들을 지우고 있다.
DOS에서도 rm -rf명령이 실행되는구나…
괜히 del명령으로 지웠다…

 

 

GNUARM GCC 설치 후 컴파일이 되지 않을 때



image image

상기의 스크린샷과 같은 메세지가 출력되면 컴파일시 에러가 발생하면…
C:\windows\system 폴더에 cygwin1.dll파일이 없다는 것이다.


image

cygwin을 설치한 폴더..
C:\cygwin\bin 에서 cygwin1.dll파일을 찾아 Ctrl + C키로 복사한 뒤에…

system폴더로 가자…

 

image

C:\WNDOWS\system폴더에서 Ctrl + V키를 눌러 파일을 붙여넣은 뒤에…
컴파일을 해보자..

 

image 

image

파일목록을 보니 제대로 컴파일되었다.