Bootloader Version

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Pluto25 wrote:


      War das Problem nicht das die Adresse nicht bekannt ist ?
      Adresse ist bekannt. hab jetzt den originalen Bootloader von MSC genommen. Der beginnt bei FC00.

      Source Code

      1. #elseif Loaderchip = 1284
      2. $loader = $fc00
      3. Const Maxwordbit = 7
      4. Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 ,
      5. Databits = 8 , Clockpol = 0



      Auslesen tue ich mit

      Source Code

      1. Local X As Dword : X = 0
      2. Local Y As Dword : Y = 0
      3. Local Element As Byte
      4. For X = 64512 To 64542
      5. Waitms 50
      6. Element = Cpeek(hex(x))
      7. Print#pc , "@" ; ">" ; Hex(x) ; "-" ; Hex(element) ; "<" ; Chr(13)
      8. Reset Watchdog
      9. Next X
      10. Exit Sub
      Display All
      Mein Ergebnis ist

      Source Code

      1. >0000FC00-0C<
      2. >0000FC01-91<
      3. >0000FC02-8D<
      4. >0000FC03-E6<
      5. >0000FC04-75<
      6. >0000FC05-11<
      7. >0000FC06-EB<
      8. >0000FC07-AB<
      9. >0000FC08-80<
      10. >0000FC09-11<
      11. >0000FC0A-6F<
      12. >0000FC0B-04<
      13. >0000FC0C-B2<
      14. >0000FC0D-66<
      15. >0000FC0E-A8<
      16. >0000FC0F-B9<
      17. >0000FC10-AA<
      18. >0000FC11-0C<
      19. >0000FC12-E9<
      20. >0000FC13-80<
      21. >0000FC14-67<
      22. >0000FC15-53<
      23. >0000FC16-B9<
      24. >0000FC17-A8<
      25. >0000FC18-E2<
      26. >0000FC19-8C<
      27. >0000FC1A-00<
      28. >0000FC1B-0C<
      29. >0000FC1C-AC<
      30. >0000FC1D-8C<
      31. >0000FC1E-83<
      Display All
      Wenn ich den Flash auslese bekomme ich


      Source Code

      1. 7800 8F EF 8D BF C8 ED E0 EA ï¿Èíàê
      2. 7808 4E 2E 88 E0 8E BF D8 E0 N.ˆàŽ¿Øà
      3. 7810 F8 E0 5F 2E A8 95 84 B7 øà_.¨•„·
      4. 7818 08 2E 87 7F 84 BF 88 E1 ..‡„¿ˆá
      Ich glaube ich lese die falschen Adressen. allerdings liefert eine Suche in der BIN nach meinen ersten drei byte (0C 91 8D) auch kein Ergebnis. Ich hab keine Ahnung was ich da einlese...
    • Wieso versuchst du es nicht mal nach dem Vorschlag von mir?
      Im Bootloader die Adresse des Labels mittels Restor lesen vor dem Verlassen des Bootloaders.

      Im Hauptprogramm brauchst du dann nur noch Read myString machen.

      Die Adressen-Berechnung kannst du dem Compiler überlassen.

      Zudem suchst du am Anfang deines Bootloaders. Dein "Irengwas" steht aber am Ende!
    • Pac-Man wrote:

      Wenn ich den Flash auslese bekomme ich
      Und weshalb liest Du den Flash nicht bei FC00 ?
      Wenn ich Sete 13 mit 27 vergleiche ist es auch so das die ersten Zeichen nicht dieselben sind.

      PS Der Chip ist zu groß . Beim Tiny13 steht unter FC00 das gleich wie unter 7800 :D

      Pac-Man wrote:

      Cpeek(hex(x))
      lass das Hex() mal weg. Bascom mag nicht mehrere Operationen in einer Zeile. Auch wenn es keine Fehlermeldung gibt weiß man nicht was darauskommt?
      Z.B. x=17 : Hex(x)= "11"
      Ein String in einer Funktion die ein Word erwachtet.
      Die ließt sonstwas. Vielleicht $3131 = 12593

      Mitch64 wrote:

      Dein "Irengwas" steht aber am Ende!
      Bestimmt? Konstanten und Label such ich meißt vergeblich bzw finde sie sonstwo.
      Die letzte string="Hier ist fast Ende" Finde ich dann auch tatsächlich fast am Ende.
      Jedoch wird er vermutilch gar nichts finden wenn es verschlüsselt wird ?

      The post was edited 2 times, last by Pluto25 ().

    • Mitch64 wrote:

      Wieso versuchst du es nicht mal nach dem Vorschlag von mir?
      Ich bin erst bei Beitrag 14. Wenn ich das gerafft habe versuche ich mich am nächsten.


      Pluto25 wrote:

      Und weshalb liest Du den Flash nicht bei FC00 ?
      Ich lasse mir doch die Adresse anzeigen und die beginnt doch bei FC00 oder ist das Murks?

      Pac-Man wrote:

      >0000FC00-0C<
      >0000FC01-91<
      >0000FC02-8D<
      >0000FC03-E6<


      Pluto25 wrote:

      PS Der Chip ist zu groß . Beim Tiny13 steht unter FC00 das gleich wie unter 7800
      Das verstehe ich jetzt nicht, sorry.
    • Bei Post #21 sehe ich aber einen Mega 1284. Bei FC00 läuft da noch nix über.

      Im übrigen habe ich es mit meinen Grundkenntnissen geschafft, den Sampelcode "Bootloader.bas" mit meinen Daten (Version und einen String) zu erweitern und die Adresse auf diese Datazeilen per Restore vor dem Verlassen des Bootloaders für das Anwendungsprogramm zu hinterlassen.

      Im Bootloader wurde am Ende des Codes 2 Datazeilen mit Daten fürs Hauptprogramm abgelegt. Das ganze mit einem Label versehen, damit der Compiler die Adresse ermitteln kann.
      Dann wurde überall im Code vor "Goto _Reset" ein Restore auf diese Datazeilen gemacht.

      Bootloader Code: BootLoaderTest_M168.bas

      Im Anwendungsprogramm werden diese beiden Werte ausgelesen und angezeigt.

      Das folgende Anwendungs-Programm wurde dann mit dem MCS-Bootloader übertragen.

      BASCOM Source Code: Anwendungsprogramm Blink

      1. $Regfile = "m168def.dat"
      2. $Crystal = 14745600
      3. $Baud = 19200
      4. Dim _Version as Integer
      5. Dim _myString as String * 30
      6. Read _Version
      7. Read _myString
      8. Wait 1
      9. LED Alias PortB.0
      10. Config LED = Output
      11. Do
      12. Toggle LED
      13. Print _Version
      14. Print _myString
      15. Waitms 500
      16. Loop
      Display All
      In Zeile 5 und 6 werden die Variablen definiert, die dann mit Read in Zeile 8 und 9 befüllt werden.
      Das ganze wird dann einfach wiederholend in der Loop ausgegeben.

      Die Ausgabe ergibt dann im Terminal

      123
      Copyright
      123
      Copyright
      123
      Copyright

      usw.
    • Mitch64 wrote:

      einen Mega 1284. Bei FC00 läuft da noch nix über.
      Ja, ist ein Mega1284

      Da ich mir nicht sicher war ob ich im richtigen Adressbereich rumstochere lese ich jetzt vor dem Bootloader schon die Adressen. Alle vor FC00 sind auch leer.

      Source Code

      1. >0000FBCF-FF<
      2. >0000FBD0-FF<
      3. >0000FBD1-FF<
      4. >0000FBD2-FF<
      5. >0000FBD3-FF<
      6. >0000FBD4-FF<
      7. >0000FBD5-FF<
      8. >0000FBD6-FF<
      9. >0000FBD7-FF<
      10. >0000FBD8-FF<
      11. >0000FBD9-FF<
      12. >0000FBDA-FF<
      13. >0000FBDB-FF<
      14. >0000FBDC-FF<
      15. >0000FBDD-FF<
      16. >0000FBDE-FF<
      17. >0000FBDF-FF<
      18. >0000FBE0-FF<
      19. >0000FBE1-FF<
      20. >0000FBE2-FF<
      21. >0000FBE3-FF<
      22. >0000FBE4-FF<
      23. >0000FBE5-FF<
      24. >0000FBE6-FF<
      25. >0000FBE7-FF<
      26. >0000FBE8-FF<
      27. >0000FBE9-FF<
      28. >0000FBEA-FF<
      29. >0000FBEB-FF<
      30. >0000FBEC-FF<
      31. >0000FBED-FF<
      32. >0000FBEE-FF<
      33. >0000FBEF-FF<
      34. >0000FBF0-FF<
      35. >0000FBF1-FF<
      36. >0000FBF2-FF<
      37. >0000FBF3-FF<
      38. >0000FBF4-FF<
      39. >0000FBF5-FF<
      40. >0000FBF6-FF<
      41. >0000FBF7-FF<
      42. >0000FBF8-FF<
      43. >0000FBF9-FF<
      44. >0000FBFA-FF<
      45. >0000FBFB-FF<
      46. >0000FBFC-FF<
      47. >0000FBFD-FF<
      48. >0000FBFE-FF<
      49. >0000FBFF-FF<
      50. >0000FC00-0C<
      51. >0000FC01-91<
      52. >0000FC02-8D<
      53. >0000FC03-E6<
      54. >0000FC04-75<
      55. >0000FC05-11<
      56. >0000FC06-EB<
      57. >0000FC07-AB<
      58. >0000FC08-80<
      59. >0000FC09-11<
      60. >0000FC0A-6F<
      61. >0000FC0B-04<
      62. >0000FC0C-B2<
      63. >0000FC0D-66<
      64. >0000FC0E-A8<
      65. >0000FC0F-B9<
      66. >0000FC10-AA<
      67. >0000FC11-0C<
      68. >0000FC12-E9<
      69. >0000FC13-80<
      70. >0000FC14-67<
      71. >0000FC15-53<
      72. >0000FC16-B9<
      73. >0000FC17-A8<
      74. >0000FC18-E2<
      75. >0000FC19-8C<
      76. >0000FC1A-00<
      Display All
      Zum Verständnis ob ich es richtig kapiere. Cpeek ließt ein Byte. Hex(Byte) sollte mit doch dann genau das gleiche anzeigen wie wenn ich die BIN mit einem Hexmonitor lade.
    • Pac-Man wrote:

      wenn ich die BIN mit einem Hexmonitor lade.
      Der Hexmonitor macht es für uns verständlich. CPeek kann jedoch damit nichts anfangen.
      Er macht aus eine binären Zahl zwei (bzw drei mit der Lücke) Ascii-Zeichen. Die widerum sehen binär völlig anders aus. Bin() würde auch Acii Zeichen erzeugen.
      Um eine Hexzahl für CPeek verständlich zu schreiben ginge &H auch &B für Binärzahlen. Variablen sind aber schon im richtigen Format.

      Durchsuch doch mal die komplette bin irgendwo sind die 0C,91.. vorhanden. Nur vermutlich nicht in der gleichen Reihenfolge
    • Pluto25 wrote:

      In dem Fall geht CPeek nicht. Da die gesuchte Adresse zu hoch ist.
      Ich bin ein Rindvieh, sorry...

      Source Code

      1. Cpeek() is limited to the first 64 KB of the code memory. For processors that have larger flash code memory like the Mega128 (128KB) you can use CpeekH().

      Source Code

      1. Name Value
      2. Program Memory Type Flash
      3. Program Memory Size (KB) 128
    • Habs so gelöst...

      Source Code

      1. Local X As Word
      2. Local Element As Byte
      3. For X = &HFD32 To &HFD3A
      4. Waitms 50
      5. Element = Cpeekh(x , 1 )
      6. Print#pc , "@" ; ">" ; Hex(x) ; " " ; Chr(element) ; "<" ; Chr(13)
      7. Next X


      und als Ergebnis bekomme ich den String welchen ich mit

      Source Code

      1. ' Hier das Label,
      2. DataForProgrammAccess:
      3. Data "irgendwas"
      am Ende vom Bootloader stehen hab.


      Source Code

      1. >FD32 i<
      2. >FD33 r<
      3. >FD34 g<
      4. >FD35 e<
      5. >FD36 n<
      6. >FD37 d<
      7. >FD38 w<
      8. >FD39 a<
      9. >FD3A s<
      Vielen Dank für Eure Hilfe,

      Gruß, Martin
    • Mitch64 wrote:

      Im Anwendungsprogramm werden diese beiden Werte ausgelesen und angezeigt.
      das läuft bei mir nur mit $noramclear


      Source Code

      1. $noramclear
      2. Dim _version As Integer
      3. Dim _mystring As String * 30
      4. Read _version
      5. Read _mystring
      wenn ich es ohne versuche kriege ich bei _version als Ergebnis -1 und bei _mystring verabschiedet es sich.

      Muss ich Probleme befürchten wenn der RAM nicht gelöscht wird?
    • Ich habe das mit einem Mega 168 getestet und funktionierte prima!

      Da du den Mega1284 hast, habe ich das mal im Simulator eingestellt und probiert.

      Da sind mir 2 Fehler aufgefallen im Bootloader:
      1. Im Deklarationsteil waren 2 Controller ausgewählt. Siehe Zeile 34, 35 und 80.
      2. In der Unter-Routine Do_spm (Zeile 382 und 383) fehlen die Ausrufezeichen.

      Hier nochmal der korrigierte Bootloader für M1284: BootLoaderTest_M1284.bas

      Zum Anwendungsprogramm:
      Dein Hinweis, dass bei Version -1 kommt und beim String lesen der Controller abstürzt, sagt mit, dass Read auf einen falschen Adressbereich zugreift.
      Denn -1 (Integer) entstricht der Bytefolge FF FF im Speicher. Also unbeschriebener Speicher.

      Ich habe geprüft, ob RAMPZ bei Restore im Bootloader gesetzt wird. Und ja, er wird gesetzt.
      Ich vermute, dass RAM-Clear den RAMPZ auf null setzt.
      Daher greift Read ins Nirvana.

      Probiere doch mal den obigen Bootloader aus.

      Das Blink-Programm muss dann angepasst werden, damit der RAMPZ stimmt, bevor du mit Read versuchst zu lesen.
      Auf das $NoRAMClear kannst du verzichten!


      BASCOM Source Code: Angepasstes Blink-Programm (mit RAMPZ))

      1. '$Regfile = "m168def.dat"
      2. $Regfile = "m1284def.dat"
      3. $Crystal = 14745600
      4. $Baud = 19200
      5. Dim _Version as Integer
      6. Dim _myString as String * 30
      7. RAMPZ = 1
      8. Read _Version
      9. Read _myString
      10. Wait 1
      11. LED Alias PortB.0
      12. Config LED = Output
      13. Do
      14. Toggle LED
      15. Print _Version
      16. Print _myString
      17. Waitms 500
      18. Loop
      Display All
      Wichtig ist dabei, dass du dein Programm um Zeile 9 ergänzen tust, bevor du einen Read machst. Dann sollte es gehen, auch ohne $NoRAMClear!

      Hier auch nochmal zum runterladen: Blink.bas
    • Mitch64 wrote:

      Da sind mir 2 Fehler aufgefallen im Bootloader:
      1. Im Deklarationsteil waren 2 Controller ausgewählt. Siehe Zeile 34, 35 und 80.
      2. In der Unter-Routine Do_spm (Zeile 382 und 383) fehlen die Ausrufezeichen.
      Das ist mir bekannt. Das hab ich auch korrigiert.


      Mitch64 wrote:

      damit der RAMPZ stimmt, bevor du mit Read versuchst zu lesen
      Danke, ich versuche RAMPZ mal zu verstehen bevor ich es probiere.