기술 노트/공통·도구

[기술 가이드] Linux 환경에서 누보톤 칩 굽기: 파이썬 기반 오픈소스 ICP 라이브러리 활용 가이드

EmbedReact 2026. 10. 15. 12:47

1. 개요 및 배경

임베디드 제품 개발 및 생산 시 컴파일된 이진 파일(Hex 또는 Bin 파일)을 마이크로컨트롤러(MCU) 내부 플래시 메모리에 다운로드하는 장치 프로그래밍 과정은 필수적입니다.

 

누보톤은 8051 및 Cortex-M 시리즈 칩셋에 자체 펌웨어를 다운로드할 수 있는 하드웨어 라이터기인 Nu-Link와 공식 GUI 유틸리티인 ICP(In-Circuit Programming) Tool 및 NuWriter를 제공하고 있습니다.

 

하지만 이 공식 프로그램들은 오직 윈도우(Windows) 운영체제만 지원합니다.

 

이로 인해 리눅스(Linux)나 맥OS(macOS) 컴퓨터 환경에서 개발 및 빌드를 수행하는 다수의 임베디드 엔지니어들은 컴파일을 마친 뒤 매번 윈도우 PC로 파일을 옮겨가서 구워야 하는 큰 번거로움을 겪습니다.

 

이 가이드북은 라즈베리파이의 GPIO 또는 아두이노를 ICP 프로그래머로 사용하여, 윈도우 OS 와 Nu-Link 없이도 리눅스 명령행(CLI) 환경에서 누보톤 8051 계열 칩셋에 펌웨어를 다운로드하고 타겟 칩 정보를 조회하는 오픈소스 솔루션 구축 방법을 제공합니다.

 

2. 하드웨어 결선 가이드 (ICP 5핀 헤더 구성)

프로그래밍을 시작하기 전, 프로그래머 역할을 하는 라즈베리파이 또는 아두이노와 타겟 8051 보드(N76E003, MS51 등) 사이의 5핀 신호선이 올바르게 연결되었는지 확인해야 합니다.

 

신호 핀 맵 구성 및 연결 정보

  • VDD: 전원 핀 (타겟 보드에 3.3V 전원 인가)
  • GND: 그라운드 공통 접지
  • RST: 리셋 제어 신호선 (라즈베리파이 GPIO21 / 아두이노 13번 핀)
  • ICPCK: ICP 클럭 제어 신호선 (라즈베리파이 GPIO26 / 아두이노 12번 핀)
  • ICPDA: ICP 데이터 입출력 신호선 (라즈베리파이 GPIO20 / 아두이노 11번 핀)

 

3. 파이썬 기반 오픈소스 라이브러리 설치 및 전제 조건

NuMicro-8051-prog 유틸리티는 라즈베리파이의 GPIO 로 ICP 신호를 직접 만들어 칩을 프로그래밍하는 nuvo51icpy 와, 시리얼(ISP) 프로토콜로 APROM 을 프로그래밍하는 nuvoispy 두 가지 파이썬 명령행 도구를 제공합니다. nuvo51icpy 는 리눅스(라즈베리파이)에서만 실행됩니다. 아두이노에 ISP-ICP 브리지 스케치(nuvo51icp.ino)를 올리면 아두이노를 ICP 프로그래머로 쓸 수 있으며, 이때는 nuvoispy 를 사용합니다.

 

전제 조건 및 패키지 설치 방법

  1. 빌드에 필요한 sdcc, make, gcc, python3, python3-pip 와 라즈베리파이용 pigpio·libgpiod 라이브러리를 설치합니다. 데비안·우분투 계열에서는 아래 명령으로 한 번에 설치할 수 있습니다.
  2. 클론한 저장소 루트에서 pip install -e . 를 실행하면 라즈베리파이용 nuvo51icp 라이브러리가 함께 빌드·설치됩니다. 라즈베리파이 5 를 사용한다면 /boot/firmware/cmdline.txt 에 pcie_aspm=off 를 추가해야 GPIO 지연으로 인한 플래시 쓰기 실패를 막을 수 있습니다.
$ sudo apt install sdcc build-essential pigpio libgpiod-dev python3 python3-pip arduino
$ pip install -e .

 

4. 명령행(CLI) 실행 및 다운로드 프로시저

설치가 완료되었으면, 클론한 저장소에서 nuvo51icpy 를 python -m nuvoprogpy.nuvo51icpy 형식으로 실행하여 다음 명령을 순차적으로 수행합니다.

 

1) 연결된 타겟 칩 정보 쿼리 (Chip Info Check)

라즈베리파이에 결선한 대상 칩(예: N76E003)이 정상적으로 감지되는지 확인하고 장치 정보와 현재 CONFIG 설정을 조회합니다.

$ python -m nuvoprogpy.nuvo51icpy -u

성공적으로 감지되면 타겟 칩의 디바이스 정보와 현재 CONFIG 설정이 터미널 콘솔에 출력됩니다.

 

2) APROM(애플리케이션 영역) 펌웨어 바이너리 파일 다운로드

타겟 칩의 APROM 영역에 컴파일된 펌웨어 바이너리(firmware.bin)를 기록(Write)합니다. 기록 전 플래시 메모리 섹터 지우기(Erase) 및 라이트 후 검증(Verify) 단계가 자동으로 포함되어 작동합니다.

$ python -m nuvoprogpy.nuvo51icpy -w firmware.bin

아두이노 ISP-ICP 브리지를 사용하는 경우에는 시리얼 포트를 지정하여 nuvoispy 로 기록합니다.

$ python -m nuvoprogpy.nuvoispy -p /dev/ttyACM0 -w firmware.bin

 

3) CONFIG 레지스터 바이트 구성 제어

누보톤 칩의 부팅 영역(APROM/LDROM) 선택이나 저전압(Brown-out) 리셋 전압 등을 정의하는 CONFIG 바이트는 JSON 설정 파일로 지정하여 -c 옵션으로 기록합니다. JSON 형식은 저장소의 config-example.json 을 참고하며, 기본값은 모든 바이트가 0xFF 인 상태에 해당합니다.

$ python -m nuvoprogpy.nuvo51icpy -c config.json

 

5. 임베디드 FAE 리스크 분석 및 예방 대책

신호선 기생 커패시턴스로 인한 다운로드 실패

ICP 통신을 구성하는 ICPCK 및 ICPDA 핀은 최대 수 MHz의 속도로 데이터 펄스를 주고받습니다. 만약 타겟 개발 보드의 해당 핀 주변에 노이즈 필터링용 100pF 이상의 세라믹 커패시터가 병렬 연결되어 있거나 신호 케이블의 길이가 20cm 이상으로 지나치게 길어지면, 기생 커패시턴스로 인해 파형 슬루레이트(Slew Rate)가 왜곡되어 데이터 기록 실패(Write Fail)나 칩 인식 불가 오류가 발생합니다. 프로그래밍 시에는 신호선 주변의 필터링 커패시터를 제거하고 케이블 길이를 최소화하십시오.

 

칩 잠금(Lock) 활성화에 따른 접근 차단

CONFIG 레지스터 바이트 기록 시 보안 락(Security Lock) 비트를 잘못 인가하여 활성화하면, 이후 디버거나 ISP/ICP 도구로 내부 플래시 데이터를 읽거나 쓸 수 없게 차단됩니다. 이를 해제하고 칩을 재사용하려면 nuvo51icpy 의 -e(--mass-erase) 옵션으로 칩 전체 강제 지우기(Mass Erase) 기능을 수행하여 보안 비트를 공장 출하 상태로 완전히 리셋시킨 후 재라이트해야 합니다.

 

6. 참고 자료 및 레퍼런스 (References)

본 아티클은 누보톤 테크놀로지의 공식 NuMicro 8051 시리즈 ICP 프로그래밍 사양서 명세서을 기반으로 작성되었습니다. 또한 깃허브의 오픈소스 프로젝트인 nikitalita의 NuMicro-8051-prog 유틸리티의 README 와 명령행 옵션을 대조하고 검증하여 FAE 관점에서 기록한 실무용 가이드 문서입니다.


💡

 

👉 https://cafe.naver.com/nuvotonlab

 

Nuvoton Users Group : 네이버 카페


이 글은 네이버 블로그에도 있습니다: https://blog.naver.com/nuvoton-dev/224338117592