부트 로더는 어떻게 굽나요?

발생한 오류를 수정하기 위해 Arduino에 “부트 로더를 구울”하라는 지시를 받았습니다. 어떻게 할 수 있습니까? (그리고 정확히 부트 로더는 무엇입니까?)

댓글

Answer

부트 로더는 (거의) 항상 작은 프로그램입니다. Arduino에서. 스케치 업로드 및 시작을 관리하고 보드가 재설정 될 때마다 핀 13 LED를 깜박입니다.


부트 로더 굽기 :

  1. AVR 받기 ISP, USBtinyISP , ParallelProgrammer 또는 이와 유사한 것; 또는 다른 Arduino 보드 를 사용하세요. ISP가됩니다.
  2. 별도의 지시가없는 한 ISP를 보드의 ICSP 핀에 연결합니다.
  3. USB 케이블이나 외부 전원 공급 장치로 보드에 전원을 공급합니다.
  4. Arduino IDE를 엽니 다.
  5. IDE의 Tools ► Board ►에서 레코딩 할 올바른 보드를 선택했는지 확인합니다. 프로그램을 올바로 업로드 할 수있는 경우에도이를 다시 확인하십시오. 업로드 할 때 항상 올바른 보드가 필요한 것은 아닙니다.
  6. Tools ► Programmer ►에서 적절한 프로그래머를 선택합니다.
  7. 및 기다리십시오. 1 분 이상 걸리지 않으며 대개 몇 초 밖에 걸리지 않습니다.

출처 :

댓글

  • AVRISP는 거의 EOL입니다. 이 시점에서 (단종). 최소한 AVRISPmk2가 필요합니다. 다른 많은 멋진 도구 (예 : AVR One!)도 있습니다. {line 1} or other dedicated ISP programmer.
  • Arduino Yun과 같은 보드에서 " WiFi를 통해 업로드 할 때마다 ", ' 스케치와 병합 된 부트 로더를 굽습니다. 이는 Linux CPU가 SPI를 통해 AVR MCU에 연결되어 있기 때문에 소프트웨어로 ISP를 모방 할 수 있기 때문입니다.
  • @FedericoFissore-이것이 시간이 오래 걸리는 이유입니까?
  • 예, GPIO 비트 뱅킹이 더 느리다는 사실입니다. 속도를 높이기 위해 지속적으로 노력하고 있습니다.

답변

부트 로더 란 무엇입니까?

부트 로더는 정확히 무엇입니까?

부트 로더는 프로그램 메모리의 “높은”부분에있는 작은 코드 조각입니다. 일반적으로 새 스케치를 업로드 할 때 지워지지 않습니다. 그 목적은 재설정 직후 활성화되는 것입니다 (퓨즈는 주소 0x0000이 아닌 부트 로더 주소에서 코드를 시작하도록 구성됨). 부트 로더는 “프로그래밍”데이터가 직렬 포트에 도착하는지 확인하기 위해 잠시 (예 : 1 초) 기다립니다.

  • 그렇다면 해당 데이터를 읽고 디코딩합니다. 나머지 플래시 메모리를 다시 프로그래밍합니다. 업로드 프로그램 (일반적으로 avrdude)과 함께 작업하면 새 스케치가 직렬 포트를 통해 전송됩니다. 부트 로더는 플래시 메모리 페이지를 지우고 새 코드로 교체합니다. 완료되면 새 코드를 실행합니다.

  • 명령이 도착하지 않으면 부트 로더는 주소 0x0000으로 점프하여 보드의 기존 스케치를 실행합니다.


부트 로더를 교체하는 방법

부트 로더를 프로그래밍하는 다른 방법은 내가 얼마 전에 작성한 스케치를 사용하는 것입니다.

  • Uno (또는 Duemilanove와 같은 유사)
  • Leonardo
  • Mega2560

“프로그래밍”보드는 다음과 같은 스케치를 실행합니다. 하드 코딩 된 여러 보드에 대한 부트 로더가 있습니다. 그림과 같이 6 개의 연결 와이어를 사용하여 프로그래밍 보드를 대상 보드 (부트 로더를 원하는 보드)에 연결합니다.

Uno 용 부트 로더 프로그래머

그 특정 사진은 Uno가 다른 것을 프로그래밍하는 것을 보여줍니다.

스케치를 실행합니다 (명령을 내리기 위해 직렬 모니터를 통해 작동). 먼저 대상 칩을 식별합니다.

Atmega chip programmer. Written by Nick Gammon. Entered programming mode OK. Signature = 0x1E 0x95 0x0F Processor = ATmega328P Flash memory size = 32768 bytes. LFuse = 0xFF HFuse = 0xDE EFuse = 0xFD Lock byte = 0xCF Bootloader address = 0x7E00 Bootloader length = 512 bytes. Type "L" to use Lilypad (8 MHz) loader, or "U" for Uno (16 MHz) loader ... Type "G" to program the chip with the bootloader ... 

누르면 G 프로그램을 작성합니다.

Erasing chip ... Writing bootloader ... Committing page starting at 0x7E00 Committing page starting at 0x7E80 Committing page starting at 0x7F00 Committing page starting at 0x7F80 Written. Verifying ... No errors found. Writing fuses ... LFuse = 0xFF HFuse = 0xDE EFuse = 0xFD Lock byte = 0xCF Done. Type "C" when ready to continue with another chip ... 

Uno의 경우 1 초가 걸립니다. Mega2560을 프로그래밍하는 데 3 초가 걸립니다.

Atmega 부트 로더 프로그래머

의 자세한 지침은

에서 다운로드 할 수 있습니다. div id = “7a947c22a6″>

Github : nickgammon / arduino_sketches

댓글

  • 유형을 선택해야합니까? 굽는 칩의 (도구-> 보드 ..)?독립형 칩으로 부트 로더를 구울 때 어떤 보드를 선택해야합니까?
  • IDE에서 부트 로더를 구울 때 사용하는 보드 유형을 선택합니다. 부트 로더 스케치는 대상 보드 유형을 자동으로 감지합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다