Forum: Mikrocontroller und Digitale Elektronik MSP430 - Programmieren von anderem MSP aus


von Emmina (Gast)


Lesenswert?

Hi Jungs,
Wer von Euch kann mir helfen.
Ich möchte einen MSP von anderem MSP programmieren. Ziel-MSP ist 2471.
Jetz hab ich das Problem, dass ich nur einen Code im Netz gefunden habe, 
der für eine Latte von MSPs gilt, aber nicht für die 2er-Family. Ist da 
grundsätzlich was anders?
Ich hab da vor kurzem hier was gelesen, der hatte mit dem Erasen 
Probleme. Ist bei mir genauso, aber darauf kann ich evtl verzichten. 
Aber wenn der Controller leer ist, sollte er schon wieder Data aufnehmen 
können, und daran scheiterts bei mir.
Ich mach wohl irgendwas falsch. aber mit WriteFlash(StartAdresse,Länge, 
Zeiger aufs Datenarray) wie in der SLAU320 von July2010 sollte man 
eigentlich nix falschmachen können. Oder seh ich das auch falsch!
Hoffentlich hat einer von Euch eine Idee... Ich steh da nämlich ganz 
schön aufm Schlauch.

Grüsse Eure
Emmina

von Stefan (Gast)


Lesenswert?

Emmina schrieb:
> Ich möchte einen MSP von anderem MSP programmieren.

Du musst Dir erstmal darüber klar werden, wie Du den MSP programmieren 
willst:
1.) 4-wire JTAG
2.) 2-wire Spy-By-Wire
3.) BSL (im MSP integriert)
4.) BSL (selbst gestrickt)

von Sebastian (Gast)


Lesenswert?

Der 2470 wird über JTAG programmiert, wie andere "große" MSP auch. Ich 
denke, mit dem Ausschluß der 2-er Family sind eher die MSP430F2001 bis 
2013 gemeint, die aufgrund geringer Pinanzahl nur über SBW programmiert 
werden.
...oder ist das Code-Sample für BSL? Das sollte auch gehen.

von Stefan (Gast)


Lesenswert?


von Christian R. (supachris)


Lesenswert?

Mach das doch über den BSL; der ist in jedem MSP430 drin. Das geht sehr 
einfach über normale serielle Schnittstelle. Wir nutzen das auch oft.

von Emmina (Gast)


Lesenswert?

Hi Leute,
Übern BSL ist es derzeit nicht möglich, hab nur die 4 JTAG Signale auf 
dem Board zur Verfügung.
Beim SLAA0149 ist die SW auf den MSPxxx54xx geschrieben, das ist schon 
sehr kompliziert, auch wiel der Autor da offenbar die JATGs 
richtungsabhängig hat.
Ich hab aber einen 2er MSP und keine Richtungsumschaltungen.
ich hab auch was von WEspezial gelesen?
Falls Du mal wieder reinschaust: Hast Du schon eine Lösung für Dein 
Problem, WEspezial? (Dürfte ähnliches Prioblem sein, schätz ich...)

So viel zwischendurch...

Sorry, ich frickel weiter

Emmina

von Stefan (Gast)


Lesenswert?

Emmina schrieb:
> Beim SLAA0149 ist die SW auf den MSPxxx54xx geschrieben

Das sehe ich nicht so!
Es gibt zwei Versionen für MSP430 und für MSP430X

von Emmina (Gast)


Lesenswert?

Hi Leute,
Hab's so hingefummelt, das der Code richtig erased und reingeschrieben 
wird.
Komisch ist allerdings, dass der Ziel-Controller noch einmal eine 
Initialisierung braucht und das Verify geht noch nicht. Warum? bisher 
noch leinen Schimmer? Aber man (frau) tut was man kann...
wenn's jemanden interessiert, immerhin läuft es mit 16MHz (ca. die 
Hälfte der Zeit beim Write):

...
InitTarget();                        // Target Board initialisieren
if (!GetDevice())                     // Globale DEVICE ID holen
{
    ReleaseTarget();
    return STATUS_ERROR;
}

/* hier wird das gesamte Target-Flash gelöscht*/
  EraseFLASH(ERASE_MAIN, 0x4000);       // Main-Flash löschen

BCSCTL1 = CALBC1_16MHZ;    //Kalibrierwert für 16MHz einladen
DCOCTL = CALDCO_16MHZ;     //normalerweise läuft das ganze mit 8MHz

JTAGOUT  = TDI | TMS | TCK | TCLK | TDICTRL1 ;
JTAGDIR  = TDI | TMS | TCK | TCLK | TDICTRL1 | TDICTRL2 | RST ;
NOP();_NOP();_NOP();  // Settle MOS relays, target capacitor
JTAGOUT |= TGTRST;  //we 24.09.2010
_NOP();_NOP();_NOP();
JTAGOUT &= ~TGTRST;  //we 24.09.2010

if (!WriteFLASHallSections(&TstCodeArray[0]))
                           //Write/Verify(PSA) all Flash sections.
{
    ReleaseTarget();
    return STATUS_ERROR;
}
BCSCTL1 = CALBC1_8MHZ;
DCOCTL = CALDCO_8MHZ;

ReleaseDevice(V_RESET);     // Perform Reset, release CPU from JTAG 
control
Delay(3000);                // Target application blinks for 3.0s
ReleaseTarget();            // Release Target Board from power
return(STATUS_OK);  // STATUS_OK = 1
...

Jetzt habe ich das Problem, dass der Verify nicht funktioniert:

Das läuft in der folgenden routine:

word WriteFLASHallSections(word *CodeArray)
{
  word s;      // Number of sections
  word p;      // Pointer to data

  for (s = CodeArray[0], p = 1; s > 0; s--)
  {
                                // Write/Verify(PSA) one FLASH section
    WriteFLASH(CodeArray[p], CodeArray[p+1], &CodeArray[p+2]);
    if (!VerifyMem(CodeArray[p], CodeArray[p+1], &CodeArray[p+2]))
      return(STATUS_ERROR);
                                // pointer of next section =
                                //    old pointer + 2 + length
                                //    of actual section
    p += CodeArray[p+1] + 2;
  }
  return(STATUS_OK);
}

Ich hab gelesen, dass da ein Pseudo Signature Analysis Code abgearbeitet 
wird. Dazu steht natürlich nix im Manual. Und beim Abarbeiten des 
Verify-codes entsteht dann ein Error...

So viel zum Zwischenstand..

Grüßchen

Emmina

von Emmina (Gast)


Lesenswert?

Stefan schrieb:
> Emmina schrieb:
>> Beim SLAA0149 ist die SW auf den MSPxxx54xx geschrieben
>
> Das sehe ich nicht so!
> Es gibt zwei Versionen für MSP430 und für MSP430X

Hallo Stefan,

Danke Dir Herzlich für Deinen Beitrag, hab's jetzt endlich 
umgeschrieben, dass er löscht und auch schreibt. Blos beim EraseCheck 
und Verify, ob die Daten richtig drin sind, macht er irgendwie Scheiß. 
Da kommen andere Checksummen raus: PSA_CRC is nicht gleich TDOWord. 
Weist Du da Hilfe????

notleident...

Emmina

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.