Programowanie procka ATMEGA128 przy użyciu protokołu STK500

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
marogo
-
Posty: 1
Rejestracja: 29 lis 2009, 3:20
Lokalizacja: Gdańsk

Programowanie procka ATMEGA128 przy użyciu protokołu STK500

Post autor: marogo » 29 lis 2009, 3:26

Witam:)

Pytanie do znawców protokołu STK500. Oto fragment kodu w Pascalu tworzącego strukturę zapytania dla 3 komend (wejście w tryb programowania oraz odczyt i zapis FuseBit-ów) wysyłanych po RS-ie do procesora ATMEGA128.

Moje pytanie: co oznaczają parametry "cmd1" do "cmd4" w tym protokole w komendzie CMD_ENTER_PROGMODE_ISP i "cmd1" do "cmd3" w pozostałych komendach i dlaczego są przypisane akurat takie wartości?

Nie doszukałem się tej informacji w dokumentacji procesora: ATMEGA128 ani w dokumentacji protokołu STK500: STK500

Proszę o w miarę możliwości łopatologiczne wyjaśnienie i gdzie szukać informacji na ten temat również dla innych komend?

Jakie powinny być wartości tych parametrów dla innych procków, np. AT90CAN128?

Kod: Zaznacz cały


//=============== CMD_ENTER_PROGMODE_ISP ============

MessageArr[1]:= $1B;          // StartMessage
MessageArr[2]:= MessageID;    // MessageID
MessageArr[3]:= $00;          // MSB Data Length
MessageArr[4]:= $0C;        // LSB Data Length
MessageArr[5]:= $0E;          // TOKEN
MessageArr[6]:= CMD_ID;       // Command ID
MessageArr[7]:= $C8;        // timeout
MessageArr[8]:= $64;        // stabDelay
MessageArr[9]:= $19;        // cmdexeDelay
MessageArr[10]:= $20;       // synchLoops
MessageArr[11]:= $00;       // byteDelay
MessageArr[12]:= $53;       // pollValue
MessageArr[13]:= $03;       // pollIndex

MessageArr[14]:= $AC;       // cmd1  ??
MessageArr[15]:= $53;       // cmd2  ??
MessageArr[16]:= $00;       // cmd3  ??
MessageArr[17]:= $00;       // cmd4  ??


//============ CMD_PROGRAM_FUSE_ISP =================

 MessageArr[1]:= $1B;          // StartMessage
 MessageArr[2]:= MessageID;    // MessageID
 MessageArr[3]:= $00;          // MSB Data Length
 MessageArr[4]:= $05;        // LSB Data Length
 MessageArr[5]:= $0E;          // TOKEN
 MessageArr[6]:= CMD_ID;       // Command ID
 if (Param=1) then
  begin
    MessageArr[7]:= $AC;      // cmd1
    MessageArr[8]:= $A0;      // cmd2 ??
    MessageArr[9]:= $00;      // cmd3 ??
    MessageArr[10]:= $3F;     // cmd4 (Fuse LSB)
  end
  else if (Param=2) then
  begin
    MessageArr[7]:= $AC;      // cmd1  ??
    MessageArr[8]:= $A8;      // cmd2  ??
    MessageArr[9]:= $00;      // cmd3  ??
    MessageArr[10]:= $C8;     // cmd4 (Fuse MSB)
  end
  else if (Param=3) then
  begin
    MessageArr[7]:= $AC;      // cmd1  ??
    MessageArr[8]:= $A4;      // cmd2  ??
    MessageArr[9]:= $00;      // cmd3  ??
    MessageArr[10]:= $FF;     // cmd4 (Fuse EXT)
  end

//============ CMD_READ_FUSE_ISP ===================

 MessageArr[1]:= $1B;          // StartMessage
 MessageArr[2]:= MessageID;    // MessageID
 MessageArr[3]:= $00;          // MSB Data Length
 MessageArr[4]:= $06;        // LSB Data Length
 MessageArr[5]:= $0E;          // TOKEN
 MessageArr[6]:= CMD_ID;       // Command ID
 MessageArr[7]:= $04;        // RetAddr
 if (Param=1) then
   begin
     MessageArr[8]:= $50;        // cmd1 ??
     MessageArr[9]:= $00;        // cmd2 ??
     MessageArr[10]:= $00;       // cmd3 ??
     MessageArr[11]:= $00;       // cmd4 (Fuse LSB) 
   end
   else if (Param=2) then
   begin
     MessageArr[8]:= $58;        // cmd1 ??
     MessageArr[9]:= $08;        // cmd2 ??
     MessageArr[10]:= $00;       // cmd3 ??
     MessageArr[11]:= $00;       // cmd4 (Fuse MSB)
   end
   else if (Param=3) then
   begin
     MessageArr[8]:= $50;        // cmd1  ??
     MessageArr[9]:= $08;        // cmd2  ??
     MessageArr[10]:= $00;       // cmd3  ??
     MessageArr[11]:= $00;       // cmd4 (Fuse EXT)
   end;

Pzdr.
Marogo

ODPOWIEDZ