У меня в CodeVision настроено с какого адреса писать бут. См скрин.
Господа интересует другое. Нормальная связка бута и программы для его прошивки.
То что я скачал содержит бут. В архиве есть файл со ссылкой на модифицированный прошивальщик. Ссылка битая.
Скачал я еще два архива откуда-то: MegaLoadU.rar и Bootloader.rar. В первом из них прошивальщик без кода бутлоадера. К сожалению с тем бутом, что у меня есть, не работает. Во втором код бутлоадера, и программой прошивальщика, которая не запускается.
А глядя на это:
CODE
void BootLoad(void)
{
// Send chip data to the programming software so that it knows
// how to format transmissions
putchar(DeviceID);
putchar(FlashSize);
putchar(BootSize);
putchar(PageSize);
// "!" means all ok and send the next data if there is more
putchar('!');
while(1)
{
PageAddress = (unsigned int)getchar() << 8; // Receive PageAddress high byte
PageAddress += getchar(); // Add PageAddress low byte
putchar(PageAddress);
if (PageAddress == 0xffff) ExecCode(); // The windows program sends this value when finished
#if defined _CHIP_ATMEGA128_
if (PageAddress >> 8) RAMPZ = 1;
else RAMPZ=0;
#endif
PageAddress = PageAddress << AddressLshift; //essentially the same as multiply by PageSize
if (GetPage()) //receive one page of data followed by a checksum byte and verify data
{
for (i=0;i<PageByte;i+=2) //fill temporary buffer in 2 byte chunks from PageBuffer
{
Pagedata=PageBuffer[i]+(PageBuffer[i+1]<<8);
while (SPMCR&1); //wait for spm complete
CurrentAddress=PageAddress+i;
spmcrval=1;
#asm
movw r30, r6 ;//move CurrentAddress to Z pointer
mov r1, r3 ;//move Pagedata MSB reg 1
mov r0, r2 ;//move Pagedata LSB reg 1
sts SpmcrAddr, r10 ;//move spmcrval to SPM control register
spm ;//store program memory
#endasm
}
while (SPMCR&1); //wait for spm complete
spmcrval=3; //erase page
#asm
movw r30, r4 ;//move PageAddress to Z pointer
sts SpmcrAddr, r10 ;//move spmcrval to SPM control register
spm ;//erase page
#endasm
while (SPMCR&1); //wait for spm complete
spmcrval=5; //write page
#asm
movw r30, r4 ;//move PageAddress to Z pointer
sts SpmcrAddr, r10 ;//move spmcrval to SPM control register
spm ;//write page
#endasm
while (SPMCR&1); //wait for spm complete
spmcrval=0x11; //enableRWW see mega8 datasheet for explanation
// P. 212 Section "Prevent reading the RWW section
// during self-programming
#asm
sts SpmcrAddr, r10 ;//move spmcrval to SPMCR
spm
#endasm
if (CheckFlash()) putchar('!'); //all ok, send next page
else putchar('@'); //there was an error, resend page
} //end if (GetPage())
else putchar('@'); //there was an error ,resend page
}
}
Возникает сильное желание написать прошивальщик самому.
У кого-нибудь есть РАБОЧАЯ связка бутлодера под CodeVision и утилиты для прошивки? Или информация о том, как залить прошивку через бутлоадер средствами CodeVision?
Сообщение отредактировал IgorKossak - Feb 5 2012, 09:44
Причина редактирования: [codebox]!!!