공작실

만물상 간이전광판 개조

mcus 2012. 1. 14. 23:28

이글의 사진이나 소스프로그램 등은 저작자의 동의 없이는 상업적으로 사용할 수 없으며, 비상업적인 목적이라하더라도 출처를 밝히지 않고 게시하는 것은 금지합니다.

 

AVR의 부트로더를 연구하였습니다.

언젠가 꼭 익혀야겠다고 생각하다가 만물상 간이전광판의 기능을 개선하는 김에 부트로더를 구현해 봤습니다.

AVR의 부트로더 프로그램은 많이 돌아 다니는데 그래도 Atmel의 AVR109 Self-Programming을 만족시키는 부트로더 어셈블리 소스를 구해서 구현하였습니다.

원 소스는 http://www.avrfreaks.net/index.php?module=Freaks%20Tools&func=viewItem&item_id=328입니다. 이 프로그램은 PC와 AVR을 시리얼(USART)로 연결하고 데이터를 하나 받을 때마다 명령과 데이터를 받아 실행하고 을 응답으로 보냅니다.

위 프로그램은 프로그램을 간단히 만드느라고 SPM 작업이 끝났는지를 검사하지 않고 NOP 명령하나만 주고 있기 때문에,  PC로부터 데이터를 받아서 기록하는데는 문제가 없으나 flash memory를 모두 지우는 등 연속적인 동작을 할 때에는 제대로 동작하지 않습니다.

이 문제를 해결하고 부트로더를 만들었습니다.

 

위 부트로더와 짝이 되는 PC용 프로그램도 작성했습니다. Intel Hex File을 읽어서 위 브트로더를 동작시키는 명령과 함께 데이터를 AVR로 전송합니다. 현재는 16비트 방식의 Intel hex file만 지원하고 현재는 ATmega32만 지원합니다.

20비트와 32비트는 아직 사용할 필요가 없으므로 구현하지 않았고, 당분간 계획도 없습니다. ATmega32를 지원하는 프로그램을 만들었으니 이 프로그램을 조금만 수정하면 다른 CPU를 위한 프로그램도 만들 수 있습니다. 앞으로 필요할 경우에 다른 CPU를 위한 프로그램을 하나씩 만들 예정입니다.

 

만물상의 간이전광판입니다.

 

 

 

개조하는 과정에는 ISP가 꼭 있어야 합니다. 개조가 완성된 후에는 ISP 없이 펌웨어를 업데이트할 수 있습니다. ISP가 없으신 분들은 만물상 사장님과 의논을 하시기 바랍니다.

 

1) 보드를 간단히 개조합니다.

10k 저항 하나와 2핀 짜리 헤더를 추가로 장착합니다. 개조한 후의 모습입니다.

 

동그라미 친 부분이 개조된 부분입니다.

저항은 꼭 필요한 것은 아니지만 안정적으로 동작하도록 pull down하였습니다.

헤더의 왼쪽 핀은 ATmega32의 PORTA의 PA3 핀과 연결되어 있고, 오른쪽 핀은 5V(VCC)입니다. Atmel의 데이터시트에 AVR 포트를 VCC나 GND에 직접 연결하지 말라고 되어 있는데, 간단히 하기 위해서 그냥 VCC에 연결했습니다.

 

2) 지금부터는 AVR용 ISP가 꼭 있어야 합니다.

첨부 파일에 있는 ATmega32_boot.hex를 간이전광판의 ATmega32에 기록합니다.

 

3) 퓨즈 비트를 프로그래밍합니다.

퓨즈비트 중에서 BOOTRST를 프로그램하고 부트로더의 시작 번지를 $3F00으로 지정합니다.

AVR Studio에서 퓨즈 비트를 설정한 상태입니다.

 

Ponyprog에서 작업한 사진도 올리려 했는데, ponyprog은 windows 7 64bit 버젼에서는 실행되지 않네요.

 

4) Lock bit를 설정합니다.

안해도 되지만 혹시 잘못하여 부트로더가 지워지면 ISP 없이는 다시 프로그래밍할 수 없으므로 부트로더 부분을 보호하도록 Lock bit를 설정합니다.

BLB1에서 Boot section에서 SPM 명령을 사용하지 못하게 설정함으로써 부트로더가 지워지는 것을 방지합니다.

역시 AVR Studio에서 작업한 화면입니다.

 

 

 

이제 더 이상 펌웨어 업데이트를 위햐여 ISP를 사용할 필요가 없습니다.

 

보드에 추가한 헤더를 개방한 채로 전원을 넣으면 예전과 같이 정상 동작합니다.

폄웨어 업데이트를 하려면 헤더 핀들을 연결하고 USB 케이블을 PC와 연결한 다음에 전원을 넣으면 됩니다.

 

5) PC측 프로그램을 실행합니다.

 

PC에서 간이전광판의 USB 케이블이 몇 번 COM 포트에 연결되었는지 확인합니다.(저는 4번 포트에 연결되었습니다.)

버튼을 눌러 hex 파일을 선택한 후에  버튼을 누르면 폄웨어를 업데이트합니다.

 

파일을 선택하지 않은 부분은 새로 기록하지 않습니다.

즉, Flash Program FIle(기본 확장자 *.hex)과 EEPROM File(기본 확장자 *.eep)를 모두 선택하면 Flash memory와 EEPROM을 새로 기록합니다.

만약 EEPROM을 업데이트할 필요가 없으면 EEPROM 파일은 선택하지 않으면 됩니다.

 

부트로더 hex 파일과 PC 프로그램을 첨부합니다.

ATmega32_boot.hex

 

DotMatrix14Boot.exe

 

남의 글을 마치 자신이 한 것인 듯이 그냥 마구 퍼가는 사람들이 있어서 제한을 가합니다.

 

 

이글의 맨 앞에 밝혔듯이 이글의 사진이나 소스프로그램 등은 저작자의 동의 없이는 상업적으로 사용할 수 없으며, 비상업적인 목적이라하더라도 출처를 밝히지 않고 게시하는 것은 금지합니다.

ATmega32_boot.hex
0.0MB
DotMatrix14Boot.exe
0.1MB

'공작실' 카테고리의 다른 글

만물상 간이전광판 긴 메시지용 펌웨어  (0) 2012.01.22
만물상 간이전광판 2편  (0) 2012.01.17
GU256X64-901A VFD 다루기  (0) 2012.01.06
AT-320240Q1 LCD 동작시키기(3)  (0) 2012.01.03
AT-320240Q1 LCD 동작시키기(2)  (0) 2012.01.02