정의
이미 시스템이 구성된 하드웨어에 프로그래밍하는 것.
여기에서 '구성되었다'는 말은 하기 의미이다.
이미 EEPROM, Flash, Processor, SRAM 등이 회로, 보드에 실장되어 있다.
전원을 공급하고 적절한 프로그램을 Upload하기만 하면 된다.
이 Upload 과정을 In-System Programming이라 한다.
AVR의 ISP
AVR의 ISP는 기본적으로 SPI를 기반으로 한다.
ISP라는 것에 관한 표준은 없다.
즉, 거의 모든 MCU 제조 업체가 ISP를 지원하지만 회사에 따라 규격이 다 다르다.
ATmega128A의 경우 Datasheet에 아래와 같이 쓰여 있다.
"The On-chip ISP Flash allows the program memory to be reprogrammed in-system through an SPI serial interface, by a conventional nonvolatile memory programmer, or by an On-chip Boot program running on the AVR core."
"On-chip ISP Flash는 통상적인 비-휘발성 메모리 프로그래머나 AVR 코어에서 동작하는 On-chip 부트 프로그램에 의한 SPI를 통해 재프로그래밍을 지원한다."
그러니까, 프로그램 코드가 들어가는 Flash를 SPI 이용해서 Reprogramming하는 활동을 ISP라고 칭한다.
필요 장비
방구석에서 ROM Writer를 쓸 수 있는 것도 아니고...
PC에 연결해서 프로그래밍하게 될 것이다.
그럼 AVR용 USBISP가 필요하다!
AVR ISP의 기능
당연히 프로그램 Upload를 지원하고,
필요 시, 전원 공급도 ISP 핀을 통해 가능하다.
하지만 나는... 전력 문제로 칩을 날려먹고 싶지 않아서, 별도의 전원 공급을 사용하기로 했다.
학부생 수준에서 사용하기에 AVR의 칩들은 전력 문제에 관해 '자비롭다'고는 하지만, 나는 돈이 없고, 위험을 감수하고 싶지 않다.
코드의 실행으로서 EEPROM도 쓸 수 있다!
JTAG 쓰면 안 되나요?
당연히 된다. 오히려 편할 것 같다.
JTAG는 자그마치 표준이 존재하는 좋은 장비, 인터페이스다!
런타임 디버깅이 가능하고,
ISP로 Programmable한 건 다 Programming 할 수 있다.
그렇지만 '다운로딩' 목적이라기보단 '디버깅' 목적에 편중된 장비인 것 같다.
뭐든 하라고 하면 할 수 있고, 더 편하지만, 나는 소 잡는 데는 소 잡는 칼을 쓰고 싶었다.
표준이 있기는 하지만, 다양한 장비를 지원하는 JTAG 장비일 수록 비싸다.
나중에 제대로 된 장비 장만하려구...
많은 핀을 잡아먹는다.
ISP는 6핀.
JTAG는 8, 10, 20핀.
내가 뭘 하고 싶고, 뭘 할 수 있는지도 모르는데 핀 낭비... 하고 싶지 않았다.