2013年3月23日土曜日

AVRマイコン書き込み速度


新しいAtmega328pにusbaspでslow設定をし忘れて書き込みをしようとしてハマったので、usbaspのFWとavrdudeのソースコードをどうなっているのか調べてみました。

AVRのISP書き込み時はfoscが12MHz以下の場合、SCKの波形はHigh区間2x 1/fosc,Low区間2x1/foscなので4x1/foscが最小パルス幅になります。
foscが12MHz以上の場合はそれぞれ3x1/foscなので6x1/foscになります。
Atmega328pは初期状態がfosc=1MHzで内部RC発信を使用する場合最高で8HMzですので4x1/foscで計算すればOKです。
最初のLowFuseのCKDIV8を書き込むまでは1MHzなのでSCKは最速で250KHz=4us、LowFuse書き込み後は8MHzの1/4で最速2MHz=0.5usになります。

usbaspのFWのChangelog.txtを見ると2009-02-28(v1.3)で
- added support for software control of ISP speed (based on patch by Jurgis Brigmanis)
とあるのでavrdude-5.11のソースコードを確認するとusbaspで-BオプションでSCKの速度を設定できるようです。(単位はus)実際には適当な分周比になるので指定速度より遅い最速クロックが選択されます。
最初のFuse書き込み時は
avrdude -c usbasp -p atmega328p -B 4 -U efuse:w:0b00000101:m -U hfuse:w:0b11011111:m -U lfuse:w:0b11100010:m
flashの書き込み時は
avrdude -c usbasp -p atmega328p -B 0.5 -U flash:w:main.hex:i
でそれぞれ187.5kHz=5.3usと1.5MHz=0.667usが選択されます。

確認したところAVRISP mkIIも同じ設定で行けます。

0 件のコメント:

コメントを投稿