2013-10-22 1 views
3

내가이 code에 따라 사용자 정의 ATMEGA2560 보드에 대한 stk500v2 부트 로더를 해킹하고있어 재설정, 그래서 UART0 대신 UART2를 사용하여, 나는에 또한지도 핀을 변경 내 보드 핀 정의와 일치하고 WDT 감지 코드를 재설정하여 응용 프로그램 코드로 직행하는 대신 부트 타임 아웃을 증가시킵니다. 보드에서 수행 한 세부 변경 사항 및 설정은 아래를 참조하십시오.STK500v2 부트 로더는/WDT가

내 문제는 핀 리셋 또는 WDT 리셋을 할 때 MCU가 부트 로더를 실행하지 않지만 브라운 아웃 리셋 (플러그/플러그 끊기) 또는 전원 켜기 리셋 (처음 부팅 후 펌웨어 깜박임). intertubes에 대한 주제에 대한 문서를 찾으려고했는데 Atmega2560의 데이터 시트를 읽었습니다 (상당히 길지만 관련 부분을 놓쳤을 수도 있음). 문제를 해결하는 데는 관련이 없습니다.

내 코드 및/또는 설정에서 뭔가 잘못하고있는 것 같지만 무엇을 말할 수 없습니다.

그래서 기본적으로, 나는 line 315 block에서 다음을 할 수있는 전처리 조건 (_USE_UART2_)를 추가하는 코드를 업데이트 :

[...] 
#elif defined(_M2560_UART2_) 
    #define UART_BAUD_RATE_LOW   UBRR2L 
    #define UART_STATUS_REG    UCSR2A 
    #define UART_CONTROL_REG    UCSR2B 
    #define UART_ENABLE_TRANSMITTER  TXEN2 
    #define UART_ENABLE_RECEIVER   RXEN2 
    #define UART_TRANSMIT_COMPLETE  TXC2 
    #define UART_RECEIVE_COMPLETE  RXC2 
    #define UART_DATA_REG    UDR2 
    #define UART_DOUBLE_SPEED   U2X2 
[...] 

또한 line 155 주위에 핀 또 다른 변화를 만들어 :

[...] 
#elif defined(_M2560_UART2_) 
#define PROGLED_PORT  PORTJ 
#define PROGLED_DDR  DDRJ 
#define PROGLED_PIN  PINJ0 
[...] 

브라운 아웃 리셋 또는 WDT/핀 리셋 (WDT/핀 리셋에서 부트 로더를 더 오래 기다리게하는 것이 목표 임)에 따라 부트 타임 아웃 값을 변경하려고합니다.

unsigned long long boot_timeout = 1200000; 

line 560에서 : : 그래서 line 545에서 다음과 같이 변경했다 마지막으로

WDTCSR = 0; 
    __asm__ __volatile__ ("sei"); 
    // check if WDT generated the reset, if so, go straight to app 
#ifndef SOFTWARE_RESET 
    if (mcuStatusReg & _BV(WDRF)) 
    { 
     app_start(); 
    } 
#else 
    // if WDT generated the reset, increase the boot timeout time 
    if (mcuStatusReg & _BV(WDRF)) 
     boot_timeout = 3500000; // 7 seconds 
#endif 

을 다음과 같이 나는 퓨즈를 설정 :

  • BOOTRST 세트 0에 (사용)
  • BOOTSZ00 (4 096 단어 부트 로더 섹션)
  • WDTON 세트) (장애인 1-
  • BODLEVEL 설정 101 (VBOTmin=2.5V에 나는) Vcc이 규제되고 있지만 100이 더 나을 것으로 생각하고 정전을 제외하고 다양해서는 안하지만

답장을 보내 주셔서 감사합니다.

답변

0

어리석은 것처럼 보일지 모르지만 그때까지 나에게 불분명 한 점은 부트 로더를 플래시하는 것과 별도로 펌웨어가 작동하지 않는다는 것입니다. 수행해야 할 일은 srec_cat 유틸리티를 사용하여 부트 로더 및 펌웨어에 참가하고 조인 된 펌웨어를 업로드하는 것입니다.

srec_cat firmware.hex -Intel bootloader.hex -Intel -o combined-bootloader.hex -I 

그것은 어떻게 든 The Bootloader FAQ

의 3-4 페이지에 설명 된 것