이전 블로그를 보니 2011년도 초에 NXP와 Nuvoton의 Cortex M0에 대해 쓴 블로그 포스팅이 있었는데 최근 당시에 CooCox로 부터 받은 보드와 최근에 Nuvoton에서 받은 보드를 테스트를 해봤다. 아래 그림에서 위에 있는 것은 NXP칩을 사용한 LPC1114보드이고, 아래 그림은 Nuvoton의 M0516NBL 을 사용한 보드이다.
최근 이런 개발 보드들의 특징은 디버거를 포함을 하고 있는데, 보드의 좌측 부분이 디버거 기능을 하며, 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로 잡힌다.
이 보드의 왼쪽 부분의 디버거의 이름은 Nulink이며, 보드를 PC에 연결을 하니 USB-HID로 잡힌다. NXP 보드와 마찬가지로 디버거를 이용해 개발을 하고 양산시에는 보드를 잘라서 F/W를 구울수 있는 구조로 되어 있다. 사용해 보니 mbed에 있는 CMSIS-DAP와 다른 점은 호스트에 연결되는 USB로 시리얼까지 처리를 하지는 않아서 시리얼 출력을 보려면 보드에서 선을 따로 뽑아야 한다. 하지만 NXP 보드는 보드에 RS232C 드라이버 칩과 소켓이 있어서 바로 연결을 할 수 있다.
CooCox 개발 환경
CooCox 역시 당시 블로그 포스팅에도 소개를 했었는데 최근 다시 설치를 해서 확인을 해보니 다양한 Cortex 칩들을 지원을 하고 있고, 커뮤니티도 제법 커져있다. 하지만 당시와 달라진 점은 ARM GCC 를 따로 설치를 해주고 경로를 설정을 해줘야 한다.
이상으로 코드 한줄 코딩하지 않고 개발 환경 설정하고 칩에 F/W까지 다운로드해서 동작을 확인했다. 사용을 해보니 참 편한데 한가지 아쉬운 점은 CooCox가 Windows만 지원을 한다는 것. LPCXpresso의 경우는 3가지 OS (Win, MAC, Linux)를 다 지원하는데….
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가 연결이 되어 있는지를 보여준다.
여기서 onboard interface의 기능은 다음 그림으로 설명이 된다. 즉 호스트와는 USB로 연결이 되어, Mass Storage Device 프로그래밍, CMSIS-DAP 로 디버깅, 가상 시리얼 포트를 제공한다.
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.
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/) 들이 있다.
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
모듈의 전면에 있는 칩이 LPC1768이며, 내부에 512KB 플래시 / 32KB 램을 가지고 있으며, 핀 타입은 브레드보드에 꼽기 쉽게 2.54피치의 배수로 되어 있고 USB전원으로 동작한다. 모듈의 뒷면에는 또 다른 칩(CortexM3로 추정되며 mbed Interface라고 불린다.)과 Atmel사의 AT45DB161D 시리얼 플래시 메모리(2MB), 이더넷 PHY가 달려있다. 회로도 및 아래 그림을 보면 mbed Interface는 USB로 PC에 연결이 되어서 시리얼 플래시를 Mass Storage로 보이게 하고, 사용자가 여기에 펌웨어를 넣으면 JTAG으로 연결된 타겟( LPC1768)에 프로그래밍을 한다. Mass Storage의 파일시스템은 FAT12라고 하며, 가장 최근 파일이 프로그래밍이 된다.
A nightly build is a neutral build that takes place automatically. These typically take place when no one is likely to be working in the office so that there are no changes to the source code during the build. The results of the build are inspected by the arriving programmers, who generally place a priority on ensuring the recent changes to the source code have not broken the build process or functionality of the software.
이 프로젝트의 목적은 가장 작은 MCU에 Ethernet connectivity를 구현하는 것이다. 아마 아래 그림과 같은 형태가 될것이다.
CortexMo+
NXP에서 출시한 LPC800시리즈는 ARM사의 CortexM0+ 시리즈의 칩이다. ARM의 소개 페이지에 있는 것 처럼 CortexM0와 마찬가지로 8, 16비트 시장을 타겟으로 하고 있다. CortexM0와 비교해서는 파워소모를 더 줄였고 성능은 더 높인 버젼이라고 이해하면 될 듯 하다. TI의 MSP430과 비교를 한 사이트도 있는데, GPIO만 적을뿐 가격, 파워 소모, 성능등 모든 면에서 우월하다.
이 패키지의 내부 구조는 아래 그림과 같다. 전원핀 6, 7번을 제외하면 나머지 핀들은 GPIO와 다른 기능이 multiplex되어 있어서 칩의 핀수를 줄일 수 있다. 더구나 내부 RC발진 회로덕분에 외부에 크리스탈 또는 오실레이터를 연결하지 않아도 된다.
LPC810 시리즈는 아래 그림과 같이 메모리 용량에 따라 DIP8, TSSOP16, SO20, TSSOP20등의 패키지가 존재한다.
회로도
일단 간단한 동작확인을 위해 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옵션을 빼야지 제대로 컴파일이 된다.
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 된다.
위와 같이 프로그래밍 끝나면, 점퍼를 제거하고 리셋 버튼을 누르면 코드가 동작을 한다. 아래 그림은 LED를 깜박이는 코드를 로드….
인기를 어떻게 알 수 있을까? 오픈소스하드웨어중 하나인 아두이노 관련 책을 인터넷 서점에서 검색해보면 2010년도에 한 권이던 책이, 2012년도를 기점으로 2013년에는 15권이나 된다. 대학에서도 아두이노를 가르치고 심지어는 고등학교 동아리에서도 아두이노를 가지고 프로젝트를 하는 것을 보았다.
2013년도 서울디지털포럼의 주제가 초협력이었고, 여기서 마친 자쿠보우스키(오픈소스 에콜로지 창립자), 카타리나 모타(오픈 머티리얼 & 에브리웨어테크 공동 창립자), 강윤서(오픈테크포에버 창립자) 등 오픈소스 하드웨어 운동가들이 SDF에 참석해 오픈소스 정신의 중요성을 알렸다. – 참고기사. 크라우드펀딩 사이트인 Kickstarter.com 에서 오픈소스하드웨어 플랫폼인 아두이노로 검색을 하면 122개의 프로젝트가 나온다. 우리나라는 몇 년 늦은 감이 있지만 이미 전세계적으로 오픈소스하드웨어의 열풍은 대단하다. 리눅스같은 오픈소스소프트웨어는 알겠는데, 그럼 오픈소스하드웨어란무엇인가?
오픈 소스하드웨어란?
오픈소스하드웨어도 오픈소스소프트웨어와 크게 다르지 않다. 오픈소스소프트웨어가 소프트웨어를 구성하는 소스코드를 공개하듯, 오픈소스 하드웨어는 하드웨어를 구성하는 회로도, 파트리스트, 회로도 등을 대중에게 공개한 제품을 말한다. 그리고 오픈소스하드웨어협회(Open Source Hardware Association)에서는 오픈소스하드웨어에 대한 정의를 명문화 해서 공개하고 있으며 현재 1.0버젼이 공개되어 있고 위키페이지에 한글 번역본도 공개되어 있다.
여기에 나와 있는 원칙에 대해 살펴보면…
오픈 소스 하드웨어는 누구나 이 디자인이나 이 디자인에 근거한 하드웨어를 배우고, 수정하고, 배포하고, 제조하고 팔 수 있는 그 디자인이 공개된 하드웨어이다. 하드웨어를 만들기 위한 디자인 소스는 그것을 수정하기에 적합한 형태로 구할 수 있어야 한다. 오픈 소스 하드웨어는 각 개인들이 하드웨어를 만들고 이 하드웨어의 사용을 극대화 하기 위하여, 쉽게 구할 수 있는 부품과 재료, 표준 가공 방법, 개방된 시설, 제약이 없는 콘텐트 그리고 오픈 소스 디자인 툴을 사용는 것이 이상적이다. 오픈 소스 하드웨어는 디자인을 자유롭게 교환함으로써 지식을 공유하고 상용화를 장려하여 사람들이 자유롭게 기술을 제어할 수 있도록 한다.
여기서 핵심은 디자인이 공개되야 하며, 공개하는 것도 누구나 쉽게 접근할 수 있도록 가능하면 상용툴이 아닌 오픈툴을 사용하라는 것이다. 즉 예를 들면 회로도는 EagleCad, Kicad등으로 구성하여 회로도 및 아트워크 파일까지 오픈하고, 소스코드로 github이나 Google code 같은 소스 공유 플랫폼을 이용해서 공유하라는 것이다. 그리고 재미있는 것은 오픈소스하드웨어의 원칙은 이 자료를 이용해서 누구나 상용화를 장려한다는 것이다. 아래 동영상은 OSHWA에서 공개한 “What is Open Source Hardware?” 라는 동영상이다.
오픈소스하드웨어와 비즈니스
상용화를 장려한다고? 공개를 하지 않아도 중국에서는 몇 개월이면 똑같은 제품을 만들어 내는데….누구나 쓸 수 있게 자료를 다 오픈하면 이게 더 쉬워지는데… 그럼 원저작자는 어떻게 돈을 벌지? 사실 오픈소스하드웨어는 개발 모델이지 비즈니스 모델은 아니라고 생각이 되지만 이미 오픈소스하드웨어기반의 비즈니스로 성공한 크리스 앤더슨의 지난 2012년 서밋의 키노트(MICROECONOMICS FOR MAKERS)를 읽어보면 오픈소스하드웨어 비즈니스에 관해 이해 및 영감을 얻을 수 있을 것 같다.
Open Hardware Business Model
• “Give away the bits, sell the atoms”
• Charge 2.6x BOM
• Keep ahead of cloners by innovating faster, supporting better
• “90-10” Rule: 90% the performance of commercial products at 10% the price
• Democratize the technology: low prices = high volume = high innovation.
상용제품보다 성능은 90%로 약간 떨어지지만 가격은 10% 밖에 안되는 제품을 많이 팔아라. 그리고 카피캣, 클론에 대비하기 위해 지속적으로, 빨리 제품을 업그레이드 해라. 이와 비슷한 얘기를 오픈소스하드웨어 비즈니스에서 성공한 Sparkfun의 CEO인 Nathan Seidle이 TED강연에서도 했다. 아래 동영상 참고.
그는 특허가 혁신을 일으키지 않는다고 하며, 자신의 오픈소스하드웨어 제품은 12주면 카피제품이 나오기 때문에 혁신이 필요하다고 얘기를 한다. 참고로 아래 비디오와 비슷한 내용의 글이 SparkFun 홈페이지에 있는데, 여기서 보면 2012년 당시 Sparkfun의 비즈니스 규모는 $75M이다. (35 co-workers, 75 million dollars of sales, 600,000 customers and our 431 unpatented products…)
관심이 있는 다양한 사용자들이 서로 이야기할 수 있는 공간이 온라인 상에 있으므로 서로의 프로젝트를 공유하고, 서로 자랑하고, 의견을 나눌 수 있는 환경을 만들어야 한다. 즉 이 공간을 통해 서로가 자극이 되고 격려가 되어 자신의 프로젝트를 공개할 수 있는 온라인 공간이 필요하다. 한 사람, 한 회사에서 주도하는 게시판 성격의 틀이 아닌 누구나 질문을 올리고 서로 답변을 할 수 있는 공간이 되야 한다. 위의 두가지 조건이 최소의 조건이다.
지금 다시 읽어보니 예전의 생각이나 지금의 생각이나 크게 차이가 없다. 하지만 당시의 생각보다 지금 더 중요하게 생각되는 부분은 바로 두번째 부분인 온라인 플랫폼인 커뮤니티부분이다. 위 오픈소스하드웨어 비즈니스 부분에서 보았던 업체들의 공통점은 무엇인가? 그들은 단순히 하드웨어 제품만 파는 업체들이 아니다. 자신들의 커뮤니티를 통해서 유저들과 소통한다. 즉 홈페이지에 심하다 싶을 정도로 자세한 튜토리얼을 제공하고 유저와 소통하는 포럼을 운영하고 있다. 이중에 개인적으로 가장 잘되어 있다고 생각되는 튜토리얼은 Adafruit의 Learning System이다. 세세한 설명, 고퀄의 사진들… 즉 이들의 비즈니스는 교육과도 무관하지 않다.
오픈소스하드웨어 비즈니스에서 또 한가지 고민해야 할 부분은 어떻게 카피켓, 클론들 속에서 비즈니스를 지속하느냐 이다. 크리스 앤더슨이 발표한 자료의 마지막에 “7 OSH Limitations”에도 언급이 되어 있는데, 대안은 하드웨어를 모두다 오픈하지 않는다는 것이다. 즉 회로 자체는 오픈하되 디자인 파일들이나 패키지, 금형관련된 부분들은 오픈하지 않는 것이다. 실제로 아두이노노 회로및 아트웍 파일은 오픈하지만 아트웍 파일이 실제 판매되는 파일과 다르다. MakerBot도 비슷한 전략을 쓰고 있다.
관련 글을 쓰다보니 오래된 내 블로그의 글을 다시 한번 확인하게 되었는데, 지금도 흥미로운 글이 몇개 있다. ^^
아두이노의 미래 – 2011년 OSHW서밋과 메이커페에 때 아두이노 발표, 이 포스팅에 있는 SlideShare 자료에 보면 당시 아두이노 커뮤니티의 규모가 나온다. 참고로 이후에 아두이노 커뮤니티에 대한 언급은 2013년 6월 [블로터포럼] ‘오픈소스 하드웨어’를 말한다 에서 언급된다.
2011년 아두이노 서밋에서 포스팅 수가 50만개, 사용자수가 5만명 밖에 되지 않았는데 최근에 들어가 보니 사용자수가 14만명, 올라온 글이 120만개더라.