Arduino TSOP programming shield

  • Es ist so weit, ich hab heute die neuen Boards bekommen und konnte damit die (zunächst) finale Version testen.
    Konnte bisher keine nennenswerten Bugs feststellen.


    Benötigt werden folgende Komponenten:


    1 x Arduino Uno (klon) - 2,65$ -link
    3 x 74HC595 - 0,74$ - link
    8 x SMD 1206 560 Ohm - 0,55$ - link
    1 x 40 pin ZIF Sockel - 1,30$ - link
    1 x headerpins - 0,70$ - link
    1 x Platine ( 6$, wenn ihr die von mir haben möchtet, ansonsten befindet sich das Eagle File mit im Archiv)



    Zusammen sind das 5,94$ + Platine


    Enthaltene Funktionen:
    1. Chip löschen
    2. Blankcheck
    3. Chip auslesen
    4. Chip beschreiben
    5. Die Daten des Chips mit einer Datei vergleichen


    Preview des GUI:


    Eagle Layout:


    Sinn der Widerstände ist es, dass für den Fall, dass doch einmal beide Seiten als Ausgang geschaltet sind, der Strom durch die Widerstände soweit begrenzt wird, dass der Chip nicht beschädigt wird.


    Die fertige Platine:


    Programmieren des Arduino:
    Das beschreiben des Arduino ist leider nicht direkt mit dem Standard IDE möglich, da ich den Serial Buffer aus gründen der Performance vergrößern musste.
    Im Archiv unter "1. Executables" befindet sich die von der Arduino IDE erzeugte hex Datei. Diese lässt sich mit Hilfe des XLoader direkt auf den Uno spielen (Downloadlink in der readme zu finden)
    Wer gerne selber das Arduino Programm noch ändern möchte, findet dieses im Ordner "3. Arduino Project" zusammen mit einer Anleitung, wie der Serial Buffer entsprechend erweitert werden kann


    Performancetests:


    Blank Check: <5min
    Read: 8 min
    Verify: 8 min
    Write 1MB: 6 min
    Write 2MB: 11 min
    Write 3MB: 16 min
    Write 4MB: 22 min
    Erase: <1min


    [video]

    [/video]


    Download: Klick Mich


    Known Bugs:
    1. Das erse mal, wenn die Verbindung geprüft wird, wird n Error angezeigt. Das liegt daran, dass Data Terminal Ready beim ersten verbinden auf low gesetzt wird und der Arduino dadurch neustartet. Ich hab DtrEnable bereits auf false gesetzt, scheint aber irgendwie nicht zu helfen. Nach dem ersten Fehler läuft es dann aber ohne Probleme.

  • Update 30.05.15:


    Soo der Prototyp ist fertig. Hab auch schon mal ein paar Tests gestartet. Bisher lediglich lesend.
    Hab probeweise mal einen Bereich von 64kB ausgelesen und über die serielle Schnittstelle Byteweise ausgegeben. Das ganze hat in etwa 1/2 Minute gedauert. Für die gesamten 4 MB auf dem Chip bräuchte ich also etwa ne halbe Stunde zum lesen. Wirkt zur Zeit für mich noch ein bisschen viel, aber immerhin funktioniert es, das ist ja schon mal etwas. Muss dann später mal schauen, ob die lange dauer durch die serielle Schnittstelle kommt, oder ob mein Code noch zu rechenaufwändig ist. Aber das kommt dann später, sobald alles läuft.
    Als nächstes werd ich wohl versuchen einen Chip erase zu initialisieren. Hoffentlich funktioniert da auch alles so reibungslos ;)
    Ansonsten habe ich passend dazu noch ne Funktion geschrieben, um zu prüfen, ob der Chip vollständig gelöscht ist. Alles in Allem bin ich positiv überrascht vom Resultat.


    Im laufe der nächsten Woche wird sicherlich nochmal n Update folgen.

  • Finde ich sehr interessant, zumal ich das Thema auch schon länger angehen wollte, jedoch bisher noch keine Zeit (oder Überwindung) gefunden habe.


    Kann mir sehr gut vorstellen, dass man dies auch gut in Verbindung mit der Retrode verwenden könnte, um seine modifizierten Flashmodule auch löschen und neu beschreiben zu können ;)


    Falls du Platinen herstellen lässt, denk bitte an mich 8)

  • So habs erfolgreich geschafft den Chip zu löschen und konnte auch das DQ7 Signal abfragen.
    Bin jetzt auch schon bereits dabei n GUI zusammen zu basteln mit Port Auswahl und Lösch-/Programmier-befehlen.
    Bezüglich Performance konnte ich das lesen des 64kB Blocks auf unter 10 Sekunden bringen. Leider habe ich beim Boardlayout die Datenbits so angeschlossen, dass ich jetzt sehr viel schieben muss (War vom Anschluss am Arduino einfacher), um mir daraus das richtige Byte zu basteln. Das wird noch überarbeitet. Sollte dann evt auch noch ne kleine Verbesserung geben.


    Also soweit funktioniert alles Perfekt. Und so langsam frage ich mich, warum nicht schon vorher jemand sowas gemacht hat ;)

  • So ich hab ja ne Zeit lang nichts mehr von mir hören lassen... War n bisschen beschäftigt mit Uni und Arbeit.
    Hab das Projekt aber nicht vernachlässigt. Hab es inzwischen geschafft, den Chip zu beschreiben. Das blöde ist nur, dass ich beim Löten des Prototyps mir aus Versehen n Kurzen eingebaut habe... dadurch war die eine Adressleitung immer auf low... Und ich hatte mich gewundert, warum er beim schreiben die Daten zweimal auf den Chip schreibt ... X(
    Habe jetzt aber ca. vor ner Woche mal richtige PCBs bestellt. Da warte ich jetzt, bis die bei mir ankommen, bevor ich weiter probiere. Dann kann ich zumindest Hardwarefehler ausschließen...
    Alles in Allem bin ich ganz zufrieden. Das beschreiben scheint aber doch schon ein bisschen zu dauern. Da bin ich mal auf n performance Vergleich zwischen Arduino und Willem gespannt.

    Das auslesen geht relativ fix. Innerhalb von ca. 6 Minuten ist der komplette Chip ausgelesen.
    Warte jetzt gespannt auf meine (professionellen) Prototypen

  • Konnte es dann doch nicht lassen und hab noch ein wenig rumprobiert.


    Konnte den TSOP jetzt komplett beschreiben. Das ganze hat allerdings stolze 1Std 40min gedauert... Weiß nicht was ich davon halten soll. Ist schon recht lang, allerdings hab ich schon so ziemlich alles getan, um die Rechenzeit des Arduino so gering wie möglich zu halten. Vielleicht fällt mir ja noch was schlauen ein...
    Werde demnächst mal gucken, wie lange das bei dem Willem dauert, um da mal n Vergleichswert zu haben.
    Das Problem ist halt, dass ich die Adresse über die Schieberegister an den TSOP bringe. Das heißt jedes mal Adresse ändern sind alleine schon 23 Bits die geschoben werden müssen. Und zum schreiben muss man vorher noch 3 Steuerbytes in bestimmte Regionen schreiben. Sprich zum schreiben eines Bytes, brauche ich knapp 100 Zyklen.... Eventuell werd ich das ganze nochmal überarbeiten und die Schieberegister nicht in Reihe betreiben, sondern parallel... dadurch würde ich das schonmal drastisch minimieren.
    Bin aber auf jedenfall ganz happy, dass soweit jetzt eigentlich alles geklappt hat.

  • Oh sehr geil, das hab ich bei meiner anfänglichen Suche gar nicht gefunden.



    Hätte ich mir die Arbeit ja sparen können. Und das zeigst du mir jetzt, wo alles schon fast fertig ist :P
    Aber Spaß bei Seite, das ganze zu designen und zu programmieren hat schon Bock gebracht. Kann mich also nicht beschweren ;)
    Und hab mal bisschen probiert und bin jetzt bei ner Schreibzeit von 30 min, was auch ziemlich genau der Zeit des Willem entspricht.
    Jetzt bin ich also endlich nicht mehr vom Parallel Port abhängig :D