EEPROM und Chipkarten per TWI / I2C ansteuern

Hallo Tommy!

Vielleicht habe ich mich ja unglücklich ausgedrückt....

Mit Signalweg meinte ich die I2C-BUS Signale zwischen Himbeere und EEPROM.
Das du da eine fliegende Verdrahtung mit losen Strippen genommen hast war mir jetzt ein wenig egal. :wink:

Wie aber schon geschrieben...
Ohne LA wird das wohl nichts werden.



Vielleicht legst du dir zu Weihnachten ja doch mal einen kleinen LA selbst unter den Baum. :)
Es muss ja nicht gleich das Topmodell sein.

DIESER HIER


leistet für den Anfang auch recht gute Dienste, gerade wenn es um die Standard-BUS-Systeme geht.......
und er ist doch wohl sehr erschwinglich. :cool:


Grüße,
Cassio
 
Den hatte ich auch schon in's Auge gefasst ;)
Aber schneller wär's für dich wenn du den Chip selber an den Pi tackerst und selber nach schaust. Du hast ja alles da ;)
Bis ich nen LA hab da vergehen noch Monate. Hab mir ja erst das Tablet geleistet.
 
Hallo Tommy!

Ja, natürlich kann ich mal eben schnell alles nachbauen, den LA anwerfen und die LA-Bilder dann hier einstellen.

Leider hilft mir das nicht bei meinem Problem mit EEPROMs am AVR. :cool:
Aus dem Grunde bleibe ich jetzt erst mal bei den Atmels und irgendwann zwischendurch widme ich mich mal der Himbeere. :wink:


Grüße,
Cassio
 
Ich meinte auch viel mehr dass du das für dich machst um so vielleicht Unterschiede zu erkennen um den Fehler im AVR zu finden ;)
 
Falls wer mal seine alte Krankenkassenkarte quälen will, da hab ich folgendes gefunden (aber noch nicht getestet!):
http://www.gkv-spitzenverband.de/media/dokumente/krankenversicherung_1/telematik/versichertenkarte/Techn_Spezifik_der_VersKarte_25_11_2009_Version_2_08.pdf

Soll (bzw. muss) ein EEPROM mit 256 Bytes sein. Kleiner ist nicht erlaubt, größer schon, aber denn muss vom Hersteller der überschüssige Bereich "zerstört" werden. Vielleicht deswegen das mit den mehreren I²C Adressen? Wer weiß.
Grundsätzlich gilt, dass Chiptypen mit einer 256 Bytes übersteigenden Speicherkapazität nur zulässig sind, wenn der 256 Bytes übersteigende Bereich im Herstellungsprozess irreversibel gesperrt wird.


*** Ich rate davon ab mit der aktuell gültigen Krankenkassenkarte herum zu experimentieren ***
Nur um es gesagt zu haben :)
 
Hallo Tommy!

Leider bin ich mit den EEPROMs immer noch nicht weiter gekommen.......
und mit der Chipkarte schon gar nicht. :(


Ich bekomme da einfach keinen Reim drauf, warum die Speicher sich nicht verlässlich manipulieren lassen.
Das kann doch eigentlich gar nicht sein! :mad:

Zur Vorsicht hatte ich sogar extra noch alle freien Kontakte der Chipkarte mit GND belegt......
hat aber auch nichts geändert!


Grüße,
Cassio
 
Hi,

ich hab mir auch mal nen 24LC16 und nen 24LC512 besorgt (als Chip). Wenn ich mal Lust und Zeit habe besteht die Möglichkeit bei der Fehlersuche mitzumachen.

Gruß
Dino
 
Hallo Dino!

Entweder bist du dann ein "Leidensgenosse" von mir.......
oder es bleibt mal wieder ein Einzelschicksal. :wink:


Bin ja mal gespannt was bei rauskommt.
Mein Testcode habe ich ja schon eingestellt.....


Grüße,
Cassio
 
Hallo zusammen!

Ich muss das alte Thema noch mal hervor holen, weil ich HEUTE erst die "Lösung" gefunden habe.

Es lag weder am Hardwareaufbau noch an meinem Testprogramm, dass die Chipkarten nicht richtig funktionierten.....
Die Lösung ist so gesehen viel einfacher,
aber dafür auch umso ärgerlicher! :mad:


Der Fehler lag einfach nur bei Reichelt! :mad::mad::mad:
Die haben mir doch glatt nur 2KB Chipkarten verkauft, anstatt die bestellten 8KB Karten!

Aus dem Grunde konnte die Ansteuerung auch nie funktionieren, denn die 2KB-Chipkarten werden auf völlig andere Weise via I2C angesprochen.
Dadurch war auch immer die Verbindung zum 512er Chip gestört, welcher sich ebenfalls auf den Testaufbau befand!


BOAH, bin ich sauer! :mad:
Zig Stunden Testen und einen haufen Freizeit verbrannt, nur weil eine Packer-Pappnase bei Reichelt vermutlich nicht lesen kann. :mad:


Wie gut, dass ich nicht so nah an Reichelt wohne wie TommyB, sonst wäre ich da mit Sicherheit heute noch aufgeschlagen und hätte meinen Unmut nicht nur an vorderster Front kundgetan! :moil:


Viele Stunden grübeln, ein unfertiges Projekt und obendrein noch beschissen worden!
Da könnte ich echt platzen!


Grüße,
Cassio
 
Haste denen das auch so in der Art geschrieben? Wie haben die reagiert? 'N Austausch und 'ne Entschuldigung sollte ja das allermindeste sein...

Ich hab mir ja damals (logischerweise) auch keinen Reim drauf machen können...

P.S.: das war nicht von vornherein am Aufdruck zu erkennen? Wie haste's dann jetzt rausbekommen?
 
P.S.: das war nicht von vornherein am Aufdruck zu erkennen?

Die Karten haben kein Aufdruck (außer das Hintergrundbild). Daher vielleicht auch die Verwechslung der Karten seitens Reichelt. Bei mir hats gepasst, aber ich hab denn auch mit nem Folienschreiber die Größe drauf geschrieben, sonst wär ich selbst auch schon durcheinander gekommen :)

Wäre wohl gut würden die beim Hersteller mal anleiern dass die Größe mit drauf geschrieben wird, denn würde das schneller auffallen.

Ich würde das an deiner Stelle auch mal bei Reichelt melden. Zumindest ein Austausch sollte möglich sein.
Auch allein schon wegen anderen Kunden die möglicherweise in das selbe Problem rennen.
 
Wie haste's dann jetzt rausbekommen?


Hallo zusammen!

Rausbekommen habe ich es nur per Zufall.

Im Testaufbau zur Chipkarte befand sich immer noch das 512k-EEPROM.
Mein Programm prüfte vor jedem Zugriff auf das 512er, ob es auch erreichbar ist.
Sollte es nicht erreichbar sein, würde es einen Hinweis geben.

Heute hatte ich zufällig bemerkt, dass das 512k-EEPROM gar nicht mehr vollständig angeschlossen war.......
und trotzdem bekam ich KEINE Hinweismeldung! :hmmmm:

Die Chipkarte antwortete also auch auf die Adresse des 512k-EEPROMs!


Da aber nur die kleinen EEPROMs mit allen Adressen als Speicher-Bank-Zuordnung arbeiten, habe ich die Software daraufhin mal umgestellt.
Tja und auf einmal konnte ich problemlos und fehlerfrei jedes Byte ansprechen, beschreiben, auslesen und löschen. :dirol:



Zumindest ein Austausch sollte möglich sein.

Einen Austausch? :mad:
Für die ganze sinnlose Zeit, die ich mir wegen dem Deppen an die Backe gebunden habe?
Da hätte ich aber jetzt minimum gerne die bestellte Anzahl richtiger Chipkarten........ und die Falschen gibt es auch nicht zurück.
Die paar Euro ersetzen mir zwar keine Freizeit mit der Familie, aber es lindert den Ärger. :wink:


Wenn ich mich etwas beruhigt habe werde ich denen mal eine Mail schreiben und horchen, was die Damen und Herren dazu sagen.

Grüße,
Cassio
 
Hallo zusammen!

Ich möchte euch und allen interessierten Lesern natürlich das neue Testprogramm nicht vorenthalten.

Hier also der passende Testcode:
Code:
$regfile = "m1284pdef.dat"
$crystal = 16000000                                         'extern


$hwstack = 128
$swstack = 128
$framesize = 128

$baud = 38400                                               'extern

'(
                  ----------------------------
                  -------AVR44MDL-Modul-------
                  ----------------------------
RxD >-------------o--PD0/RxD   |    SCK/PB7--o
Txd <-------------o--PD1/TxD   |   MISO/PB6--o
                  o--PD2/Int0  |   MOSI/Pb5--o
                  o--PD3/INT1  |        PB4--o
                  o--PD4       |        PB3--o
                  o--PD5       |        PB2--o
LED <-------------o--PD6       |        PB1--o
                  o--PD7       |        PB0--o
SCL <>------------o--SCL/PC0---|--------PA0--o
SDA <>------------o--SDA/PC1   |        PA1--o
                  o--PC2       |        PA2--o
                  o--PC3       |        PA3--o
                  o--PC4       |        PA4--o
                  o--PC5       |        PA5--o
                  o--PC6   --16MHz--    PA6--o
       >----------o--PC7   Resonator    PA7--o
                  o--Vcc       |       ARef--o
                  o--GND       |        GND--o
                  ----------------------------
')


' ==============================================================================

' Bestimme die Ein und Ausgänge
Ddra = &B_000_01000                                         '1 ist Ausgang 0 ist Eingang
Porta = &B111_10111                                         'auf Hi oder Low setzen

'Ddrb = &B_00000000                                         '1 ist Ausgang 0 ist Eingang
'Portb = &B11111111                                         'auf Hi oder Low setzen

Ddrc = &B_0000_0000                                         '1 ist Ausgang 0 ist Eingang
Portc = &B1111_1111                                         'auf Hi oder Low setzen

Ddrd = &B_0111_0010                                         '1 ist Ausgang 0 ist Eingang
Portd = &B1000_1101                                         'auf Hi oder Low setzen


' ==============================================================================
' I2C-Config
$lib "i2c_twi.lbx"
Config Twi = 400000                                         'BUS-Takt, max. 400k



' #############################################################################
Const 16kw = &HA0                                           '16k EEPROM write-Adresse
Dim 16k_w As Byte                                           'EEPROM-Adresse mit Nr. der Speicherbank


' #############################################################################
Led Alias Portd.6                                           'Kontroll-LED


' #############################################################################
Dim Wert(17) As Byte                                        'Byte-Array
Dim Bz As Byte                                              'ByteanZahl
Dim Block As Byte                                           'Speicherbank/Speicherblock

Dim I1 As Byte                                              'Index-Variable


' #############################################################################
' #############################################################################

Do

 I2cstart
 I2cwbyte 16kw                                              'auf Karte prüfen
 I2cstop

 If Err = 1 Then
   Led = 1
   Print "Keine Chipkarte erkannt!"
   Wait 1
   Return
Else
   Led = 0
   Print ""
   Print "Bitte waehlen:"
   Print "0 = 16K-Karte lesen"
   Print "3 = 16K-Karte schreiben"
   Print "5 = 16K-Speicher-Block nummerieren (1-255)"
   Print "7 = 16K-Speicher-Block komplett loeschen (&HFF)"
   Print "9 = 16K-Speicher-Block anzeigen"
   Print ""
   Input "Eingabe= " , I1
End If


Select Case I1
   Case 0 : Gosub 16k_read
   Case 3 : Gosub 16k_write
   Case 5 : Gosub 16k_fuellen
   Case 7 : Gosub 16k_loeschen
   Case 9 : Gosub 16k_anzeige
End Select


Loop

End                                                         'end program


' #############################################################################
16k_read:
Print ""
Print ""
Print "EEPROM auslesen..."
Print ""

Gosub Block_adresse

Input "Speicher-Start-Byte angeben: " , Wert(1)
Input "Wieviele Bytes lesen? (max.16) = " , Bz

I2creceive 16k_w , Wert(1) , 1 , Bz


Print ""
Print ""
Print "Ergebnis:"
For I1 = 1 To Bz
   Print I1 ; ". empfangenes Byte= " ; Wert(i1)
Next I1
Print ""
Print ""

Wait 1
Return


' #############################################################################
16k_write:
Print ""
Print ""
Print ""
Print "EEPROM beschreiben..."
Print ""

Gosub Block_adresse


Input "Speicher-Start-Byte angeben: " , Wert(1)
Input "Wieviele Bytes schreiben? (max.16) = " , Bz

Incr Bz
For I1 = 2 To Bz
Input "Byte-Wert eingeben= " , Wert(i1)
Next I1

I2csend 16k_w , Wert(1) , Bz


Print ""
Print ""
Print "Erledigt !"
Print ""
Print ""

Wait 1
Return


' #############################################################################
16k_fuellen:

Print ""
Print "EEPROM-Speicherbereich nummerieren (max. 255)..."
Print ""

Gosub Block_adresse


Input "Speicher-Startadresse= " , Wert(1)

Input "...bis Speicherzelle= " , Wert(17)


For Wert(2) = 0 To Wert(17)
   I2csend 16k_w , Wert(1) , 2
   Waitms 5
   Incr Wert(1)
Next Wert(2)

Print ""
Print "Eledigt !"
Print ""

Wait 1
Return


' #############################################################################
16k_loeschen:

Print ""
Print ""
Print ""
Print "Gesamter EEPROM-BLOCK-Speicher wird geloescht (&HFF)!!!"
Print "7= Ja oder 0= NEIN"
Print ""

Input "Eingabe= " , I1


Select Case I1
   Case 7
      For I1 = 2 To 17
         Wert(i1) = &HFF
      Next I1

      Gosub Block_adresse
      Wert(1) = &H00

      For I1 = 1 To 16
         I2csend 16k_w , Wert(1) , 17
            Wert(1) = Wert(1) + 16
         Waitms 5
      Next I1
      Print ""
      Print "Speicher geloescht!"
      Print ""
      Waitms 250
   Case Else
      Print ""
      Print "Vorgang abgebrochen!"
      Print ""
      Print ""
      Waitms 500
End Select


Return



' #############################################################################
16k_anzeige:

Print ""
Print "Speicherbereich anzeigen..."
Print ""

Gosub Block_adresse

Input "Speicher-Start= " , Wert(16)
Input "Speicher-Ende= " , Wert(17)

Waitms 250


For Wert(15) = Wert(16)to Wert(17)
   Wert(1) = Wert(15)
   I2creceive 16k_w , Wert(1) , 1 , 1
      If Wert(1) < 255 Then
      Print Spc(3) ; "Speicherzelle " ; Wert(15) ; " hat den Wert= " ; Wert(1)
   Else
   End If
Next Wert(15)


Print ""
Print "ENDE"
Print ""
Print ""

Wait 1
Return


' #############################################################################
Block_adresse:

Input "Block angeben: " , Block

If Block > 7 Then
   Print "Eingabe fehlerhaft!"
   Print "Nur 0-7 erlaubt!"
   Print "Abbruch..."
   Waitms 500
   Print ""
   Print ""
   Return
Else
   Shift Block , Left , 1
   16k_w = 16kw + Block
End If

Return


Ich möchte aber noch mal erwähnen, dass es sich um einen Testcode handelt!
Er ist nicht "Lehrlingsfest" und an manchen Stellen sollte man schon wissen was man im Terminal eingeben muss. :wink:


Grüße,
Cassio
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)