'boot 영역'에 해당되는 글 2건

  1. 2014.05.27 아두이노(Ardunio)의 장점(2)
  2. 2014.04.20 AVR의 메모리 구조 3


아두이노(Arduino)가 오픈 소스 플랫폼으로 자리잡은 이유는 AVR 칩이 제공하는 Self-programming 기능으로 거슬러 올라갑니다. Self-programming 기능이란 칩의 퓨즈를 적절히 설정함으로써 부팅시 Application 영역이 아닌 Boot 영역으로 시작 지점이 변경된다는 것입니다.



한편, AVR 칩은 추가적인 하드웨어 구성 없이 USART나 TWI, SPI 등으로 통신이 가능한데, 칩이 Boot 영역에서 수신된 데이터를 감지하고 Application 영역을 변경할 수 있다는 것입니다. 이러한 기능은 3세대 AVR 칩에서 등장하여 펌웨어의 유지 및 보수 목적으로 특히 가혹한 원격지에서 펌웨어 업그레이드에 유연성을 주기 위함이었습니다.


따라서 이러한 기능이 가능하게끔 작성된 Bootloader를 최초 한번 JTAG이나 ISP를 이용하여 펌웨어를 프로그래밍을 하면 아두이노는 그 다음부터 ISP 없이 USART로 프로그램의 간단히 업로드가 가능하게 됩니다. 결국 아두이노 보드는 아래 회로도에서와 같이 별도의 ATmega16U2 칩을 이용해 USB로 데이터를 송수신하고, 이를 다시 ATmega328 칩에 USART 규격으로 통신하는 구조를 가집니다.



요약하면 아두이노 IDE 환경은 AVR 칩에 최초 Bootloader를 탑재하여 PC의 USB 포트로 C 코드인 스케치(Sketch) 파일을 컴파일하고 이를 아두이노 보드로 추가의 하드웨어 없이 전송하여 쉽고 빠른 개발환경을 제공한다는 것입니다. 게다가 아두이노 IDE 환경에서 함께 제공하는 Serial Monitor를 이용해서 클릭 한번으로 그 결과를 바로 확인할 수 있다는 장점을 가집니다.





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