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