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
User
User
Posty: 169
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:

Kod: Zaznacz cały

----------------------------------------------------
   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


Edit: poprawiony wygląd tabelki
Ostatnio zmieniony wtorek 11 sie 2020, 10:42 przez xor, łącznie zmieniany 1 raz.

Awatar użytkownika
xor
User
User
Posty: 169
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 :-)

Awatar użytkownika
WoodPaker
User
User
Posty: 136
Rejestracja: czwartek 17 wrz 2015, 19:23
Lokalizacja: USA
Kontaktowanie:

Re: Szybkość USBasp

Postautor: WoodPaker » poniedziałek 26 mar 2018, 06:14

I to się nazywa prawdziwe wykorzystanie matematki
Life is to short to eject USB safely

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: Szybkość USBasp

Postautor: Antystatyczny » wtorek 27 mar 2018, 01:45

xor pisze:przydała by się możliwość wstawiania poście tabelek


Można sobie poradzić w ten sposób:

Tabela częstotliwości SCK.PNG



Tabelkę wykonałem w programie Libre Office Writer, ale można użyć dowolnego innego edytora tekstu.

A co do tabulatora... Fakt, przydałby się dość często, ale o tym warto wspomnieć tutaj
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

SuperGość
Uber Geek
Uber Geek
Posty: 2346
Rejestracja: piątek 04 wrz 2015, 09:03

Re: Szybkość USBasp

Postautor: SuperGość » wtorek 27 mar 2018, 09:11

Kod: Zaznacz cały

   
   TY   TY   TY
   TY   TY   TY
   TY   TY   TY


albo skorzystać z [code]

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

Re: Szybkość USBasp

Postautor: xor » wtorek 27 mar 2018, 10:31

Dzięki Panowie, następnym razem będę pamiętał o tych metodach.

A co do tematu: na jednym z forów (ekhm) stosunkowo niedawno pojawił się dramatyczny post iż popularny program MkAvrCalculator nie trzyma granic dla poszczególnych zakresów. Nie podam tutaj linka, ale jakby ktoś się chciał zapoznać to temat brzmi "MkAvrCalc - błędne wartości SCK dla parametru -B" z 11.03.2018


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ść