www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ENC28J60 Problem


Autor: Thomas B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Hab kleine Probleme damit den ENC28J60 vollständig anzusprechen.
Prinzipiell funktioniert es (also das Lesen und Schreiben), allerdings
scheint es Probleme mit dem Ansprechen der MACON und der MAC Register
zu geben.
Habe mich dabei an die Initialisierungsreihenfolge in der Procycon
AVRLib gehalten (Als Controller verwende aber ich einen M16C/62P).

SPI Frequenz ist derzeit auf 12MHz, hab aber auch  6MHz und 1MHz
probiert.

Was mir auffällt: Ich kann das ECON2 Register zwar problemlos lesen,
aber anscheinend nicht schreiben (und somit MARST nicht zurücksetzen).

Hier die auslesenen Registerinhalte:

RevID: 0x2
EIE: 0x0 EIR: 0x0 ESTAT: 0x1 ECON2: 0x80 ECON1: 0x3
MACON1: 0x0 MACON2: 0x80 MACON3: 0x0 MACON4: 0x0
MACADDR:   0 45 0 0 0 0

Jemand eine Idee was da falsch laufen könnte ? Hab ich irgendetwas
übersehen ?

Schöne Grüße,
Thomas

Autor: Thomas B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag: meinte nicht da ECON2 sondern das MACON2-Register.

Autor: Thomas B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe dieses Problem noch immer nicht zufriedenstellend lösen können:
Testweise hab ich nämlich die SPI-Kommunikation softwaremässig
integriert, und siehe da: es geht.

Per Hardware SPI klappt es aber immer noch nicht so wie es soll; was
ich nicht ganz verstehe, da er mir ja gewisse Register richtig ausliest
(komplett falsch können die Einstellungen also nicht sein).

Ich schätze also mal, daß es irgendwas mit dem SPI vom M16C/62P auf
sich hat. Kann es da irgendwelche Inkompatibilitäten mit dem ENC geben
? Hab auch schon ziemlich mit den Timings (z.B. CS# Setup Time, CS#
Disable Time, usw.) herumgespielt, aber ohne Erfolg.
Leider hab ich im Moment keinen Logic-Analyser um mir das Timing genau
anzuschauen ...

Hier die Grundfunktionen wie ich sie implementiert habe:
unsigned char ReadETHReg(unsigned char Address)
{
  CHIP_SELECT = 0;
  delaytick(100);  
  ir_s3ic = 0;
  asm("nop");

  s3trr = (0x00 | Address);  
  while (!ir_s3ic);
  ir_s3ic = 0;
          
  s3trr = 0x00;  
  while (!ir_s3ic);
  ir_s3ic = 0;

  delaytick(100);
  CHIP_SELECT = 1;

  
  return s3trr;
}

unsigned char ReadMACReg(unsigned char Address)
{
  CHIP_SELECT = 0;
  delaytick(100);  
  ir_s3ic = 0;
  asm("nop");

  s3trr = (0x00 | Address);  
  while (!ir_s3ic);
  ir_s3ic = 0;
  
  // Erstes Dummy Byte          
  s3trr = 0x00;  
  while (!ir_s3ic);
  ir_s3ic = 0;

        // Zweites Dummy Byte
  s3trr = 0x00;
  while (!ir_s3ic);
  ir_s3ic = 0;

  delaytick(100);
  CHIP_SELECT = 1;
  
  return s3trr;
}

void WriteReg(unsigned char Address, unsigned char Data)
{
  CHIP_SELECT = 0;
  delaytick(100);
  ir_s3ic = 0;

  s3trr = (0x40 | Address);  

  while (!ir_s3ic);
  ir_s3ic = 0;

  s3trr = Data;

  while (!ir_s3ic);
  ir_s3ic = 0;

  delaytick(50);
  CHIP_SELECT = 1;
  delaytick(100);
}


Die Initialisierung des SPI vom M16C sieht folgendermassen aus:
prc2=1;
s3c = 0x68;
prc2=0;

/*
01101000;   // s3c
||||||||______ f1SIO gewählt
|||||||_______ 
||||||________ SOUT3 auf Output
|||||_________ SOUT3 Output, CLK3 function
||||__________ transmit: fallende Flanke von CLK
|||            receive: steigende Flanke von CLK
|||___________ MSB first
||____________ Internal Clock
|_____________ SOUT3 Initial Value: Low Output
*/

s3brg = 2;

Mit der Clockrate hab ich mich auch schon ziemlich herumgespielt; ohne
Erfolg.

Kennt sich jemand gut mit dem M16C (und dessen SPI Modus) aus, und kann
mir sagen was ich noch probieren könnt ?

Schöne Grüße,
Thomas

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.