NutOS TCP/IP bootloader MMnet01
2010-11-07 19:44
| Categories: Užrašai
Prisireikė MMnet01 moduliui (atmega128, RTL8019 ir 64k RAM) turėti bootloaderi kuris veiktų per tinklą. Kaip dažnai būna tinkamų sprendimų internete neradau. Teko rašyti savo. Jei atvirai – pradžia kažkieno buvo, tačiau originalas neveikė.
Deja neberandu iš kur parsisiunčiau, o pačiame kode nepaminėta. Kolkas source nerodysiu (paremtas pagaliais), tačiau hex failą galima atsisųsti.
Trumpai, kaip paleisti:
- Paleisti TFTP serverį adresu 192.168.0.103. Tam labai gerai tinka šis FTFP/DHCP serveris.
- Sukonfigūruoti šį serverį, kad šakniniame kataloge būtų firmware.bin failas.
- Programuojant reikia pakeisti fuses, tai galima padaryti:
avrdude -c stk500v2 -p m128 -P com5 -u -y -U hfuse:w:0x80:m -U flash:w:boot.hex
- Šiokią tokią informaciją kas vyksta galima pamatyti UART1 porte 19200bps greičiu.
- Jei bootloaderis randa nustatytą failą TFTP serveryje, jį ir įrašo į savo flash atmintį. Įrašęs arba neradęs peršoka į programos pradžią.
Įrankiai, kurių prireiks rašant savo programas
- ethernut-4.9.9 (lokali kopija)
- WinAVR-20100110-install (lokali kopija)
Papildomi įrankiai
- AvrLIB bin, src (lokalios kopijos bin, src) – retai kada galima parsisiųsti, deja šiuo metu neturiu atsisiuntęs.
- AvrLibC (lokali kopija)
Naudingos Avrdude komandos
- burnflash
avrdude -c stk500v2 -p m128 -P com5 -e -U flash:w:firmware.hex
- burn flash and increment erase counter
avrdude -c stk500v2 -p m128 -P com5 -e -y -U flash:w:firmware.hex
- erase eeprom
avrdude -c stk500v2 -p m128 -P com5 -u -U eeprom:w:blank_eeprom.hex
- get fuses
avrdude -c stk500v2 -p m128 -P com5 -U efuse:r:_efuse.txt:b -U lfuse:r:_lfuse.txt:b -U hfuse:r:_hfuse.txt:b -U signature:r:_signature.txt:b -U lock:r:_lock.txt:b
- lock chip
avrdude -c stk500v2 -p m128 -P com5 -u -U lock:w:0x00:m
- readflash and eeprom
avrdude -c stk500v2 -p m128 -P com5 -U flash:r:flash.hex:i -U eeprom:r:eeprom.hex:i
- set erase cycles = 0
avrdude -c stk500v2 -p m128 -P com5 -u -Y 0
Viskas skamba kaip kinieciu kalba :D
Darbas toks :)