Bootloader 프로젝트는 UART를 이용하여 진행되므로 UART 연결 회로를 구성하여야 되고, 디버깅 목적으로 LED 하나를 연결하는 회로를 추가하면 된다. 위의 회로가 정상적으로 연결되었는지 확인하는것으로부터 프로젝트를 시작하도록 하겠다. uint8_t uart_poll(void) { uint8_t data = 0; if (uart->ucsr_a & RXC) data = uart->udr; return data; } uart.c 파일은 심화 과정중에서 패킷통신 글에서 사용하였던 파일을 그대로 사용하도록 하겠다. 그리고 위에 보이는 uart_poll() 이라는 함수를 추가하였다. 이미 기존에 사용하였던 uart_rx()함수는 UART로 어떤 데이터가 수신될 때까지 무한히 기다리는 함수이다. 다시 말..
일반적인 의미에서 bootloader라고 하는 것은 컴퓨터나 임베디스 시스템이 처음 기동할 때 기본적인 하드웨어의 동작을 검사 한 후, 이상이 없으면 하드디스크나 플래쉬메모리에서 OS 커널을 RAM으로 복사하여 OS가 시작되도록 하는 작은 프로그램을 의미한다. 하지만, AVR에서 말하는 bootloader는 위에서 설명한 의미 보다는 아이폰이나 안드로이드폰과 같은 단말기의 OS를 업데이트하는 개념과 비슷하다.즉, 특별한 장비없이 ROM 파일을 변경할 수 있는 셀프 프로그램이라고 보면된다. AVR의 bootloader 프로그램을 개발하기 위해서는 몇가지 읽어야 할 문서들이 있다. AVR(ATmega328) datasheet 문서중에 "Boot Loader Support – Read-While-Write S..
앞의 글에서 구현했던 패킷 통신 프로젝트는 수신측에서 데이터를 수신 하든지 말든지 관계없이 송신측에서 일방적으로 데이터를 내보내는 구조를 가지고 있다. 즉, broadcast 방식인 셈이다. 이렇게 만든 통신 방식은 송신측에서는 단순하게 기능을 구현할 수 있는 장점이 있는 반면, 쓸데없는 자원을 낭비하는 것이라고 생각할 수 있다. 누군가가 데이터가 필요할 때 어떤 데이터가 필요한지 요청하고, 그 요청에 따른 결과를 되돌려주면 좀더 효율적인 통신이 이루어진다. 따라서, 이번 글에서 다룰 프로젝트는 Request/Reply 방식의 패킷 통신을 구현해 보는것이다. 컴퓨터 프로그램에서 특정 데이터를 요구하는 request message를 AVR로 보내면, AVR은 요청에 맞는 데이터를 reply 해 주는 것이다..