Flash 메모리 프로그램의 첫번째 단계는 'Erase'라고 bootloader 프로젝트에서 이미 언급하였다.Bootloader 프로그램은 Self-programming 방법이므로 page 단위로 erase를 하였으나, ISP에서는 page 단위의 erase 명령어가 없고, chip erase만 제공한다.따라서 ISP 프로젝트에서는 항상 chip erase만 사용하게 된다. #define CHIP_ERASE0 0xAC #define CHIP_ERASE1 0x80 static void erase_chip(void) { cmd_data[0] = CHIP_ERASE0; cmd_data[1] = CHIP_ERASE1; cmd_data[2] = 0; cmd_data[3] = 0; isp_cmd(); _delay_..
이번 글에서는 target CPU의 flash 메모리에 쓰여져 있는 데이터를 읽어 오는 기능에 대해서 설명하도록 하겠다. Bootloader 프로젝트에서는 bootloader 프로그램과 application 프로그램이 동일한 CPU에 존재하기 때문에, 프로젝트가 시작되는 시점에는 application 영역에 의미있는 데이터가 쓰여져 있지 않다. Bootloader program 영역 이외에는 모든 데이터가 0xFF로 읽히게 된다. 따라서 bootloader 프로젝트에서는 flash 메모리 write 기능부터 구현하게 되었다. 그리고, write 된 데이터가 제대로 쓰여졌는지 확인하기 위하여 ISP 장비를 이용하면 되니까 크게 문제 될것이 없었다. 하지만, ISP 프로젝트의 경우에는 write 기능부터 구..
ISP 프로젝트를 위한 회로 구성을 완료한 다음 회로가 제대로 연결되었는지 확인하는 단계를 반드시 거쳐야 한다.먼저 확인할 내용은 PC와 UART가 제대로 연결되었는지, ISP 프로그래머와 target CPU가 SPI로 제대로 연결되었는지 확인을 하여야 한다.입문 과정의 SPI 프로젝트를 이용하여 UART와 SPI 통신 기능을 검증해 보도록 하겠다. static void read_device_info(void) { portb->port &= ~SPI_SS; enter_program_mode(); get_signature(); portb->port |= SPI_SS; } static void port_init(void) { /* SPI port init */ portb->ddr = (SPI_SS | SPI..
ISP 프로젝트를 위한 회로 구성은 다음과 같은 모양으로 할것이다. 입문과정의 SPI 설명글에서는 target CPU를 ATmega328P를 연결하였지만, 이번 프로젝트에서는 ATtiny85를 연결하도록 하겠다. ISP 프로젝트를 진행하기에 앞서 taget CPU의 동작을 먼저 검증해보는 코드를 만들어 보도록 하겠다. ATtiny85의 2번 핀에 LED 하나를 연결하고, 일정한 주기로 점멸하는 코드를 만들어 보기로 하겠다. #define F_CPU1000000 #include #include #define LED0x08 int main(void) { DDRB = LED; PORTB= LED; /* Replace with your application code */ while (1) { PORTB ^= L..
Bootloader 프로젝트에서 별도의 장비없이 UART를 통해서 application 프로그램을 AVR의 Flash memory에 프로그램하는 방법에 대해서 설명하였다. 하지만 bootloader 프로그램 자체는 ISP 장치를 이용하여 프로그램하였다. 이처럼 임베디드 시스템을 처음 만들었을때의 시점에는 이 장치에서 돌아가는 프로그램은 아무것도 없는 상태이다. 즉, bootloader 프로그램조차도 없는 완전한 백지 상태인 것이다. 이러한 백지상태의 시스템에서 동작되어야 하는 첫번째 실행파일을 넣어주기 위해서는 어떠한 형태이든지 장비를 이용할 수 밖에 없게 된다. 대량의 양산 단계에서는 ROM writer 장비를 이용하여 Flash 메모리에 image 파일을 프로그램하겠지만, 임베디드 시스템의 개발 단계..