piątek, 1 kwietnia 2011

PDO i PDI zamiast MISO i MOSI, czyli niespodzianka AVR'ów


Autor: Dondu

Artykuł jest fragmentem cyklu: Problemy z zaprogramowaniem


Przesiadając się z mniejszych mikrokontrolerów AVR firmy Atmel na nieco większe można, a wręcz "obowiązkowo" spotykać się z niespodzianką:

brabo
wg datasheet: MOSI = PB2, MISO = PB3, a tak na prawdę jest: MOSI = PE0, MISO = PE1.

Nie, nie ma żadnej pomyłki w datasheet :-)

Niespodzianką jest fakt, iż podczas programowania szeregowego ISP, zamiast pinów MISO i MOSI do programowania używane są piny PDO i PDI.

PDI - Programming Data Input
PDO - Programming Data Output

Przykładem jest mikrokontroler ATmega64.

ATmega64 - programowanie odbywa za pomocą pinów PDO i PDI, a nie MISO i MOSI.


ATmega64 - piny programowania to PDI oraz PDO, a nie MISO i MOSI.
Rys. 1.4 ATmega64

A żeby było jeszcze ciekawiej, to można się nadziać  (tak jak ja, gdy podpowiadałem kol. Ilidan18) na przypadek, w którym w tym samym datasheet dla mikrokontrolerów tej samej rodziny, jedne mikrokontrolery programuje się za pomocą PDI i PDO, a drugie za pomocą MOSI i MISO.

Takim przykładem jest rodzina ATmega640/1280/1281/2560/2561, gdzie:



Co zrobić?
Biorąc nieznany Ci typ mikrokontrolera zawsze sprawdź w jego datasheet'cie, które piny służą do jego programowania.



Zobacz pozostałe przypadki

2 komentarze:

  1. Tydzień kombinowałem czemu Atmega64A nie chce mi się programować, bo "przecież MISO i MOSI było podłączone jak trzeba"... thx za artykuł, rozjaśnia wiele kwestii. ;)

    OdpowiedzUsuń
  2. Aaa, i jeszcze jedno - ma autor rację, że czytanie datasheet to rzecz święta, ale... chyba wiele osób ze mną się zgodzi, że mimo wszystko pewne rzeczy mogą umknąć. Niestety. W końcu datasheet'y to to średnio jakieś 500 stron, a w poszczególnych działach nadal pewne informacje mogą umknąć w gąszczu innych... ;) Albo tylko ja mam problemy z pomijaniem informacji??? :P

    OdpowiedzUsuń