일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- imu
- Sebastian Madgwick
- 멀티위
- 9DOF
- BMA180
- HMC5843
- capture
- multiwii
- atmega168
- WinAVR
- Bosch
- atmega1280
- Barometer
- javacv
- HMC5883L
- xloader
- Digital Pressure Sensor
- AT91
- QuadricopterX
- WinARM
- ITG3200
- arduino
- AVR
- java
- Triple Axis Magnetometer
- Arduino 328p
- FreeIMU
- BMP085
- Honeywell
- atmega
- Today
- Total
스나군 작업실
ATmel ARM7 AT91SAM7S256 본문
원문 : http://blog.naver.com/dspworld/60029172942
ATmel ARM7 AT91SAM7S256
AT91SAM7S256
그래픽 처리등으로 많은 메모리와 좀더 빠른 처리시간이 요구 되면서 새로운 MCU가 필요했는데 ATmel에서 아주 유용한 놈이
나왔습니다. 보통 ARM은 CPU로 외부에 RAM과 ROM을 추가로 붙여야 하지만 이 녀석은 마이크로컨트롤러 식으로 RAM과
ROM이 내장된 방식이고 패키지도 LQFP 입니다. OS를 올릴 정도는 안되고 AVR로는 좀 부족한 중급 레벨의 시스템을 구성할 때
좋겠습니다.
드디어 32비트의 세계로 발을 들이게 되었는데 많이 낯설고 레지스터 한 개가 32 비트씩이니까 어지럽군요@.@
48메가로 돌리니까 AVR에 비해 붕붕~ 날아 다닙니다. AVR보다 클럭수는 단순히 3배가 빠르지만 수 백번 반복 연산의 경우 3 x 수백 배가 되기 때문입니다. 예전 486 급의 클럭 스피드니까요.
특징
- 내장 64KB 램
- 내장 256KB 플래시 롬
- 12Mbps USB 내장
- 3개의 UART 사용가능
- 1개의 I/O 포트가 있어 32개의 입출력 핀 사용가능
- 내장 PLL회로로 55MHz 까지 지원
- MHz당 0.9MIPS
- SAM-BA 부트로더가 내부 마스크 롬에 내장
- 64핀 LQFP 패키지
* 8비트 마이컴과의 차이점
- 기동시 PLL 로 동작 주파수를 설정함
- ARM의 전원관리 기능 때문에 사용하려는 내부 장치의 전원(클럭)을 먼저 살려줘야 함
- set용 레지스터와 clear 용 레지스터가 분리돼 있음
- 포트를 예전처럼 사용하려면 해당 핀을 direct drive 모드로 설정해야 함
- int 형이 16비트에서 32비트로 바뀜
- 구조체의 sizeof() 연산자 사용시 크기가 바뀔수 있음을 주의
(gcc의 경우는 __attribute__ ((packed)), 일반적으로는 #pragma pack(1) ~ #pragma pack() 사용)
WinARM GCC 컴파일러
AVR의 WinAVR 식으로 나온 것입니다.
홈페이지는 http://gandalf.arubi.uni-kl.de/avr_projects/arm_projects/index.html
역시 경로에 C:\WinARM\bin;C:\WinARM\utils\bin 을 추가해야 합니다.
WinAVR이 설치된 경우는 C:\WinARM\utils\bin 부분이 필요 없습니다.
SAM-BA 를 통한 ISP 지원
별도 롬에 내장된 부트로더로 USB 또는 RS232 포트(DBGU)로 인 시스템
프로그래밍(ISP)을 지원 합니다. PC측 프로그램은 Atmel 사이트에서 다운 받을 수 있습니다. SAM-BA는 플래시 롬에
있을 때 실행되며 사용자 프로그램을 라이팅하게 되면 플래시를 덮어쓰게 되므로 이 부트로더는 지워지게 됩니다. 지워졌을 경우는
System Recovery 과정을 통해 내장된 별도 롬에서 플래시 롬으로 다시 복사할 수 있습니다. 최초에는 플래시 롬이
비여있는 상태이므로 SAM-BA를 복사해야 합니다.
실제 사용에는 불편하여 별도 부트로더를 작성해 사용하게 됩니다. SAM-BA는 단지 부트로더를 처음 write할 때 사용합니다.
WinARM용 부트로더(bootloader)
SAM-BA의 불편함과 불합리한 점 때문에 다른 프로그램을 참고로 WinARM용 부트로더를 만들어 봤습니다.
사용자 프로그램에 통합된 형태이고 시리얼 포트를 이용합니다. 다른 컴파일러에서도 조금 수정하면 사용가능할 것입니다.
자세한 사항은 readme.txt 파일을 참고하세요.
sam7flash.zip ver 1.0.4 (134KB)
ARM은 RAM 에서 코드 실행이 가능합니다. makefile에서 RUN_MODE를 RAM_RUN으로 설정하면 RAM에서 실행되도록 컴파일 할 수 있습니다.
sam7flash 부트로더에서 사용 가능한 RAM 실행 데모 입니다.
ramdemo.zip (53KB)
위 부트로더를 롬 이미지로 만든 버전입니다. 평소에는 RAM을 소비하지 않습니다.
u_boot.zip (130KB)
JTAG 장비
단순 인터페이스 인데 가격이 좀 비싸군요. USB 패킷을 잡아보면 호환 제품을 자작하는 것도 그리 어렵지는 않을 것입니다.
WIGGLER는 패러랠 포트를 사용하는 초저가 형입니다.
DTC114 블럭은 디지털 TR로 단순 인버터 기능이므로 74HC14로 구성해도 됩니다.
Simple JTAG interface circuit. ============================== 25 pin Male parallel 20 pin JTAG header 17-25 <--------------+-------------------------+--+-----------< 4,6,8, GND | | | 10,12,14, | AC244 200nF = = 4.7uF 16,18,20 (GND) | +------------+ Vcc | | TDI 0v +-| 1 20 |-+--------+--+-----------< 1,2 (VCC) 5 >-------------------| 2 19 |-+ TMS | 3 18 |-----XXXX----------------> 5 (TDI) 3 >-------------------| 4 17 | 51R TCLK | 5 16 |-----XXXX----------------> 7 (TMS) 4 >-------------------| 6 15 | 51R | 7 14 |-----XXXX----------------> 9 (TCK) +----| 8 13 | 51R | | 9 12 |-----XXXX---+ | +-| 10 11 | 51R | | | +------------+ | | V 0v | +------------------------------------------< 13 (TDO) TDO | 11 <---------------------------------------------+ DTC114 /-------xxxx----------------< 15 (nRST) RST 10k | / 51R 2 >----------------XXXX--+---|< | | \ X V 47k X | X | | | V 0v V
J-Link 수 백만원 대의 Multi-ICE 보다 저렴한 JTAG 에뮬레이터
AT91SAM-ICE J-Link의 ATmel 버전 (22만원)
디버거
AVR의 경우 AVR Studio가 있어서 무료 시뮬레이션 프로그램을 사용할 수 있었지만 ARM이 범용 아키텍처이다보니 ATmel에서 따로 프로그램이 나와있지 않습니다.
CrossWorks의 CrossStudio가 제일 유사한 프로그램 같습니다.
링크
AT91 ARM Forum
WinARM User Forum
* 참고
Philips 의 LPC2101은 이와 유사한 마이크로콘트롤러이며 70MHz에 가격은 3,500원 대입니다.