'Embedded Programming'에 해당되는 글 38건

  1. 2014.04.23 아두이노 호환 갈릴레오 보드 출시 4
  2. 2014.04.23 C 언어로 개발시 유의사항
  3. 2014.04.20 변수 vs. 메모리
  4. 2014.04.20 AVR의 메모리 구조 3
  5. 2014.03.27 아두이노(Ardunio)의 장점(1)
  6. 2014.03.11 AVR이란?
  7. 2012.12.10 부트로더란?
  8. 2012.12.05 아두이노(Arduino) 보드란?



Overview


Galileo is a microcontroller board based on the Intel® Quark SoC X1000 Application Processor, a 32-bit Intel Pentium-class system on a chip (datasheet). It is the first board based on Intel® architecture designed to be hardware and software pin-compatible with Arduino shields designed for the Uno R3. Digital pins 0 to 13 (and the adjacent AREF and GND pins), Analog inputs 0 to 5, the power header, ICSP header, and the UART port pins(0 and 1), are all in the same locations as on the Arduino Uno R3. This is also known as the Arduino 1.0 pinout.


갈릴레오(Galileo)는 32-bit Intel Pentium 클라스 SoC인 Intel Quark SoC X1000 응용 프로세서에 기반을 둔 마이크로컨트롤러 보드입니다. 이것은 Uno R3를 위한 아두이노 쉴도 보드에 핀이 호환되는 하드웨어 및 소프트웨어로서 설계된 인텔 아키텍처의 최초 보드입니다. Analog input 0 to 5, power header, ICSP header 그리고 UART port pins(0 and 1)은 모두 Arduino Uno R3와 동일한 위치를 가집니다. 이것은 또한 Arduino 1.0 핀아웃(pinout)으로 알려집니다.


Galileo is designed to support shields that operate at either 3.3V or 5V. The core operating voltage of Galileo is 3.3V. However, a jumper on the board enables voltage translation to 5V at the I/O pins. This provides support for 5V Uno shields and is the default behavior. By switching the jumper position, the voltage translation can be disabled to provide 3.3V operation at the I/O pins. Of course, the Galileo board is also SW compatible with the Arduino SW Development Environment, which makes usability and introduction a snap.


갈릴레오는 3.3V 혹은 5V 모두에서 동작하는 쉴드 보드를 지원합니다. 갈릴레오의 코어 동작 전압은 3.3V 입니다. 그러나 보드상에 점퍼로 I/O에서 5V로 전환이 가능합니다. 이것은 5V Uno 쉴드 보드를 지원하기 위함입니다. 점퍼 스위치로 I/O 핀에서 3.3V 동작을 제한할 수 있습니다. 물론 갈릴레오 보드는 아두이노 소프트웨어 개발 환경과 소프트웨어 또한 호환 가능합니다.


In addition to Arduino HW and SW compatibility, the Galileo board has several PC industry standard I/O ports and features to expand native usage and capabilities beyond the Arduino shield ecosystem. A full sized mini-PCI Express* slot, 100Mb Ethernet port, Micro-SD slot, RS-232 serial port, USB Host port, USB Client port, and 8MByte NOR flash come standard on the board.


아두이노 하드웨어와 소프트웨어 호환 뿐만아니라 갈릴레오 보드는 아두이노 쉴드 보드 이상으로 본래의 사용과 그 가능성을 확장시키기 위해서 몇개의 PC 산업 표준 I/O 포트와 특징을 갖습니다. full sized mini-PCI Express 슬롯, 100Mb Ethernet 포트, Micro-SD 슬롯, RS-232 시리얼 포트, USB Host 포트, USB Client 포트, and 8MByte NOR flash.





Details and Specifications


Galileo is compatible with Arduino Uno shields and is designed to support 3.3V or 5V shields, following the Arduino Uno Revision 3, including:


갈릴레오는 아두이노 Uno 쉴드 보드와 호환되며, 3.3V 혹은 5V 쉴드 보드를 지원하고 다음 특성을 포함한 Arduino Uno R3 사양을 따릅니다:


  • 14 digital input/output pins, of which 6 can be used as Pulse Width Modulation (PWM) outputs;


- Each of the 14 digital pins on Galileo can be used as an input or output, using pinMode(), digitalWrite(), and digitalRead() functions.

- The pins operate at 3.3 volts or 5 volts. Each pin can source a max of 10mA or sink a maximum of 25 mA and has an internal pull-up resistor (disconnected by default) of 5.6k to 10 kOhms.


  • A0 – A5 - 6 analog inputs, via an AD7298 analog-to-digital (A/D) converter (datasheet)


- Each of the 6 analog inputs, labeled A0 through A5, provides 12 bits of resolution (i.e., 4096 different values). By default they measure from ground to 5 volts.


  • I²C* bus, TWI, with SDA and SCL pins that are near to the AREF pin.


- TWI: A4 or SDA pin and A5 or SCL pin. Support TWI communication using the Wire library.


  • SPI


- Defaults to 4MHz to support Arduino Uno shields. Programmable up to 25MHz.

- Note: While Galileo has a native SPI controller, it will act as a master and not as an SPI slave. Therefore, Galileo cannot be a SPI slave to another SPI master. It can act, however, as a slave device via the USB Client connector.


  • UART (serial port) Programmable speed UART port (Pins 0 (RX) and 1 (TX))


  • ICSP (SPI) - a 6 pin in-circuit serial programming (ICSP) header, located appropriately to plug into existing shields. These pins support SPI communication using the SPI library.


  • VIN. The input voltage to the Galileo board when it's using an external power source (as opposed to 5 volts from the regulated power supply connected at the power jack). You can supply voltage through this pin, or, if supplying voltage via the power jack, access it through this pin.


- Warning: The voltage applied to this pin must be a regulated 5V supply otherwise it could damage the Galileo board or cause incorrect operation.


  • 5V output pin. This pin outputs 5V from the external source or the USB connector. Maximum current draw to the shield is 800 mA


  • 3.3V output pin. A 3.3 volt supply generated by the on-board regulator. Maximum current draw to the shield is 800 mA


  • GND. Ground pins.


  • IOREF. The IOREF pin on Galileo allows an attached shield with the proper configuration to adapt to the voltage provided by the board. The IOREF pin voltage is controlled by a jumper on the board, i.e., a selection jumper on the board is used to select between 3.3V and 5V shield operation.


  • RESET button/pin


- Bring this line LOW to reset the sketch. Typically used to add a reset button to shields that block the one on the board.


  • AREF is unused on Galileo. Providing an external reference voltage for the analog inputs is not supported.


- For Galileo it is not possible to change the upper end of the analog input range using the AREF pin and the analogReference() function.


Power


Galileo is powered via an AC-to-DC adapter, connected by plugging a 2.1mm center-positive plug into the board's power jack. The recommended output rating of the power adapter is 5V at up to 3A.


갈릴레오는 보드상에 2.1mm 파워잭으로 AC-to-DC 어뎁터를 연결함으로서 파워가 공급되며, 권장하는 파워 어뎁터의 사양은 최대 3A의 5V 전원입니다.





'Embedded Programming > Arduino ' 카테고리의 다른 글

Arduino Uno R3의 개요  (0) 2017.03.11
아두이노(Arduino) 보드와 PC 통신  (0) 2014.05.28
아두이노(Ardunio)의 장점(2)  (0) 2014.05.27
아두이노(Ardunio)의 장점(1)  (0) 2014.03.27
아두이노(Arduino) 보드란?  (0) 2012.12.05
Posted by Nature & Life
Embedded Programming/C2014. 4. 23. 09:33


AVR은 C 언어로 개발하는 경우에도 assembler 못지 않게 최적화된 코드를 생성하기에 다양한 장점이 있습니다. 그 중에서도 avr-gcc라는 컴파일러를 사용하는 것으로 avr-gcc는 전 세계 다양한 사용자(소위 Hacker)들에 의해 개발되어 공유하는 것으로 시행착오를 통하여 결점이 최소화되었다는 것입니다.


AVR을 C 언어로 개발시에는 일반적인 O/S 환경에서가 아닌 AVR 하드웨어에 기반을 두기 때문에 몇 가지 유의사항들이 있습니다.

 

 

 

 

1) 일반적인 C 언어와는 달리 이진수(binary)를 사용할 수 있으며, Boolean 타입의 변수는 사용할 수 없습니다. 

이진수는 예를 들어 0b0100 식으로 표현하며 Boolean 타입 변수 대신에 int형의 0과 1로 대체하여 사용하면 됩니다.


2) 인터럽트 서비스 루틴은 가능한 한 간결하게 작성합니다.

일반적인 C 언어와는 달리 AVR 하드웨어는 외부 인터럽트나 Timer, USART, ADC 등의 주변장치들로부터의 인터럽트를 처리하기 위한 ISR() 함수로 반환값이 없으며 특별히 호출하지도 않습니다. 이러한 인터럽트 서비스 루틴(Interrupt Service Routine, ISR)은 다음과 같은 이유로 최대한 간결하게 작성해야 합니다.


첫째는 인터럽트 함수 내에서는 지역변수가 Register가 아닌 Stack에 저장되므로 처리가 느리기 때문이며, 

둘째는 하나의 인터럽트 처리가 길어지면 이어서 발생하는 다른 인터럽트 처리를 실행하지 못하기 때문입니다.


대부분의 인터럽트는 Timer의 overflow를 처리하기 위한 것으로 만일 인터럽트를 제때에 처리하지 못한다면 AVR 칩이 외부 시스템과 실시간으로 작동하는 경우에는 치명적인 오류가 생길 수 있게 됩니다. 그러므로 인터럽트 발생시 많은 작업을 요구하는 경우에는 인터럽트 루틴에서 Flag를 간단히 설정하여 개시하고 메인 루틴에서 이를 처리하게 해야 합니다.


3) 인터럽트 서비스 루틴 내에서 전역변수들은 volatile로 선언합니다.

컴파일시 최적화를 위해 컴파일러는 나름데로 그 상황에 맞는 상수값으로 처리하도록 하는 경우가 있는데, 이것이 인터럽트 서비스 루틴에서는 의도하지 않은 오류를 초래하기 때문입니다. 그러므로 인터럽트 서비스 루틴에서는 전역변수들은 volatile로 선언하여 컴파일러가 임의로 해석하지 못하게 방지합니다.

ex) volatile char k; 


4) 외부 메모리가 있는 경우가 아니라면 재귀호출(Recursive call)을 사용하지 않는 것이 좋습니다. 

연속되는 재귀호출은 한정된 메모리에 Stack을 쌓이게 하며 결국에는 Stack overflow를 발생시킬 수 있기 때문입니다.


5) 대용량을 갖는 상수 배열(array)은 const 키워드를 사용하여 프로그램 메모리(Flash Memory)에 저장합니다.

AVR에서 변수는 SRAM에 저장하는데 고기능 AVR을 사용하지 않고 기능을 구현하려면 SRAM의 용량을 아껴야 합니다. 따라서 변하지 않는 대용량 상수들은 코드를 적재하는 Flash Memory에 저장하여 SRAM을 확보하는 것이 바람직합니다.

ex) const uint8_t value[64] = 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,

                                  29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,

                                  54,55,56,57,58,59,60,61,62,63,64};

  

 

 

Posted by Nature & Life
Embedded Programming/AVR 2014. 4. 20. 21:51



1) 전역변수(Global variable)


SRAM에 저장되어 있다가 이를 사용할 때마다 register로 읽혀지며 사용이 끝나면 다시 SRAM에 저장되므로 처리속도가 늦은 변수로, 특별히 속성을 정하지 않고 변수를 정의하면 SRAM 영역에 저장됩니다. 게다가 Compiler는 이를 변수로 처리하지 않고 그 상황에서 이 변수가 갖는 값에 해당하는 상수로 처리하는 경우가 있는데 이런 상황에서 여러 함수가 이 변수를 공유하여 사용하는데 문제를 야기하고 컴파일 시 최적화 옵션에 따라서도 영향을 받게 됩니다.


특히 인터럽트 서비스 루틴(Interrupt Serve Routine, ISR) 함수와 그 밖의 함수 사이에 공유하는 전역변수의 경우에 흔하게 발생하며 이를 방지하기 위해서는 전역변수에 'volatile'을 선언해 주어야 합니다.

ex) volatile unsigned char zc_count;


2) 지역변수(Local variable)


ATmega8의 경우, 다른 MCU에서처럼 지역변수를 Stack에 저장하는 것이 아닌 32개의 General Purpose Registers(GPFs)로 처리하므로 항상 처리속도가 빠릅니다. 하지만 ISR에 사용되는 변수는 특성상 Stack에 저장합니다.


3) 정적변수(static variable) 


함수가 시작될 때 register로 옮겨지고 함수가 종료될 때 SRAM으로 다시 옮겨져 저장되므로 만일 함수 내에서 여러 번 사용된다면 전역변수보다 정적변수가 처리속도가 증가하게 됩니다.





4) Flash Memory에 데이터의 저장


물론 메모리 용량이 크고 고성능의 MCU를 사용하면 문제가 되지는 않지만 가격대 성능비 등을 고려하여 그렇지 못한 경우, 변수로 사용해야 할 SRAM 용량을 절약할 필요가 있습니다. 만일 SRAM 용량이 부족하게 되면 Stack overflow가 발생하거나 프로그램이 오동작을 할 수 있습니다.


avr-gcc에서 상수 데이터를 프로그램이 적재되는 Flash Memory에 저장하기 위해서는 먼저 상수 데이터를 전역변수처럼 함수의 밖에서 정의하고 이때 상수가 byte 데이터라면 prog_char 또는 prog_uchar로 선언하며 읽을 때문 pgm_read_byte() 또는 pgm_read_word() 함수를 사용합니다.


참고로 비록 상수 데이터를 prog_char 또는 prog_uchar로 정의하더라도 이들이 함수 내에서 정의되면 컴파일 시 SRAM 변수로 처리되므로 주의가 요구되며, 일반적으로 Flash Memory는 SRAM에 비하여 용량이 훨씬 크므로 유용하게 사용할 수 있습니다.


5) EEPROM에 데이터의 저장


AVR에서 EEPROM을 I/O register를 사용하여야 접근할 수 있으므로 avr-gcc 에서는 EEPROM을 eeprom_read_byte() 혹은 eeprom_write_byte() 함수로 각각 읽기, 쓰기가 가능합니다.



'Embedded Programming > AVR ' 카테고리의 다른 글

다양한 AVR Package 비교  (0) 2014.06.14
AVR의 메모리 구조  (3) 2014.04.20
AVR이란?  (0) 2014.03.11
부트로더란?  (0) 2012.12.10
Posted by Nature & Life
Embedded Programming/AVR 2014. 4. 20. 17:49



사용자가 Assembler나 C 언어를 기반으로 접근 가능한 ATmega8 칩의 메모리 구조입니다.


1) Program Memory

8 Kbyte의 비휘발성(Non-volatile) Flash Memory로 프로그램을 적재하거나 데이터를 저장하며 최대 10,000번까지 변경이 가능합니다.


* 이 영역에서는 boot 프로그램을 저장할 수 있는 공간이 따로 존재하는데 이는 직접 MCU 핀을 접속하여 프로그램 및 데이터를 변경할 수 없을 때 시리얼 통신 등으로 Flash Memory 내의 프로그램 및 데이터를 변경할 수 있게 해 줍니다.

참고: http://sharehobby.tistory.com/entry/%EB%B6%80%ED%8A%B8%EB%A1%9C%EB%8D%94%EB%9E%80


2) Data Memory

General Purpose Registers(GPRs) 그리고 I/O register와 같은 Special Function Registers(SFRs) 그리고 Internal SRAM, External SRAM 등으로 구성되며 External SRAM은 별도로 장착된 SRAM으로 MCUCR register를 설정해야 합니다. 여기서 SFRs는 사용자가 데이터를 저장하는 메모리가 아닙니다.


  • General Purpose Registers(GPRs) : 32개의 register를 가지고 있으며 CPU의 연산 결과를 메모리(SRAM, Flash Memory, EEPROM)에 옮기기 전에 임시로 저장하는 장소로 접근 속도가 가장 빠르며 Assembler 아닌 C 언어를 사용하는 경우 Compiler가 register를 자동으로 관리합니다.

  • Internal SRAM : 1Kbyte 내부 SRAM으로 프로그램 실행 중 변하는 변수의 값을 저장하는데 사용되며 전원이 끊기면 내용은 지워집니다(휘발성, volatile). 

  • EEPROM : 512 byte의 비휘발성으로 프로그램 실행 중 변하는 변수의 값이 전원이 끊긴 이후에도 지속적으로 유지하는데 사용되며 최대 100,000번까지 변경이 가능하며 내장된 주변장치처럼 register를 통하므로 접근 속도는 느립니다.






'Embedded Programming > AVR ' 카테고리의 다른 글

다양한 AVR Package 비교  (0) 2014.06.14
변수 vs. 메모리  (0) 2014.04.20
AVR이란?  (0) 2014.03.11
부트로더란?  (0) 2012.12.10
Posted by Nature & Life


 

아두이노(Arduino)는 오픈 소스(Open Source)를 기반으로 한 단일 보드(board) 마이크로 컨트롤러입니다. 2005년 이탈리아 사람에 의해서 최초 만들어지기 시작한 프로젝트로 현재에도 진행 중에 있으며 Arduino는 이탈리아어로 영어의 'Best Friend'와 같은 의미를 가진다고 알려집니다.

 

아두이노는 대부분 Atmel社의 ATmega8이나 ATmega32U4, ATmega168, ATmega328, ATmega2560 등을 탑재한 보드로 이들 마이크로 컨트롤러에 탑재할 펌웨어(Firmware)를 개발하는 환경에서부터 컴파일 및 독립적으로 작동할 수 있도록 업로드 과정이 편리하여 최근에 전 세계적으로 인기를 끌고 있습니다. 

 

2011년에는 구글의 안드로이드(Android)가 아두이노를 하드웨어 파트너로 선택한 이유도 이런 확장성과 편리함 때문에 상호간에 시너지 효과를 기대해 보자는 것으로 풀이되며, 이러한 추세에 힘입어 얼마전에는 Intel社에서도 아두이노 플랫폼에 자사의 Quark Processor를 탑재한 갈릴레오(Galilo)를 출시하였는데, 이러한 것도 내내 동일한 맥락이라는 것입니다.

 

갈릴레오 보드

 

하드웨어에 서툰 사람들조차도 아두아노에 관심을 가지게 만드는 이유는 요구하는 제품이 기존의 AVR의 개발환경에 비하여 뚜렷하게 간소화됨으로 말미암아 편리함일 수도 있지만, 이러한 과정들이 복잡하지 않아 소프트웨어 제작이나 다양한 하드웨어 DIY(Do It Yourself)를 즐기는 사람들에게 호기심을 불러 일으키기에 충분하였기 때문일 것입니다.

 

그럼 아두이노는 어떤 장점이 있는지 요약하여 봅니다.

 

1) 소프트웨어 개발을 위한 통합 환경(IDE)이 간소화 되었다는 것입니다.

가장 큰 장점으로 기존의 AVR 프로그래밍은 WinAVR로 컴파일하여 별도의 ISP 장치를 통해 업로드 해야하는 번거로운 과정을 거쳐야 하는데, 아두이노는 컴파일된 펌웨어를 보드 내 USB 포트에서 PC의 USB 포트로 케이블을 연결하는 것만으로 쉽게 업로드 할 수 있다는 것입니다.

 

2) Windows를 비롯한 Mac OS X 및 Linux와 같은 다양한 OS 환경을 지원합니다.

 

3) 다양한 소프트웨어와 연동이 가능하다는 것입니다.

사용자들이 기존에 즐겨 사용하여 익숙했었던 Flash나 Processing, Max/MSP, Android, Object C, Labview, Pure Data 등과 같은 소프트웨어를 연동할 수 있다는 것입니다.

 

4) 가격이 저렴합니다.

사실 마이크로컨트롤러를 배우고 싶어서 강좌를 듣거나 데모보드를 구입하려면 최소한 수 십만원 정도 이상을 호가하는데, 이에 비해 아두이노 보드는 상대적으로 매우 저렴하다는 것입니다.

 

5) 아두이노는 오프 소스입니다.

아두이노는 보드의 회로도가 공개되어 있으며 개발환경 조차도 오픈 소스이고 이로 인해 각종 회로도나 펌웨어 소스가 웹상에서 다량 공유되어 있다는 것입니다. 뿐만 아니라 여러 개발자들이 만들어 놓은 라이브러리 조차도 공유되어 개발 시간을 단축시키고 있다는 것입니다. 

 

다음은 아두이노 포럼입니다.

 

http://forum.arduino.cc/

 

 

현재 가장 많이 사용되는 아두이노는 보드는 기본형 우노(Arduino UNO)로써 손바닥만한 크기를 가지면서 ATmega328을 탑재하고 있는데 6개의 아날로그 입력단자와 14개의 디지털 입출력단자를 지원합니다. 이러한 입출력 단자들은 우노 보드에 위로 쌓아(Stack-up) 연결된 확장보드(Shield 보드, Shield-up 보드)에 서로 연결되고, 사용자는 1개 이상의 이들 확장보드에 주변회로를 직접 꾸며주게 됩니다.

 

 

 

Posted by Nature & Life
Embedded Programming/AVR 2014. 3. 11. 13:11

 

AVR(Atmel AVR)은 8bit RISC 단일칩(onechip) 마이크로컨트롤러(Microcontroller) 혹은 마이크로컴퓨터(Microcomputer, Micom)로 일반적으로 마이컴이라고 부릅니다. 1996년에 美 Atmel社가 하버드 아키텍처(Harvard architecture)로 수정하여 개발한 구조로 프로그램을 저장하기 위해 타사 마이컴처럼 ROM, EPROM 또는 EEPROM을 사용하지 않고 단일칩 플래시메모리(Flash memory)를 처음 사용하였다고 전해집니다.

 

AVR 마이컴은 중앙처리장치(CPU)와 소용량 플래시메모리가 하나의 IC에 집적되어 있으며 프로그램과 데이터 영역의 메모리가 분리된 형태로 특수 명령어로 프로그램을 데이터 영역으로 읽어들일 수 있습니다. 마이컴에 프로그램을 탑재하기 위해서는 ISP(in-system programming) 방식으로 Reset을 추가한 SPI 프로토콜로 업로드가 가능합니다.

 

http://www.atmel.com/

 

 

 

무엇보다도 AVR은 ISP 기능을 통해 매우 저렴하게 개발환경을 구축할 수 있다는 점과 한 cycle에 한 개의 명령(instruction)을 수행하는 파이프 라인 방식으로 연산 속도가 빠르며, 하버드 아키텍처의 특징으로 C언어에서 우수한 성능을 발휘하며 게다가 우수한 각종 컴파일러(Compiler)와 디버거 툴인 AVR Studio를 무료로 제공한다는 특징을 가집니다. 이밖에도 A/D 변환기, PWM, SPI 등의 고기능을 손쉽게 구현할 수 있다는 장점이 있습니다.

 

AVR은 위와 같은 특징으로 말미암아 대중화되었으며 근래에는 보다 상위개념의 ARM 프로세서가 출시되어 아이폰이나 최신기기에 탑재되지만, 저렴하여 가격대비 성능면에서 우수하여 여전히 중소 규모의 다양한 기기에 여전히 활용되고 있으며, 드론(Drone)이나 기타 RC에 사용되는 장치에는 다른 마이컴인 PIC 보다 처리 속도가 빠르고, 8051 계열보다 자원이 풍부한다는 장점으로 보다 널리 사용되고 있는 실정입니다.

 

 

 

다음은 AVR의 일반적인 특징을 요약하였습니다.

 

  • ISP(In System Programming) 기능이 있어 AVR을 장치에 부착한 상태에서 내부 메모리에 프로그램이 가능합니다.

  • RISC 구조로 동일 클럭(clock)으로 동작 시 PIC보다 4배 빠르고, 8051보다 10배 이상 빠릅니다. 예를 들어 1MHz에 1MIPS의 처리 능력이 있어 20MHz로 동작하는 경우 20MIPS의 처리 능력을 가집니다.

  • CPU 설계 단계에서 레지스터/메모리/명령어가 C 언어에 적합하도록 설계되어 C 언어를 사용하면 개발 기간을 단축하고 유지 보수가 편리하다는 것입니다.

  • 다양한 AVR 제품군이 있어 저가의 적합한 소자의 선정 및 사용이 가능하고 풍부한 저가의 개발 환경 및 응용 기술 자료가 많다는 것입니다.

  • SRAM, 통신포트, A/D 변환기, Watchdog, 타이머, PWM, I/O포트 등의 풍부한 내부 장치를 구비하여 외부에 별도로 주변장치를 부착하지 않아도 된다는 것입니다.

 

 

'Embedded Programming > AVR ' 카테고리의 다른 글

다양한 AVR Package 비교  (0) 2014.06.14
변수 vs. 메모리  (0) 2014.04.20
AVR의 메모리 구조  (3) 2014.04.20
부트로더란?  (0) 2012.12.10
Posted by Nature & Life
Embedded Programming/AVR 2012. 12. 10. 16:32

 

부트로더(부트스트랩 로더)란?

 

Microprocessor에서 부트로더의 의미는 시스템이 시작할 때 가장 먼저 시작하는 프로그램으로 랜덤 액세스가 가능한 ROM이나 플래시 메모리에 있던 프로그램을 SRAM으로 부팅하는 것입니다.

 

이는 ROM이나 플래시 메모리에서 액세스 시간이 길기 때문에 거기서 명령을 실행할 경우 매번 명령어를 가져오는데에도 기다려주어 하기에 실행속도가 떨어지기게 됩니다. 그러나 SRAM으로 옮겨 실행한다면 아주 액세스 속도가 빠르게 될 것입니다.

 

그러나 AVR의 경우에는 부트로더의 의미가 달라졌습니다. 즉, 제품의 사용자가 제품의 펌웨어를 업그레이드할 수 있는 내장 프로그램을 말합니다. AVR에 탑재된 플래시 메모리 같은 비휘발성 메모리는 부트로더 영역과 응용 프로그램 영역으로 나뉘어지고 부트로더 부분은 한번 써놓으면 그 자리에 항시 존재하고 따라서 적어도 한번 기록해야 하며 나머지 응용 프로그램은 개발 및 유지 단계에서 수시로 업그레이드가 필요할 것입니다.

 

결과적으로 부트로더는 AVR이 부트되면 시리얼 포트를 감시하며 프로그램의 다운로드를 기다립니다. 만약 시리얼 포트로 프로그램이 전송되면 이 프로그램을 플래시 메모리에에 기록합니다. 그리고 다음번 부팅 때부터는 시리얼 신호가 없어도 부트로드된 프로그램이 있으면 이 프로그램을 바로 실행시키며  플래시가 비어 있으면 시리얼 다운로드를 기다립니다. 

 

만일 덩치가 크지 않은 사용자 프로그램을 시리얼 통신으로 다운로드 받고 PC와 통신한다면 개발시 편리한 방법이기에 앞으로 부트로드 사용이 일반화되겠지요...

 

하지만 이러한 부트로더 프로그램은 응용 프로그램과 더불어 사용자가 함께 만들어야 하는데 아두이노(Arduino) 보드는 부트로더를 탑재하여 제공하니 편하고 보급이 빠른 이유 중의 하나일 듯 생각됩니다.

 

참고로 AVR에 프로그램을 다운로드 하는 방법을 다음과 같습니다.

 

1. AVR ISP의 소프트웨어 그리고 하드웨어를 이용한 방법으로 SPI 프로토콜을 이용하여 AVR 칩의 SCLK/MISO/MOSI/SS 핀을 이용합니다.

 

2. 부트로더를 이용한 방법으로 UART 다운로드 툴과 칩의 TXD/RXD 핀을 이용합니다. 처음 부트로더를 다운로드하기 위해서는 1의 방법을 적어도 한 번 사용해야 합니다.

 

 

'Embedded Programming > AVR ' 카테고리의 다른 글

다양한 AVR Package 비교  (0) 2014.06.14
변수 vs. 메모리  (0) 2014.04.20
AVR의 메모리 구조  (3) 2014.04.20
AVR이란?  (0) 2014.03.11
Posted by Nature & Life

 

아두이노(Arduino)란?

 

취미생활을 하면서 특정 기능을 요구하는 하드웨어를 구현할 때 입력을 받아 스스로 생각하고 판단하여 출력하거나 기능을 수행하는 프로세서가 요구됩니다. 이러한 프로세서는 컴퓨터의 CPU처럼 규모가 대단할 필요는 없고 단지 다양한 입출력 기능이 포함된 마이크로 컬트롤러(Microcontroller)면 충분할 것입니다. 이 마이크로 컨트롤러는 줄여서 '마이컴'이라고 부릅니다.

 

이러한 마이컴(Micom)은 제조사도 다양하고 종류 또한 다양하지만 전통적으로 Atmel社의 ATmega나 마이크로칩社의 PIC 시리즈의 8비트 마이컴을 선호하며 이들 양 社는 어셈블러에 능숙하지 않은 아마추어들에게 C언어를 이용해 간단히 구현하고 최적화된 코드를 생성시킬 수 있는 환경을 제공하며 또한 최근에 플레쉬(Flash) 메모리의 가격하락과 고용량 메모리를 탑재한 마이컴 시리즈가 시장에 주류를 이루면서 고급언어를 이용한 Compact code 제공에 대한 부담이 줄어들고 있는 추세입니다.

 

ATmega 칩을 사용하여 WinAVR 툴을 이용하여 코드를 생성하고 MK2와 같은 ISP 프로그래머를 사용하여 칩에 업로드하는데 아두이노(Arduino)는 이러한 과정을 간소화하여 아두이노 보드와 툴을 이용하면 코드를 생성하고 바로 업드로하여 테스트할 수 있는 환경을 제공합니다.

 

현재 아두이노 보드는 주로 ATmega328 칩을 실장하며 PC와 소통을 위한 USB단자와 주변회로가 보드에 내장되어 있고 또한 Shield 보드를 이용하여 아두이노 보드에 수직으로 장착하여 아마추어들이 원하는 주변회로를 쉽게 구현도록 하였습니다. 이를테면 확장보드인 셈입니다.

 

무엇보다도 가장 좋은 장점은 오픈소스를 기반으로 한 피지컬 컴퓨팅 플랫폼을 제공한다는 것이며 이는 단순히 보드와 소프트웨어 개발을 위한 통합 환경(IDE)를 제공한다는 이점보다는 아마추어가 쉽게 원하는 기능을 만들기 위한 레퍼런스가 풍부하다는 것을 의미할 것입니다.

 

그리고 이런 환경은 Window를 비롯해 Mac OS X, 리눅스 등 여러 OS를 모두 지원한다고 알려지며 오픈소스인 만큼 아두이노 보드의 회로도가 CCL에 따라 공개되어 있습니다.

 

http://arduino.cc

 

다음은 가장 최근에 출시된 아두이노 보드입니다.

 

Arduino Uno R3의 앞면

 

Arduino Uno R3의 뒷면

 

Posted by Nature & Life