[Arduino] 바이너리 파일을 Arduino에 쓰는 방법

소개



이번은 전회의 기사에 관련되는 내용이므로, 아직 읽혀지지 않은 분은 꼭 부탁합니다.
또, 전회와 같이 avrdude라고 하는 툴을 사용하므로 도입이 아직의 분도 처음에 참조해 주세요.
↓↓↓↓↓↓↓↓↓
[아두이노] 아두이노에서 쓴 바이너리를 빨아들인다

실행 환경



· ArduinoUno : 바이너리를 빼내는 쪽
· UNIROI의 ArduinoUno 호환 녀석
・ArduinoIDE 1.8.13에 부속되는 avrdude
(avrdude: Version 6.3-20190619)

우선 해보자



아래 샘플 코드를 작성한 Arduino에서 추출한 바이너리를 다른 Arduino 호환 보드에 작성해보십시오.
보시다시피 Arduino에있는 LED를 깜박이는 프로그램입니다.
void setup() {
  // put your setup code here, to run once:
  pinMode(13,OUTPUT);

}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(13,HIGH);
  delay(500);
  digitalWrite(13,LOW);
  delay(500);
}

Arduino에 프로그램을 쓰면 이런 느낌의 동작을 합니다.


이 프로그램을 작성한 Arduino에서 마지막 기사의 순서로 바이너리를 추출합니다.

추출한 바이너리를 이 다른 보드에 씁니다. 보시다시피 쓰기 전에 LED가 깜박이지 않습니다.



쓰기



다음 명령을 실행했습니다. (자세한 명령 설명은 나중에 설명합니다)

avrdude -C../etc/avrdude.conf  -F -v -pm328p -cstk500v1 -P/dev/cu.usbmodem1463201 -b115200 -D -Uflash:w:program.bin:r

다음과 같이 출력되었습니다.
출력 예
avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "../etc/avrdude.conf"
         User configuration file is "/Users/p_x9/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/cu.usbmodem14601
         Using Programmer              : stk500v1
         Overriding Baud Rate          : 115200
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : STK500
         Description     : Atmel STK500 Version 1.x firmware
         Hardware Version: 3
         Firmware Version: 4.4
         Vtarget         : 0.3 V
         Varef           : 0.3 V
         Oscillator      : 28.800 kHz
         SCK period      : 3.3 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x000000 (retrying)

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x000000 (retrying)

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
avrdude: Expected signature for ATmega328P is 1E 95 0F
avrdude: safemode: lfuse reads as 0
avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: reading input file "program.bin"
avrdude: writing flash (32768 bytes):

Writing | ################################################## | 100% 5.64s

avrdude: 32768 bytes of flash written
avrdude: verifying flash memory against program.bin:
avrdude: load data flash data from input file program.bin:
avrdude: input file program.bin contains 32768 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 4.19s

avrdude: verifying ...
avrdude: 32768 bytes of flash verified

avrdude: safemode: lfuse reads as 0
avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: safemode: Fuses OK (E:00, H:00, L:00)

avrdude done.  Thank you.


그러면...



아래와 같이 LED가 점멸하게 되었습니다.



명령 설명


avrdude -C../etc/avrdude.conf  -F -v -pm328p -cstk500v1 -P/dev/cu.usbmodem1463201 -b115200 -D -Uflash:w:program.bin:r

-C 옵션



config 파일을 지정합니다. 아마도 다음 경로에 있다고 생각합니다.

Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf

-p 옵션



순서 2에서 조사한 마이크로 컴퓨터의 종류를 지정합니다. 여기 에서 대응표를 볼 수 있습니다.
Arduino Uno는 ATmega328P이므로 m328p였습니다.

-P 옵션



포트 이름을 지정합니다. 모르는 경우는 마지막 기사 로 설명하고 있으므로 참조해 주세요.

-b 옵션



여기에서는 전송 속도를 지정합니다.

-U 옵션



여기에 쓸 바이너리 파일을 지정합니다. 이번에는 program.bin을 작성하므로 위와 같이 지정하고 있습니다.

바이너리 이외의 파일을 쓰는 경우



-U 옵션의 맨 마지막 r 부분에서 쓸 파일의 형식을 지정합니다. 이번은 바이너리이므로 r을하고 있습니다만, hex 형식 등에 대응하고 있습니다.


서식
지정 형식


인텔 헥스
i

원시 binary
r

자동 감지
a


사이고에게



이상 바이너리를 Arduino에 쓰는 방법이었습니다. 도움이 되는 것은 꽤 국소적일지도 모르지만, 예를 들어 프로그램 파일은 없었지만 쓴 보드는 있을 때마다 유용할지도 망상하고 있습니다. 그 밖에도 뭔가 도움이 되는 길이 있으면 코멘트등으로 가르쳐 주세요.
평상시는 취미로 iOS 앱을 개발하거나 여러가지 이상한 일도 하고 있으므로 꼭 트위터 도 들여다 봐 주세요.

[참고]
↓ 이것을 읽으면 완벽
htps //w w. cs. 오! 에즈 / ~ 큁 g / c ぁせ s / 게네라 l / 아 t l / 아 vr 즈. pdf

좋은 웹페이지 즐겨찾기