Fórum témák

» Több friss téma
Cikkek » AVR-Doper, USB-s ISP programozó
AVR-Doper, USB-s ISP programozó
Szerző: Topi, idő: Aug 24, 2008, Olvasva: 123076, Oldal olvasási idő: kb. 5 perc
Lapozás: OK   10 / 11

Az alábbi cikket Székvölgyi Pétertől (szekipepe) kaptam, melyben megosztaná mindenkivel a programozó használatát BSD alapú rendszereken. Olvassátok haszonnal Péter tollából az útmutatót. Ez úton is köszönjük.

Nem nagyon találtam cikket a Topi féle AVR égető használatáról Linux/*BSD alatt és gondoltam összedobok egyet gyorsba. Előre is: a cikk a teljesség igénye nélkül íródott.
Az avrdude sokkal többre is képes! A rendszer amin teszteltem a dolgot egy FreeBSD 7.2-STABLE.

A chip amit igazgattam egy AVR AtMega8-16PU. 

Szerencsénkre a ports fában megtalálható minden amire szükségünk lehet. Nálam a következő csomagok kerültek telepítésre: 

avr-binutils-2.18_4 GNU binutils for Atmel AVR 8-bit RISC cross-development
avr-gcc-4.2.2_2     FSF GCC 4.x for Atmel AVR 8-bit RISC cross-development
avr-libc-1.6.1,1    A C and math library for the Atmel AVR controller family
avrdude-5.6_1       Program for programming the on-chip memory of Atmel AVR CPU
simulavr-0.1.2_13   A simulator for AVR microcontrollers

( Linuxon megtalálhatóak ezek a csomagok ugyanúgy. ) 

Egy része a program megírásához/debuggoláshoz kell. Maga az avrdude programra van csak szükségünk a flash írására és a többire az avr-en.

A programozót nem HID kompatibilis módban használtam. Így be kellett töltenem az úgynevezett umodem kernel modult:

kldload umodem 

Enélkül a következő sor jelent meg a rendszer üzenetek között ( dmesg konzol parancs )

ugen0: <obdev.at Hobbielektronika.hu: AVR-Doper, class 2/0, rev 1.10/1.00, addr 2> on uhub3

Így sajnos használhatatlan az eszköz. 

Ha már be volt töltve a modul csatlakoztatás előtt:

ucom0: <obdev.at Hobbielektronika.hu: AVR-Doper, class 2/0, rev 1.10/1.00, addr 2> on uhub3
ucom0: iclass 2/2
ucom0: data interface 1, has CM over data, has no break 

Ami számunkra lényeges az-az ucom[0-X]-ből a szám. Mivel ezzel azonosítható a rendszer milyen számot adott is az írónak és milyen néven lehet elérni a /dev alatt. Ebben az esetben 0-a volt vagyis a /dev/cuaU0 alatt érhető el az eszköz. 

( Linuxon ebben a módban a ttyACM[0-x] alatt jelenik meg az eszköz. Ha a kernelbe bele van fordítva az ACM driver akkor gond nélkül működni fog. Későbbiekben amikor /dev/cuaU0-ra hivatkozok mindenki cserélje ki a neki megfelelőre. )

( A linux/*BSD minden dev alatt file-ra jogokkal állít be automatikusan a rendszer, ezek beállítására én itt nem térek ki külön. Én speciel "sudo"-t használok az avrdude indításakor. Ez a program megemeli a privilégium szintjét a mögötte álló programnak és futtatja az utána megadott paraméterekkel. )

És akkor lássuk az avrdude paraméter listáját rövid magyarázattal:

( Simán elindítjuk az avrdude programot kiírja a konzolra. )

Usage: avrdude [options]
Options:
 -p <partno>                Required. Specify AVR device.
 -b <baudrate>              Override RS-232 baud rate.
 -B <bitclock>              Specify JTAG/STK500v2 bit clock period (us).
 -C <config-file>           Specify location of configuration file.
 -c <programmer>            Specify programmer type.
 -D                         Disable auto erase for flash memory
 -i <delay>                 ISP Clock Delay [in microseconds]
 -P <port>                  Specify connection port.
 -F                         Override invalid signature check.
 -e                         Perform a chip erase.
 -O                         Perform RC oscillator calibration (see AVR053).
 -U <memtype>:r|w|v:<filename>[:format]
                             Memory operation specification.
                             Multiple -U options are allowed, each request
                             is performed in the order specified.
 -n                         Do not write anything to the device.
 -V                         Do not verify.
 -u                         Disable safemode, default when running from a script.
 -s                         Silent safemode operation, will not ask you if
                             fuses should be changed back.
 -t                         Enter terminal mode.
 -E <exitspec>[,<exitspec>] List programmer exit specifications.
 -x <extended_param>        Pass <extended_param> to programmer.
 -y                         Count # erase cycles in EEPROM.
 -Y <number>                Initialize erase cycle # in EEPROM.
 -v                         Verbose output. -v -v for more.
 -q                         Quell progress output. -q -q for less.
 -?                         Display this usage.

avrdude project: http://savannah.nongnu.org/projects/avrdude 

Kapcsolók ( nem térek ki az összesre bővebb információt található az avrdude man oldalán ): 

-p : Ezzel a kapcsolóval lehet meghatározni milyen processzort is akarunk használni. Az avrdude mikor elkezdjük használni visszaellenőrzi ténylegesen ez a processzor van-e rákötve az íróra. ( az én esetemben atmega8 ) 

-F : Minden AVR cpu típusnak van egy signatúrája. Ezzel azonosítja a programozni kívánt processzort a rendszer.

Ha ez nem megfelelő akkor az AVR védése érdekében az írási folyamatot el sem kezdi a rendszer, ha ennek ellenére szeretnénk végrehajtani ez a kapcsoló segíthet benne. ( Főként AtTiny45-ös processzor használtam ezt az opciót. )

-b : Az rs-232 sebességét meg kívánjuk határozni amivel kommunikál a gép az íróval itt tehetjük meg. (Néha előfordult, hogy a rendszer default sebességen túl gyorsan próbálta az írót elérni, emiatt én itt static 9600-at használtam, mivel így volt a legstabilabb. Több mint 100 írásból eddig egyszer sem volt gondom vele. ) 

-c : A programozó típusát lehet meghatározni vele. Az én esetben stk500v2. ( További opcionális írókat találhattok a man oldalon. ) 

-P : soros port elérése a /dev alatt. Az én esetemben /dev/cuad0

-U <memtype>:r|w|v:<filename>[:format]   : Mit is szeretnénk a processzorral csinálni, részletek később.

-v : Verbose mode, hogy sokkal több állapotjelzést adjon. Ha kétszer adunk kétszer "-v"-t akkor adja a legtöbb információt. Hiba esetén ez a kimenet segítséget adhat a megoldás keresésében. 

Én most két dolgot írok le mint is lehet csinálni a processzorral:
- flash írása ( logikusan következik, hogy lehet olvasni )
- fuse bit-ek állítása 

Flash írása:

A hexa file neve ledvez az esetemben ennek az égetése:

avrdude -p atmega8 -F -b 9600 -c stk500v2 -P /dev/cuaU0 -U flash:w:ledvez

Kírás folyamata:

avrdude: AVR device initialized and ready to accept instructions

 Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e9307

avrdude: reading input file "ledvez"

avrdude: input file ledvez auto detected as Intel Hex

avrdude: writing flash (528 bytes):

Writing | ################################################## | 100% 0.82s

avrdude: 528 bytes of flash written

avrdude: verifying flash memory against ledvez:

avrdude: load data flash data from input file ledvez:

avrdude: input file ledvez auto detected as Intel Hex

avrdude: input file ledvez contains 528 bytes

avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.72s

avrdude: verifying ...

avrdude: 528 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done. Thank you.


És szépen ki is írja a flashre a programot.

És végül maga a fuse bit lekérése, módosítása:

avrdude -v -p atmega8 -F -b 9600 -c stk500v2 -P /dev/cuaU0 -U hfuse:r:high.txt:i -U lfuse:r:low.txt:i

Kimenete:

avrdude: Version 5.6, compiled on May 3 2009 at 15:27:06

         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         System wide configuration file is "/usr/local/etc/avrdude.conf"
         User configuration file is "/home/ghostp/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping
         Using Port                    : /dev/cuaU1
         Using Programmer              : stk500v2
         Overriding Baud Rate          : 9600
         AVR Part                      : ATMEGA8
         Chip Erase delay              : 10000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200

         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

 

                                  Block Poll               Page                       Polled

           Memory Type Mode Delay Size Indx Paged Size   Size #Pages MinW MaxW   ReadBack

           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------

           eeprom         4    20   128    0 no        512    0      0 9000 9000 0xff 0xff

           flash         33    10    64    0 yes      8192   64    128 4500 4500 0xff 0x00

           lfuse          0     0     0    0 no          1    0      0 2000 2000 0x00 0x00

           hfuse          0     0     0    0 no          1    0      0 2000 2000 0x00 0x00

           lock           0     0     0    0 no          1    0      0 2000 2000 0x00 0x00

           calibration    0     0     0    0 no          4    0      0     0     0 0x00 0x00

           signature      0     0    0    0 no          3    0      0     0     0 0x00 0x00

 

         Programmer Type : STK500V2
         Description     : Atmel STK500 Version 2.x firmware
         Programmer Model: STK500
         Hardware Version: 1
         Firmware Version Master : 2.04
         Topcard         : STK501
         Vtarget         : 4.9 V
         SCK period      : 2.2 us
         Varef           : 0.0 V
         Oscillator      : 1.229 MHz

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e9307
avrdude: safemode: lfuse reads as E3
avrdude: safemode: hfuse reads as D9
avrdude: reading hfuse memory: 

Reading | ################################################## | 100% 0.01s

avrdude: writing output file "high.txt"
avrdude: reading lfuse memory: 

Reading | ################################################## | 100% 0.01s

avrdude: writing output file "low.txt"
avrdude: safemode: lfuse reads as E3
avrdude: safemode: hfuse reads as D9
avrdude: safemode: Fuses OK 

Ebben az esetben a hfuse és lfuse-t kiolvassuk a prociból és eltároljuk két külön fileban.

Részletesebb magyarázat melyik bit mit jelent megtaláljátok a proci leírásában. 

Fuse bit alsó részének módosítása:

avrdude -v -p atmega8 -F -c stk500v2 -P /dev/cuaU0 -U lfuse:w:0xE2:m

A futtatás kimenete:

avrdude: Version 5.6, compiled on May 3 2009 at 15:27:06

         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         System wide configuration file is "/usr/local/etc/avrdude.conf"
         User configuration file is "/home/ghostp/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping 

         Using Port                    : /dev/cuaU1
         Using Programmer              : stk500v2
         AVR Part                      : ATMEGA8
         Chip Erase delay              : 10000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 : 

                                  Block Poll               Page                       Polled

           Memory Type Mode Delay Size Indx Paged Size   Size #Pages MinW MaxW   ReadBack

           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------

           eeprom         4    20   128    0 no        512    0      0 9000 9000 0xff 0xff

           flash         33    10    64    0 yes      8192   64    128 4500 4500 0xff 0x00

           lfuse          0     0     0    0 no          1    0      0 2000 2000 0x00 0x00

           hfuse          0     0     0    0 no          1    0      0 2000 2000 0x00 0x00

           lock           0     0     0    0 no          1    0     0 2000 2000 0x00 0x00

           calibration    0     0     0    0 no          4    0      0     0     0 0x00 0x00

           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

          Programmer Type : STK500V2
         Description     : Atmel STK500 Version 2.x firmware
         Programmer Model: STK500
         Hardware Version: 1
         Firmware Version Master : 2.04
         Topcard         : STK501
         Vtarget         : 4.9 V
         SCK period      : 2.2 us
         Varef           : 0.0 V
         Oscillator      : 1.229 MHz 

avrdude: AVR device initialized and ready to accept instructions 

Reading | ################################################## | 100% 0.02s 

avrdude: Device signature = 0x1e9307
avrdude: safemode: lfuse reads as E3
avrdude: safemode: hfuse reads as D9
avrdude: reading input file "0xE2"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xE2:
avrdude: load data lfuse data from input file 0xE2:
avrdude: input file 0xE2 contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified
avrdude: safemode: lfuse reads as E2
avrdude: safemode: hfuse reads as D9
avrdude: safemode: Fuses OK 

avrdude done. Thank you.

VIGYÁZAT: a fuse bit átállítása a proci használhatatlanná tételét okozza, nagyon óvatosan bánjunk ezzel az opcióval. Nekem is egy procim bánja a próbálgatásokat. 

Mindenkinek sok sikert a használatban!

Székvölgyi Péter

-- Az eredeti cikk folytatódik a következő oldalon.


A cikk még nem ért véget, lapozz!
Következő: »»   10 / 11
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem