Szybkość USBasp

Pytania dotyczące problemów ze zrozumieniem kart katalogowych, not aplikacyjnych dla mkrokontrolerów AVR firmy Atmel, rozwiązania układowe z zastosowaniem AVR.
Awatar użytkownika
xor
Newb
Newb
Posty: 71
Rejestracja: poniedziałek 05 wrz 2016, 21:44

Szybkość USBasp

Postautor: xor » czwartek 18 maja 2017, 15:11

Cześć!
Przy okazji grzebania w źródłach USBasp i avrdude natknąłem się na coś o czym dokumentacja mówi bardzo niewiele, a właściwie praktycznie nic. Chodzi o szybkość programatora.
Wiadomo, że w przypadku programowania nowych µC (z ustawionym fusem CKDIV8) należy programator zwolnić albo zworką albo programowo opcją -B. W przypadku procków z wyłączonym fusem CKDIV8 pozostawia się zwykle programator z domyślnym taktowaniem. Nikt natomiast nie mówi (czy raczej ja nigdy nie spotkałem sie z taką informacją) o możliwości przyspieszenia programatora.
Ze źródeł wynika, że domyślne taktowanie USBasp to 375kHz; można je przyspieszyć do 750kHz lub 1,5MHz, a więc dwu lub czterokrotnie. Z noty katalogowej µC wynika, że prędkość SPI przy programowaniu szeregowym musi być co najwyżej 1/4 F_CPU (taktowania µC) przy <12MHz albo co najwyżej 1/6 przy wyższym F_CPU (wg noty dla m328p). Tak więc maksymalną szybkość USBasp można stosować już przy F_CPU 6MHz.
Przyspieszenie USBasp można "włączyć" na dwa sposoby: Poprzez ustawienie innej szybkości domyślnej w pliku konfiguracyjnym (/etc/avrdude.conf, służy do tego parametr default_bitclock. Nie mam jasności czy ustawienia można dokonać tylko dla wybranego programatora czy jest to parametr globalny, trzeba by pogrzebać w źródłach), albo wspomnianą wcześniej opcją -B z odpowiednim parametrem. Jakim? Zanim odpowiem na to pytanie słówko na temat mechanizmu działania tej opcji. W opcji podaje się okres jednego bitu w µs, a więc np. dla -B 8 (często podawana wartość w przypadku programowania nowych procków) jest to 8µs czyli 125kHz. W przypadku USBasp jest to "sugerowana" prędkość taktowania, która jest porównywana ze zdefiniowanym zestawem taktowań, spośród którego wybierana jest najbliższa mniejsza wartość. Są to: 500 Hz, 1 kHz, 2 kHz, 4 kHz, 8 kHz, 16 kHz, 32 kHz, 93.75 kHz, 187.5 kHz, 375 kHz, 750 kHz, 1.5 MHz. A więc dla podanego wyżej ustawienia -B8 przyjęte zostanie taktowanie 93.75kHz. O czym się można przekonać wpisując w terminalu coś w tym stylu:

Kod: Zaznacz cały

slawek@zefir:~$ avrdude -v -v -c usbasp -p m328p -B 8

avrdude: Version 6.2
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/etc/avrdude.conf"
[ ... tu wycinam bo długie ...]
         Programmer Type : usbasp
         Description     : USBasp, http://www.fischl.de/usbasp/

avrdude: try to set SCK period to 8e-06 s (= 125000 Hz)
avrdude: set SCK frequency to 93750 Hz
avrdude: AVR device initialized and ready to accept instructions

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

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: safemode: hfuse reads as D9
avrdude: safemode: efuse reads as FF

avrdude: safemode: hfuse reads as D9
avrdude: safemode: efuse reads as FF
avrdude: safemode: Fuses OK (E:FF, H:D9, L:FF)

avrdude done.  Thank you.


Na koniec mała tabelka szybkości taktowania programatora przy różnych ustawieniach parametru bitclock:

USBasp       |       max wartość       |        przykładowa|        minimalna
clock        |         parametru        |         wartość       |        F_CPU
1.500.000     0,(6)       0.5       6.000.000
750.000        1,(3)       1       3.000.000
375.000        2,(6)       2       1.500.000
187.500        5,(3)       4       750.000
93.750       10,(6)       8       375.000
32.000       31,25       16       128.000
16.000       62,5       50       64.000
8.000       125       100       32.000
4.000       250       200       16.000
2.000       500       400       8.000
1.000       1000       800       4.000
500         2000       1500       2.000


Mała uwaga OT: przydała by się możliwość wstawiania poście tabelek, albo chociaż tabulatora.

Awatar użytkownika
xor
Newb
Newb
Posty: 71
Rejestracja: poniedziałek 05 wrz 2016, 21:44

Re: Szybkość USBasp

Postautor: xor » poniedziałek 22 maja 2017, 20:45

No to jeszcze mały teścik ładowania wsadu z ustawieniem domyślnym i ustawieniem maksymalnym. Atmega328P, 16MHz, wsad 21896 bajtów, pomiar komendą time, OS LInux.

Kod: Zaznacz cały

avr-size --format=avr --mcu=atmega328p ffs_sd_browser.elf
AVR Memory Usage
----------------
Device: atmega328p

Program:   21896 bytes (66.8% Full)
(.text + .data + .bootloader)


Ustawienie domyślne:

Kod: Zaznacz cały

$ time /usr/bin/avrdude -pm328p -cusbasp -Uflash:w:ffs_sd_browser.hex:a

avrdude: AVR device initialized and ready to accept instructions

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

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "ffs_sd_browser.hex"
avrdude: input file ffs_sd_browser.hex auto detected as Intel Hex
avrdude: writing flash (21896 bytes):

Writing | ################################################## | 100% 7.39s

avrdude: 21896 bytes of flash written
avrdude: verifying flash memory against ffs_sd_browser.hex:
avrdude: load data flash data from input file ffs_sd_browser.hex:
avrdude: input file ffs_sd_browser.hex auto detected as Intel Hex
avrdude: input file ffs_sd_browser.hex contains 21896 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 6.70s

avrdude: verifying ...
avrdude: 21896 bytes of flash verified

avrdude: safemode: Fuses OK (E:FF, H:D9, L:FF)

avrdude done.  Thank you.


real   0m14.695s
user   0m0.040s
sys   0m0.036s


Ustawienie max (-B 0.5):

Kod: Zaznacz cały

$ time /usr/bin/avrdude -pm328p -cusbasp -B0.5 -Uflash:w:ffs_sd_browser.hex:a

avrdude: set SCK frequency to 1500000 Hz
avrdude: AVR device initialized and ready to accept instructions

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

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: set SCK frequency to 1500000 Hz
avrdude: reading input file "ffs_sd_browser.hex"
avrdude: input file ffs_sd_browser.hex auto detected as Intel Hex
avrdude: writing flash (21896 bytes):

Writing | ################################################## | 100% 4.64s

avrdude: 21896 bytes of flash written
avrdude: verifying flash memory against ffs_sd_browser.hex:
avrdude: load data flash data from input file ffs_sd_browser.hex:
avrdude: input file ffs_sd_browser.hex auto detected as Intel Hex
avrdude: input file ffs_sd_browser.hex contains 21896 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 3.95s

avrdude: verifying ...
avrdude: 21896 bytes of flash verified

avrdude: safemode: Fuses OK (E:FF, H:D9, L:FF)

avrdude done.  Thank you.


real   0m9.159s
user   0m0.068s
sys   0m0.004s


czas wykonania w sekundach
_oper._\_bitclk_|__ default __|__ 1,5MHz__|
zapis...............|..... 7,39 .....|.... 4,64 .......|
weryfikacja......|..... 6,7 .......|.... 3,95 .......|
czas całkowity |.... 14,70 .....|..... 9,16 ......|

Czas ładowania trochę się skrócił chociaż niestety nie o 3/4 ;-)
Ale dobre i to :-)


Wróć do „AVR - problemy układowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość