VS Code의 PlaatformiO에서 Arduino의 ATmega328p 디버깅 수행
10160 단어 VS CodeArduinoPlatformIOtech
debugwire를 사용하려면 고가의 기계가 필요하지만 Digispark Attiny 85라는 1000엔 이하의 개인용 컴퓨터판을 debugwire로 사용하고 dwire-debug를 사용하면 ATmega328p를 디버깅할 수 있다.
이 글을 참고했지만 아두노에 대한 이해가 부족해 빠진 곳이 많기 때문에 디버깅을 수행하기 전의 절차를 소개한다.
하지만 Arduino UNO R3에 대한 디버깅은 나 혼자 성공하지 못했다.Arduino Pro Mini에서 성공했습니다.또 FUSE를 고쳐 썼기 때문에 고전압 프로그래머가 없으면 고쳐 쓸 수 없는 상태에 빠질 수 있다.위험을 고려한 기초 위에서 진행할 필요가 있다.
Arduino UNO에서는 다음과 같은 경로설정 가공이 필요합니다.
이 글의 설명은 모두 Linux(Ubuntu)로 기재되어 있지만, 주로 USB 포트의 지정(/dev/tty USB 0)을 목적 OS로 바꾸십시오.
준비물
하드웨어
소프트웨어
다음 소프트웨어가 설치되어 있습니다.
sudo apt install -y gdb-avr avrdude
Digispark Attiny 85에 micronucleas boootloader 쓰기
Digispark Attiny 85에서 dwire-debug를 프로그래밍하려면 micronucleas boootloader에 기록해야 합니다.
boootloader에 쓰기 위해서는 ISP(In System Programer)가 필요합니다.USBasp을 구매하면 ISP로, 아두노 UNO가 있으면 아두노 UNO를 ISP로 사용할 수 있다.
우선 아두노 UNO를 ISP로 만들기 위해 아두노 IDE를 열고 메뉴'File'->'Example'->'아두노 ISP'를 열어 이 스케치북을 아두노 UNO에 올린다.
Arduino UNO와 Digispark Attiny 85를 연결하는 방법은 다음과 같습니다.
ICSP
Arduino UNO
Digispark ATtiny85
RESET
10
P5
SPI MOSI
11
P0
SPI MISO
12
P1
SPI SCK
13
P2
5V
5V
VCC
GND
GND
GND
avrdude 명령에서 지정한prgrammer의 이름
-c
은 avrisp
입니다.먼저 Digispark Attiny 85의 FSE가 어떤 설정인지 확인합니다.Digispark Attiny 85의 FSE 값은
FE DD C1
여야 합니다(엄밀히 말하면 SELFPRGEN
의 값은 1).avrdude -p attiny85 -c avrisp -P /dev/ttyUSB0 -b 19200
avrdude: safemode: Fuses OK (E:FE, H:DD, L:C1)
FUSE의 설정에서 avrdude 명령을 통해 설정할 수 있는 것 외에 AVR8 burn-o-mat라는 도구를 사용하면 GUI를 통해 설정할 수 있다.그러나 FUSE를 잘못 설정하면 다시 시작할 수 없습니다.
avrdude -p attiny85 -c avrisp -P /dev/ttyUSB0 -b 19200-U lfuse:w:0xEF:m -U hfuse:w:0xDD:m -U efuse:w:0xC1:m
Digispartk Attiny 85용 micronucleas boootloader 이미지는 아래에서 다운로드할 수 있습니다.t85default.hex에 쓰려면 다음 명령을 실행하십시오.
avrdude -p attiny85 -c avrisp -P /dev/ttyUSB0 -b 19200 -U ./t85_default.hex
이렇게 하면 ISP의 역할이 끝난다.다음은 이micronucleas boootloader로 dwire-debug의 그림을 씁니다.
쓰기에 필요한micronucleas의 cli 도구를 다운로드하십시오.
아래에서 dwire-debug의 그림을 다운로드하십시오.
그리고 micronucleas boootloader를 통해 쓸 때 다음 명령을 실행합니다.
디스플레이
micronucleus --run main.hex
> Please plug in the device ...
가 나타나면 Digispark Attiny 85를 PC에 연결합니다(micronucleas 쓰기 방법).기록이 성공한 경우 삽입 후 즉시 식별
Bus 001 Device 007: ID 16d0:0753 MCS Digistump DigiSpark
하고 6초 후Bus 001 Device 031: ID 1781:0c9f Multiple Vendors USBtiny
로 변하면 성공한다.Ubuntu의 경우 lsusb
명령을 통해 확인할 수 있습니다.마지막으로 USE에서 RESET를 무효화하는 설정(RstdISBL=1).이 설정을 사용하면 일반적인 ISP에 기록할 수 없으며, 이 설정이 성공했는지 확인한 후에 다시 진행하십시오.
avrdude -p attiny85 -c avrisp -P /dev/ttyUSB0 -b 19200-U lfuse:w:0xEF:m -U hfuse:w:0x5D:m -U efuse:w:0xC1:m
이 Digispark Attiny 85는 ISP의 USBtiny로 사용할 수 있다.dwire-debug 명령을 준비합니다 dwire-debug
MacOS, Windows의 경우 명령은 아래에서 다운로드할 수 있습니다.
Ubuntu인 경우 별도로 구성해야 합니다.
git clone https://github.com/DeqingSun/dwire-debug
cd dwire-debug
make
Digispark Attiny 85에 UNO, Pro Mini 연결
아래와 같이 연결을 진행한다.
ICSP
Digispark ATtiny85
Arduino UNO
Arduino Pro Mini
RESET
P5
ICSP RST
RST
SPI MOSI
P0
ICSP MOSI
11
SPI MISO
P1
ICSP MISO
12
SPI SCK
P2
ICSP SCK
13
ICSP는 Arduino UNO에서 다음과 같은 스핀다운 구성입니다.
|MISO|VCC|
|CLK|MOSI|
|RST|GND|
올바르게 연결되면 다음 명령을 사용하여 현재 FUSE 값을 얻을 수 있습니다.
avrdude -patmega328p -cusbtiny
FSE를 사용하여 debugwire 활성화
USE에서 DWEN = 1을 설정하고 debugwire를 활성화합니다.Arduiino UNO가 앞서 설명한 것처럼 추가 가공을 하지 않으면 사용할 수 없다(필자는 FUSE를 설정해 보았지만 3개의 UNO를 사용할 수 없다).
avrdude -patmega328p -cusbtiny -U lfuse:w:0xFF:m -U hfuse:w:0xDA:m -U efuse:w:0xFD:m
dwire-debug가 동작하는지 확인
dwdebug 명령을 실행하여 ATmega328P가 인식되는지 확인합니다.
dwdebug device usbtiny1
Connected to ATmega328P on UsbTiny1 at 125000 baud.
확인 후 Ctrl-C를 통해 중단합니다.또한 dwdebug를 시작하면 디버깅 모드로 시작하고 avrdude 명령과 Upload는 더 이상 받아들일 수 없습니다. 이 때 dwdebug 실행 명령q로 디버깅을 끝낼 수 있습니다.
dwdebug device usbtiny1
Connected to ATmega328P on UsbTiny1 at 125000 baud.
0040: 940c jmp $00000c > qi
USBTiny를 통해 PlaatformIO에 프로그램 쓰기
PlaatformIO의 설치 및 프로젝트 구축 방법을 생략합니다.
USBTiny로 작성된 PlaatformIO의 설정은 다음과 같습니다.
platformio.ini
[env:uno]
platform = atmelavr
board = uno
framework = arduino
upload_protocol = usbtiny
build_type = debug
실제 PlaatformiO의 Upload 단추가 작동하지 않는 경우 avrdude 명령을 다음과 같이 씁니다.avrdude -patmega328p -cusbtiny -U .pio/build/uno/firmware.hex
dwire-debug 동작 사용하기
dwdebug 명령에서 gdb로부터 연결을 받는 상태로 다음 명령을 실행합니다.
dwdebug device usbtiny1, gdbserver, qr
Connected to ATmega328P on UsbTiny1 at 125000 baud.
Info : avrchip: hardware has something
Target ready, waiting for GDB connection.
Use 'target remote :4444'
PlaatformIO에서 avr-gdb를 사용하여 디버깅 시작
PlaatformIO 설정에 debug 관련 설정을 추가합니다.
platformio.ini
[env:uno]
platform = atmelavr
board = uno
framework = arduino
upload_protocol = usbtiny
build_type = debug
debug_tool = custom
debug_server = /usr/bin/avr-gdb
debug_init_cmds =
set remoteaddresssize 32
target remote localhost:4444
중단점을 설정합니다. 정지하면 디버깅을 실행할 수 있습니다.FSE 복원
디버그가 끝난 후 debugwire에서 FUSE가 활성화된 상태에서 시작합니다.
avrdude -patmega328p -cusbtiny -U lfuse:w:0xEF:m -U hfuse:w:0xDD:m -U efuse:w:0xC1:m
확인한 일
좋은 디버깅 체험을 별로 얻지 못했다.
감상
RaspberryPi Pico와 ESP32의 개발 체험이 좋아서 (디버깅도 가능) 제가 잘 활용하지 못하는 것 같아요.
Reference
이 문제에 관하여(VS Code의 PlaatformiO에서 Arduino의 ATmega328p 디버깅 수행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/74th/articles/b61765bbc9fa17텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)