:::: MENU ::::
Browsing posts in: ARM

mbed – SeeedArch 프로그래밍하기

SeeedArch

mbed의 플랫폼 중의 하나인 Seeedstudio에서 만든 보드, SeeedArch를 테스트중이다. 이 보드의 스펙은 다음과 같다.

  • mbed enabled
    • online development tools
    • easy to use C/C++ SDK
    • lots of published libraries, projects
  • Standard Arduino Appearance, two Grove connectors
    • available with 3.3V compatible shields
    • a large number of grove modules
  • Drag-n-drop programming
  • NXP LPC11U24 MCU
    • Low power ARM Cortex-M0 Core
    • 48MHz, 32KB Flash, 8KB RAM, 4KB EEPROM
    • USB Device, 2xSPI, UART, I2C

이 보드의 가장 큰 특징은 보드의 형태가 아두이노 보드와 같아서 아두이노 쉴드를 연결할 수 있다.

800px-Arch_Pinout.jpg

코딩은 mbed의 웹컴파일러로 하고 다운로드 역시 msd로 잡히는 외장드라이브에 copy를 하면 되는데, Mac이나 Linux에서는 Windows와 달리 drag & drop이 안된다.

프로그래밍 방법 (Mac)

  • 보드의 왼쪽에 있는 리셋 버튼을 길게 누른다. (짧게 누르면 H/W 리셋이고, 길게 누르면 ISP 모드이다.)
  • 그러면 Finder에 CRP DISABLED 라고 스토리지가 잡힌다. Windows에서는 이 폴더에 있는 firmware.bin을 지우고 새로운 firmware.bin을 copy하면 되지만 Mac에서는 Terminal에서 다음과 같이 dd 명령어로 copy한다.
  • dd if=새로운 firmware 파일명 of=/Volumes/CRP\ DISABLD/firmware.bin conv=notrunc

좀 더 쉽게하기위해서 Mac의 Automator를 사용하여 쉘 스크립트를 만든다.

  • dd if=$* of=/Volumes/CRP\ DISABLD/firmware.bin conv=notrunc

Automator_SeeedArch

LED blink 프로그래밍

SeeedArch

관련정보: SeeedStudio WiKi


ARM Cortex M0 – 기술적 개요

일반적인 정보

  • 폰노이만 아키텍처(단일버스 인터페이스)를 가지는 32비트 RISC 프로세서
  • ARMv6 아키텍쳐 : M0, M1(FPGA에 최적화)이 ARMv6 아키텍쳐이며, M3는 ARMv7 아키텍처임. 상위호환이 가능해 M0코드가 M3로 쉽게 이식이 가능.
  • 56개의 명령어: Thumb 명령어 지원, Thumb-2 명령어의 일부 지원

Cortex-M0 block diagram

ARM Cortex-M0의 특징

  • 0.9DMIPS/MHz
  • 프로세스 코어는 3단계 파이프라인
  • NVIC: 프로그램 가능한  4개의 서로 다른 우선 순위 레벨을 가질 수 있으며, 32개까지의 interrrupt request를 받을 수 있다.
  • WIC (Wakeup Interrupt Controller)는 옵션
  • OS지원을 위한 System Tick지원

ARM Cortex-M0의 장점

  • 에너지 효율성 – 슬립모드와 연계되어 있다. 즉 평소에는 슬립모드에 있다가 인터럽트가 발생을 하면 빨리 처리하고 다시 슬립모드로 들어감.
  • 8, 16비트의 제약을 극복 – 32비트 linear address 사용(더 큰 메모리의 사용 가능), 더 큰 스텍사용(참고로 8051은 256바이트), 향상된 명령어 셋으로 더 작은 크기의 코드 가능( 참고로 8051은 항상 ACC를 사용해야 함)

저전력을 가능하게 하는 요소들

  • 적은 게이트수 : 최소 설정으로는 12K, 일반적으로 17~25K
  • 높은 효율성 : 0.9 DMIPS/MHz (80486DX가 0.81 DMIPS/MHz 였다는…)
  • 슬립모드 : WIC(Wakeup Interrupt Controller), 2 개의 슬립모드: WFI(Wait for Interrupt ), WFE(Wait for Event)
  • 로직셀 향상 : Ultra Low Leakage 로직 셀 라이브러리 도입

average current

즉 물리적으로 누설전류가 적은 로직셀, 최적화된 게이트 수를 통해 성능이 좋은 칩으로 슬립모드를 제공하므로 저전력이 가능하다.

관련자료 다운로드 [wpdm_file id=10]


ARM Cortex M0 – 아키텍처

Programmer’s Model

CortexM0 Processor mode

ARMv6-M 아키텍처에서는 쓰레드 모드와 핸들러 모드가 거의 같다. 유일한 차이는 쓰레드 모드에서는 CONTROL이라는 특별 레지스터의 설정으로 shadow된 스텍포인터를 사용한다는 것이다.

레지스터

201402061550.jpg

로드 스토어 아키텍쳐: 메모리에 있는 데이터를 처리하기 위해 이 데이터는 메모리로 부터 레지스터 뱅크의 레지스터에 옮겨져서 내부 프로세서에 의해 처리되고, 이것이 다시 메모리에 쓰여진다.
Cortex-M0는 13개의 32비트 범용 레지스터와 몇개의 특별(special)레지스터를 가진다.

R0-R12

범용 레지스터이며, 대부분의 16비트 Thumb 명령어들은 R0-R7, 하위(Low)레지스터만 액세스 가능하다. 이 레지스터들은 리셋시에 초기값이 정해져 있지 않다.

R13, SP (스텍 포인터)

2개의 스텍포인터가 존재하며, Push, Pop은 32비트 명령이기 때문에 스텍포인터는 항상 32비트의 최하위 2 비트는 항상 0이다.

-. MSP (SP_main) : 메인 스텍 포인터 – 리셋시에 사용되는 기본 설정 스텍포인터이며, 익셉션 핸들러가 실행될 때도 사용이 됨, 초기값은 스타트업 동작시 벡터테이블에서 처음 32비트 워드를 가져온다.
-. PSP (SP_process) : 프로세스 스텍 포인터 – 쓰레드 모드(익셉션을 처리하지 않을 때)에서만 사용됨, 초기값이 정해지지 않음.

R14, LR (링크 레지스터)

함수 호출 또는 서브루틴의 복귀주소를 저장하기 위해 사용이 된다.

R15, PC (프로그램 카운터)

읽기시에는 파이프라인설계 특성 때문에 현재 명령어 주소 + 4값이 읽혀진다.

PSR, 프로그램 상태 레지스터

이 레지스터는 다음 3개의 레지스터들로 구성이 된다.

-. Application PSR (APSR) : 조건 분기를 위해 N(음수), Z(제로), C(캐리 또는 바로우), V(오버플로우)
-. Interrupt PSR (IPSR) : 현재 실행중인 ISR(인터럽트 서비스 루틴)의 번호를 표시한다.
-. Execution PSR (EPSR) : Cortex-M0에서 T비트는 항상 1 (Thumb 상태를 표시), 만약 이 비트가 0이면 Hard Fault 익셉션이 발생한 것이다.

201402061613.jpg

이 세개의 레지스터는 xPSR 라 불리는 하나의 레지스터를 통해 액세스 된다.

PRIMASK: 인터럽트 마스크 특별 레지스터

201402061621.jpg

PRIMASK를 설정하면 NMI나 Hard Fault 익셉션을 제외한 모든 인터럽트를 차단한다.

CONTROL: 특별레지스터

201402061622.jpg

리셋이 된 후(Active stack pointer = 0)에는 MSP가 사용이되지만 , 쓰레드 모드에서 Active stack pointer가 1로 되면 PSP가 선택이 된다. 간단한 응용에서는 MSP만 사용이 되지만 OS가 사용이 될 경우 PSP가 사용이 되는 데 이것은 빠른 Context switching을 위한 것이다. MSP의 초기값은 프로그램 메모리의 시작 부분에 저장이 되지만 PSP의 초기값은 정해지지 않으며, 사용하기전에 프로그램에 의해 초기화가 되야 한다.

메모리 시스템의 개요

201402061628.jpg

스텍 메모리 동작

  • First-in, Last-out 동작 메카니즘
  • Push – 스텍에 메모리를 저장, 스텍 포인터의 주소는 감소한다.
  • Pop – 메모리에 저장된 데이터를 복구, 스텍 포인터의 주소는 증가한다.
  • Cortex-M0의 경우 full descending 스텍 모델 – 이것은 스텍 포인터가 항상 스텍 메모리의 마지막에 저장된 데이터를 가리킨다는 의미인다.
  • Push를 했는데 Pop을 하지 않을 경우 스텍 오버플로우 발생

익셉션과 인터럽트

201402061654.jpg
Vector table

NVIC

  • Flexible 인터럽트 관리: s/w로 인터럽트를 enable / disable 가능, Pending 상태를 set / clear가능
  • 중첩된 인터럽트 지원 – 선점형(preemption)
  • 벡터 방식의 익셉션 진입
  • 인터럽트 마스팅

디버그 시스템

Halt mode debug, stepping, register access를 제공하고, BPU(Breakpoint Unit), DWT(Data Watch point)같은 디버그 기능을 제공한다.JTAG 연결(nTRST, TCK, TDI, TMS, TDP등 5핀 사용)과 Serial-Wire 연결(Serial Write Clock, Serial Write Data등 2핀 사용)은 동일한 컨넥터를 사용이 가능하다. 즉 TCK와 Serial Write Clock이 공유되고, TMS와 Serial Write Data핀이 공유되며 나머지는 NC이다.

Startup Sequence

IMG_0003

프로세서가 리셋이 되면 다음과 같은 순서로 동작을 한다.

1. 0x00000000 번지에 저장이 되어 있는 MSP의 초기값을 읽는다. MSP의 초기값 = 스텍의 시작 번지

2. 0x00000004 번지에 저장이 되어 있는 리셋 벡터를 읽는다.

3. 리셋 벡터에 저장된 번지의 명령어를 패치한다.

만약 부트코드가 0x000000C0 번지부터 시작을 하면, Thumb 코드임을 나타내기 위하여 최하위 비트를 1로 설정한 값이 리셋 벡터에 저장이 되어 있어야 한다.


ARM Cortex M0 – 소개

ARM사는 Acorn Computer Group, Apple 컴퓨터, VLSI Technology의 합작투자회사로 1990년에 Advanced RISC Machine Ltd라는 이름으로 설립

ARM Cortex-M0의 특징

  • 적은 게이트수: 12,000
  • 저전력 기능 지원 및 높은 에너지 효율성 – 0.9 DMIPS/MHz
  • 사용하기 쉬운 인터럽트 우선순위 제어를 가진 내장형 인터럽트 콘트롤러
  • Low interrupt latency, 타이밍이 확정적(deterministic)
  • Thumb 지원- 높은 코드 밀도

ARM 프로세서와 아키텍처

  • 2006년에 Cortex-M3 (ARMv7-M 아키텍쳐) 출시
  • Cortex-M0는 ARMv6-M 아키텍쳐기반
  • ARMv6-M 아키텍쳐는 ARMv7-M의 메모리 맵,  프로그래머 모델과 익셉션 모델, Thumb2 시스템과 ARMv6의 Thumb 명령어 셋 그리고 CoreSight Debug 아키켁쳐를 결합한 형태이며, 여기에 저전력에 특화된 설계로 나온 것이 M0이며, FPRGA 특화된 특성을 넣은 것이 M1이다.
arm processor architecture

ARM 프로세서 아키텍처의 진화


ARM Techcon 2013, ARM Technology Symposia 2013

지난 10월 29일부터 3일간 미국 캘리포니아 산타클라라 컨벤션 센터에서 열린 “ARM Techcon 2013” 행사에 참석해서 관련 글을 블로터넷에 기고를 했다. 보낸 원고에서 몇가지 영어 표현들이 한글로 바뀌고 제목들이 추가로 달렸는데, 에디터의 손을 거치니 좀 나아지는 것 같다. 한국에서는 IoT(Internet of Things)가 사물인터넷으로 번역되는 것이 좀 이상하지만…

기고문:  “사물인터넷” 눈독 들이는 ARM

최근  ARM CEO인 Simon Segars의 키노트가 유투브에 올라와 있다.

당시 3일 일정의 모든 세션을 들을 수 있는 티켓을 구매(약 1500불)해서 들었는데, ARM에서는 한국에서도  비슷한 행사를 개최했다.

ARM_Symposia _2013

그런데 이 행사는 ARM Techcon보다는 축소된 내용으로 개괄적인 내용만 다뤄졌고, 한국의 파트너들의 발표를 제외하면 당시 행사에서 발표한 슬라이드를 그대로 사용해서 발표를 했다. 지난번에 미국에서 만난 ARM사의 Diya씨가 이번에 한국에서도 발표를 했는데, 발표가 끝나고 물어보니 한국, 대만, 중국, 일본, 유럽, 인도를 거쳐서 미국에서 고객 미팅도 하고 내년에나 집(영국)에 간다고 한다. -_-;;

Diya씨는 Cortex-M시리즈에 대한 일반적인 내용을 발표를 했다.

IMG_0005_2

이번 발표도 미국서와 마찬가지로 주제는 IoT이다. mbed에 대한 소개가 좀 미흡했지만 국내에서도 이 플랫폼을 가지고 IoT를 촉진시키기 위한 커뮤니티의 확산에 노력을 하지 않을까 생각이 된다.

전시된 제품 중 흥미로운 것은 Sphero Ball에 사용된 칩이 STMicro의 STM32F0인것과, Nike_Fuel Band에  STM32L151QCH 칩이 사용이 된 것이 흥미로웠다.

IMG_0010_2

IMG_0011_2

관련 사진: http://www.flickr.com/photos/jbkim/sets/72157637889539275/

 


6LowPAN Network Processor – CC1180

CC118은 6LowPAN chip으로 검색을 하면 나오는 TI의 칩이다. 데이터시트를 보니 최근 ARM에 인수된 Sendinode의 솔루션이 칩에 들어가 있다. MCU와의 인터페이스는 UART이다.

데이터시트 다운로드는 아래 링크에서… [wpdm_file id=5]

CC1180

 


CortexM0 보드와 CooCox

NXP LPC1114 보드

이전 블로그를 보니 2011년도 초에 NXP와 Nuvoton의 Cortex M0에 대해 쓴 블로그 포스팅이 있었는데 최근 당시에 CooCox로 부터 받은 보드와 최근에 Nuvoton에서 받은 보드를 테스트를 해봤다. 아래 그림에서 위에 있는 것은 NXP칩을 사용한 LPC1114보드이고, 아래 그림은 Nuvoton의 M0516NBL 을 사용한 보드이다.

CortexM0 보드

최근 이런 개발 보드들의 특징은 디버거를 포함을 하고 있는데, 보드의 좌측 부분이 디버거 기능을 하며,  CMSIS-DAP 기능을 한다.

하지만 몇 년 지난 보드를 다시 PC에 연결을 해보니 일단 연결 부터가 되지 않는다. 아마도 이 보드의 CooCoox의 ColinkEX가 업데이트가 됐는가 싶어서 이 보드의 ColinkEX f/w를 확인해 보니 예상한 대로 f/w가 업데이트 되어 있다. 관련 자료: http://www.coocox.org/CoLinkGuide/CoLinkDIY.htm

  • JP1을 쇼트시키고 USB 전원을 연결하면 LPC1343 칩의 내부 메모리가 “”CRP2 ENABLD” or “CRP DISABLD”의 레이블을 가진 MSD로 잡힌다.
  • 여기에 파일을 제거하고 위 링크에서 F/W를 다운로그해서 카피한다.
  • JP1을 오픈하고 USB 전원을 다시 연결한다.

물론 PC에는 드라이버를 설치를 해야한다.

Nuvoton NuTiny-M051보드

이 보드의 왼쪽 부분의 디버거의 이름은 Nulink이며, 보드를 PC에 연결을 하니 USB-HID로 잡힌다. NXP 보드와 마찬가지로 디버거를 이용해 개발을 하고 양산시에는 보드를 잘라서 F/W를 구울수 있는 구조로 되어 있다. 사용해 보니 mbed에 있는 CMSIS-DAP와 다른 점은 호스트에 연결되는 USB로 시리얼까지 처리를 하지는 않아서 시리얼 출력을 보려면 보드에서 선을 따로 뽑아야 한다. 하지만 NXP 보드는 보드에 RS232C 드라이버 칩과 소켓이 있어서 바로 연결을 할 수 있다.

CooCox 개발 환경

CooCox 역시 당시 블로그 포스팅에도 소개를 했었는데 최근 다시 설치를 해서 확인을 해보니 다양한 Cortex 칩들을 지원을 하고 있고, 커뮤니티도 제법 커져있다. 하지만 당시와 달라진 점은 ARM GCC 를 따로 설치를 해주고 경로를 설정을 해줘야 한다.

위 사이트에서 gcc를 다운로드 받고 설치를 한후, Project >> Select Toolchain Path를 지정을 한다.

CoIDE_Set_1

Blink 테스트

입베디드 보드에서의 Hello World와 같은 LED 깜박이기 예제를 돌려보자. 프로젝트를 만드는 것은 쉽다.

coocox

  • Project >> New Project : 프로젝트 이름을 정한다.
  • 칩 또는 보드를 선택을 하는데, 만약 이 툴에서 제공하는 보드리스트에 사용하는 보드가 있다면 보드를 선택을 하고, 없다면 칩을 선택한다.
  • 사용할 컴포넌트를 선택한다.  만약 GPIO를 선택을 하면  CMSIS Core와 CMSIS Boot는 자동으로 로드 된다. (스텝 3)
  • 좌측 창의 Component 부분의 GPIO에  2개의 예제가 있다고 표시가 된다. 이것을 선택을 하고 Blink예제를 add하면 프로젝트의 main 함수에서 blink 함수를 호출을 한다.
  • Blink.c 파일을 보면 Port2의 GPIO9 를 on/off 하는데, 내가 가지고 있는 보드의 설정과 동일하다. 즉 코드를 수정할 필요가 없다.
  • Project  >> Build (단축키 F7)를 한후, Flash >> Program Download를 선택한다. (보드의 JP2는 쇼트)
  • 보드의 JP2를 오픈하고 리셋 버튼을 누르면 다운로드 한 코드가 동작을 한다.

이상으로 코드 한줄 코딩하지 않고 개발 환경 설정하고 칩에 F/W까지 다운로드해서 동작을 확인했다. 사용을 해보니 참 편한데 한가지 아쉬운 점은 CooCox가 Windows만 지원을 한다는 것. LPCXpresso의 경우는 3가지 OS (Win, MAC, Linux)를 다 지원하는데….


CMSIS-DAP 란?

CMSIS

Cortex Microcontroller Software Interface Standard의 약자. 즉 다양한 칩 벤더가 Cortex 시리즈의 IP를 라이센스해가면서 하드웨어 독립적인 표준화된 소프트웨어 인터페이스가 필요하게 됨.  이것은 다음을 포함한다. 스펙은 ARM에 사용자 등록을 하면 받을 수 있다. 회원 가입을 하고 이 링크에 접속을 한다.  https://silver.arm.com/browse/CMSIS

  • CMSIS-CORE: provides an interface to Cortex-M0, Cortex-M3, Cortex-M4, SC000, and SC300 processors and peripheral registers
  • CMSIS-DSP: DSP library with over 60 functions in fixed-point (fractional q7, q15, q31) and single precision floating-point (32-bit) implementation
  • CMSIS-RTOS API: standardized programming interface for real-time operating systems for thread control, resource, and time management
  • CMSIS-SVD: System View Description XML files that contain the programmer’s view of a complete microcontroller system including peripherals
  • CMSIS-DAP

CMSIS-DAP의 DAP는 Coresight Debug Access Port의 약자이다. 구체적인 스펙은 역시 ARM에 사용자 등록을 하면 받을 수 있다. https://silver.arm.com/browse/CMSISDAP 아래 그림은 3가지 mbed모듈에 어떻게 CMSIS-DAP가 연결이 되어 있는지를 보여준다.

cmsis-dap-6

여기서 onboard interface의 기능은 다음 그림으로 설명이 된다. 즉 호스트와는 USB로 연결이 되어, Mass Storage Device 프로그래밍, CMSIS-DAP 로 디버깅, 가상 시리얼 포트를 제공한다.

onboard-if-block

mbed의 HDK에 이것이 포함이 되어서 커스텀 디자인을 지원하지만 현재는 NXP LPC1768, LPC11U24 and KL25Z  이 3가지 칩만 지원을 하고, 몇 벤더(NXP, Freescale)만 선택을 했다는…

The mbed HDK currently supports the NXP LPC1768, LPC11U24 and KL25Z. Due to an unexpectedly high demand for the HDK, we are choosing a few lead partners to work with to iron out any issues that may arise before we make it freely downloadable.

출처: http://mbed.org/handbook/mbed-HDK#mbed-onboard-interface

CMSIS-DAP firmware

중요한 것은 인터페이스 칩의 firmware인데, 이것도 위 사이트에서 다운로드가 가능하며 하드웨어 요구사항은 다음과 같다.

Hardware Requirements

The CMSIS-DAP Firmware is designed for Debug Units that fulfill the following hardware requirements:

  • Cortex-M0, Cortex-M0+, Cortex-M3, or Cortex-M4 processor-based microcontroller.
  • CPU Clock: 48MHz or higher; Microcontroller must have a SYSTICK timer.
  • RAM: 8KB or more; Flash ROM: 16KB or more.
  • Full-speed or High-speed USB Device Peripheral.
  • 7 standard I/O pins for JTAG/SWD Device Interface.
  • optional 2 I/O pins for Status LEDs.

추가자료

  • SeeedStudio의 경우는 보드에 타겟칩만 있는데, 이경우는 보드 2개를 연결해서 프로그래밍을 하기도 한다. 관련 정보
  • NXP에서 제공하는 app. note:  Porting the CMSIS-DAP debugger to the Cortex-M0 platform [wpdm_file id=4] 

mbed 분석

mbed

mbed는 웹 기반의 컴파일러를 사용하는 보드로 2005년 ARM 사의 2엔지니어인 Simon(ARM R&D)과 Chris(ARM Support)가 “Rapid Prototyping for Microcontrollers”라는 비젼으로 시작을 했다. 이제는 오프라인 툴들로의 변환도 지원을 하고 활발한 커뮤니티를 가지고 있는데, 2007년 정도에 지금의 모습을 갖추었다고 한다[1]. 현재 NXP의 ARM CortexM3 칩인 LPC1768을 사용한 모듈과 M0기반인 LPC11U24을 사용한 버젼 그리고 올 2013년에 Freescale의 MKL25Z128VLK4을 사용한  Freedom FRDM-KL25Z 보드등 다양한 플랫폼(http://mbed.org/platforms/) 들이 있다.

mbed_pinout

Features

  • NXP LPC1768 MCU
    • High performance ARM® Cortex™-M3 Core
    • 96MHz, 32KB RAM, 512KB FLASH
    • Ethernet, USB Host/Device, 2xSPI, 2xI2C, 3xUART, CAN, 6xPWM, 6xADC, GPIO
  • Prototyping form-factor
    • 40-pin 0.1″ pitch DIP package, 54x26mm
    • 5V USB or 4.5-9V supply
    • Built-in USB drag ‘n’ drop FLASH programmer
  • mbed.org Developer Website
    • Lightweight Online Compiler
    • High level C/C++ SDK
    • Cookbook of published libraries and projects
  •  mbed회로도: http://mbed.org/media/uploads/chris/mbed-005.1.pdf

모듈의 전면에 있는 칩이 LPC1768이며, 내부에 512KB 플래시 / 32KB  램을 가지고 있으며, 핀 타입은 브레드보드에 꼽기 쉽게 2.54피치의 배수로 되어 있고 USB전원으로 동작한다. 모듈의 뒷면에는 또 다른 칩(CortexM3로 추정되며 mbed Interface라고 불린다.)과 Atmel사의 AT45DB161D 시리얼 플래시 메모리(2MB), 이더넷 PHY가 달려있다.  회로도 및 아래 그림을 보면 mbed Interface는 USB로 PC에 연결이 되어서 시리얼 플래시를 Mass Storage로 보이게 하고, 사용자가 여기에 펌웨어를 넣으면 JTAG으로 연결된 타겟( LPC1768)에 프로그래밍을 한다. Mass Storage의 파일시스템은 FAT12라고 하며, 가장 최근 파일이 프로그래밍이 된다.

mbed-internals

mbed Interface칩의 역할을 더 자세히 알려면 CMSIS-DAP를 알아야 한다.


LPC810 ARM CortexM0+ Project -1

Project Description

이 프로젝트의 목적은 가장 작은 MCU에 Ethernet connectivity를 구현하는 것이다. 아마 아래 그림과 같은 형태가 될것이다.

lpc810_ethernet

CortexMo+

NXP에서 출시한 LPC800시리즈는 ARM사의 CortexM0+ 시리즈의 칩이다. ARM의 소개 페이지에 있는 것 처럼 CortexM0와 마찬가지로 8, 16비트 시장을 타겟으로 하고 있다. CortexM0와 비교해서는 파워소모를 더 줄였고 성능은 더 높인 버젼이라고 이해하면 될 듯 하다. TI의 MSP430과 비교를 한 사이트도 있는데, GPIO만 적을뿐 가격, 파워 소모, 성능등 모든 면에서 우월하다.

LPC810

LPC800 시리즈중 눈길을 끄는 칩은 8핀 DIP패키지인 LPC810 이다.

Lpc800 dip8

이 패키지의 내부 구조는 아래 그림과 같다. 전원핀 6, 7번을 제외하면 나머지 핀들은 GPIO와 다른 기능이 multiplex되어 있어서 칩의 핀수를 줄일 수 있다. 더구나 내부 RC발진 회로덕분에 외부에 크리스탈 또는 오실레이터를 연결하지 않아도 된다.

LPC810_Pin

LPC810 시리즈는 아래 그림과 같이 메모리 용량에 따라 DIP8, TSSOP16, SO20, TSSOP20등의 패키지가 존재한다.

LPC810 Ordering

회로도

LPC810_Sch

일단 간단한 동작확인을 위해 Ardafruit에서 LPC810 Mini Starter Pack을 구매하고 Adafruit의 회로를 참고해서 위와 같은 회로를 구성하였다. Adafruit의 회로는 초보자를 위해 Fritzing(이 툴 관련 이전 블로그의 글들)을 이용해서 그려져 있는데 사실 엔지니어가 보기에는 회로도가 더 편하다. 암튼 안정적인 동작을 위해 난 리셋 회로를 추가하고 편의를 위해 ISP에 핀 헤더를 달았다. P0_2에는 LED가 달려있으며, MCP1700 레귤레이터를 통해 5V가 3.3V로 변환되어 칩에 입력이 된다.

프로그래밍

요즘 나오는 칩들이 거의 모두다 그렇지만 이 칩도 내부 ROM에 bootloader가 있고,  ISP(In System Programming)기능을 지원한다. 즉 UART를 통해서 내부 Flash의 업데이트가 가능하다.  그리고 NXP에서 제공하는 개발 환경인 LPCXpresso는 이클립스 기반이라서 Win, MAC, Linux를 모두 지원한다.  Adafruit에서 소개하는 페이지에는 Windows기반에서 설명을 하는데 난 MAC  환경이라서 OS X에서 개발 환경을 구축하였다. LPCXpresso를 다운받으려면 http://lpcxpresso.code-red-tech.com/LPCXpresso/ 여기에 사용자 등록을 해야 다운로드가 가능하다. 문제는  MAC용 Falsh Magic에서 아직 LPC800시리즈를 지원하지 않아서 lpc2isp를 사용해야 한다.

  • LPCXpresso에 프로젝트 등록 : 이 내용은 Adafruit에 자세히 나와 있으니 이곳을 참고. 간단히 설명하면  코드를 Github에서 ZIP 형태로 다운로드해서  받아서 LPCXpresso에서 Import Project를 하면 된다.
  • PL2303드라이버: Adafruit의 USB to TTL Serial Cable 에서 설명하는 Prolific 드라이버를 설치했으나 MAC 에서 인식이 되지 않아 인터넷에서 다른 드라이버를 찾아서 인식시켰다. [wpdm_file id=3]
  • Mac에서 시리얼 포트가 잡혔는지 확인하기: ls /dev/tty.*
  • Flash Magic 대신 lpc2isp사용하기: http://lpc21isp.sourceforge.net/에서 소스를 다운로드 받아서 gcc 로 컴파일 한다. 단 make 파일에서 CFLAG에 -static옵션을 빼야지 제대로 컴파일이 된다.

lpc21isp

  • lpc2isp 사용법은 “lpc21isp hex-file명 serial-port baud-rate clock of MCU(in Khz단위)”이다 여기서 마지막 파라미터인 MCU의 clock을 Khz단위로 넣는 것이 중요하다.  즉: ./lpc21isp LPC810_CodeBase.hex usbserial 115200 12000 을 입력하면 아래 그림과 같이 제대로 flash가 write 된다.

lpc2isp

위와 같이 프로그래밍 끝나면,  점퍼를 제거하고 리셋 버튼을 누르면 코드가 동작을 한다. 아래 그림은 LED를 깜박이는 코드를 로드….

LPC810_Board


Pages:1234