내가이 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
에 (사용)BOOTSZ
을00
(4 096 단어 부트 로더 섹션)WDTON
세트) (장애인1
-BODLEVEL
설정101
(VBOTmin=2.5V
에 나는)Vcc
이 규제되고 있지만100
이 더 나을 것으로 생각하고 정전을 제외하고 다양해서는 안하지만
답장을 보내 주셔서 감사합니다.