Forum: Mikrocontroller und Digitale Elektronik MultiCAN bei XE167 bzw XC2287


von TManiac (Gast)


Lesenswert?

N'Abend,

Hat schon einmal jemand mit der MultiCAN Ecke der aktuellen Infineon 
µC-Typen experimentiert.

Ich versuche gerade auf einem XC2287 (fast Baugleich mit XE167) mit DAvE 
die CAN-Schnittstelle mit FIFO zu konfigurieren. Der µC macht aber nicht 
das was ich mir denke.

Habe 4 Messageobjekte zu einem FIFO verknüpft und mit dem Node 1(eins) 
verbunden. Gesendet werden soll per RTC-Interrupt (eigentlich langsam 
genug) im Sekundentakt. Ich sehe nun aber auf dem CAN-Bus nur 8 
Nachrichten (Sekunden 0,1,2,3,6,7,8,9). Das die RTC weiter läuft sehe 
ich an einem blinkenden LED.

Nun hoffe ich mal auf ein paar Tips, wo ich weiter suchen darf. Bin auch 
gerne mit weiteren Details hilfreich.

Gruß TManiac

von Jens M. (hoku)


Lesenswert?

Moin TManiac,

ich experimentiere derzeit mit dem XE167.
Ich habe zwar die CAN-Schnittstelle noch nicht getestet,
habe aber auch Probleme ein mit Dave erzeugtes I2C-Programm
zum laufen zu bringen.

Da jetzt schon einiger Zeit vergangen ist, wirst Du sicher schon
Dein geschildertes Problem gelöst haben.

Von daher könntest Du mir evtl. bei meinem Problem weiterhelfen?

Ich habe ein selbstgebasteltes USB-Device und möchte über den
IIC-Bus Daten vom XE-167 abrufen und zum PC weiterleiten.

Die aus meiner Sicht weitaus größeren Probleme habe ich gelöst.
Diese IIC Kiste hält mich jetzt aber schon ein paar Tage auf, was 
ziemlich nervt.

Das USB-Device hat einen internen 3,3V Stromkreis. Der IIC-Pegel liegt 
demnach mit entsprechenden Widerständen auf diesem Wert.
Der XE167 befindet sich auf dem Easy-Kit von Infineon.
Beide Geräte sind an einer Stromquelle.

Wenn das USB-Gerät aktiviert ist und von mir den Befehl bekommt den 
XE-167 zu adressieren (7-Bit-Address-Mode) wir laut Logic-Analyzer die 
richtige
Startsequenz übermittelt. Sobald ich den XE-167 physikalisch an den Bus 
anschließe, bricht der Buspegel zusammen und nichts geht mehr.

Was mache ich falsch?


Vielen Dank im voraus,

hoku

von Jens R. (tmaniac)


Lesenswert?

Hallo Jens,

gleicher Vorname anderes Problem :-)

>Da jetzt schon einiger Zeit vergangen ist, wirst Du sicher schon Dein 
>geschildertes Problem gelöst haben.

Nein habe ich noch nicht gelöst, nur umgangen in dem ich nicht den FIFO 
nutze.

>Von daher könntest Du mir evtl. bei meinem Problem weiterhelfen?

Ich kann es versuchen. Mit IIC,bzw. I2C habe ich noch nichts gemacht 
(soll aber noch). Deine Beschreibung klingt aber nach Hardwareproblem. 
Welchen USIC mit welchen Pins nutzt du. Du wirst bestimmt schon geprüft 
haben ob die Pins nicht zufällig von etwas anderem genutzt werden. Wobei 
ich sagen muss, dass ich auch den verdacht habe, dass der Schaltplan 
nicht ganz stimmt. So habe ich zum Beispiel auf einem CapCom2 Ausgang 
dauer Low und weiß nicht wieso. Probiere mal deinen ProblemPin per 
Software zu togglen.

Hast du irgendwie die Möglichkeit die IIC Kommunikation des Kontrollers 
auf eine andere Weise zu testen, zB EEPROM, Chipkarte?

Für mich noch zum Verständnis: Du versuchts einen USB <-> IIC Umsetzer 
anzuschließen?

von Jens M. (hoku)


Lesenswert?

Hallo Jens,

danke für Deine Antwort.

Ich habe die Pins überprüft. Sie funktionieren.
Zum testen habe ich mir eine AppNote (AP16130) von Infineon
vorgenommen und die I2C Kommunikation auf dem XE167 programmiert.
Den U1C1 habe ich als Master und U0C0 als Slave konfiguriert.
Die Kommunikation funktioniert tadellos.

Nachdem ich jetzt mein USB-Gerät wieder angeschlossen hatte, gab
es auch keine Probleme mit dem Pegel. Der Slave wird allerdings noch 
nicht erkannt.

Ich habe die Adresse 0x0A für den Slave vergeben.

Die Startsequenz wird lt. Logicanalizer vom USB-Gerät mit (S W:0A N) 
rausgesendet.

Das S steht für START, das W für WRITE und das 0A für die Slaveadresse.

Das N steht für NOTACKNOWLEDGE und bedeutet das der Slave auf diese 
Adresse nicht geantwortet hat.

Auf dem XE167 habe ich für diesen Test lediglich den Slave auf U0C0 
konfiguriert. Im weiteren läuft das Programm in einer Schleife.

Muss ich evtl. aus Sicht des XE167 (SLAVE) den Bus aktiv nach für ihn 
bestimmte Botschaften abpollen? In der AppNote s.o. ist das nicht der 
Fall.
Dort wird nur das PSR-Register (Protocol Status Register) auf ST0 (Slave 
Select) abgefragt bevor Daten zum Master gesendet werden.

Während der Kommunikation (Startsequenz) zwischen Master und Slave 
(AppNote) ist mir folgendes aufgefallen:

S HS:2h A

S=START
HS=HIGHSPEED
2h=?
A=ACKNOWLEDGE

Trotz eingestellter 0x0A Slaveadresse ist diese als solche nicht an der 
Anzeige des Logicanalyzers zu erkennen.

Soweit so gut.

Zum Schluss möchte ich noch Deine Frage beantworten.

Ich habe mir ein USB-Gerät gebaut, welches mit Hilfe eines UMDF-Treibers
über Windows ab XP ansprechbar ist. Jetzt möchte ich über den I2C-Bus 
einen weiteren Mikrocontroller anschließen, welcher dann auf Anforderung 
Daten über den I2C-Bus zum USB-Chip und dann über das USB-Protokoll 
weiter auf meine Windowsoberfläche sendet.

Was hast Du mit Deinem XE167 vor?

von TManiac (Gast)


Lesenswert?

Hi,

nun habe ich mich doch (dank dir) einwenig mit I2C beschäftigt. Hat 
einen positiven Lerneffekt.
Du hast also dein erstes Problem mit den Pegel selber gelöst (oder es 
hat sich selber gelöst).

Das andere, du hast betimmt einen Fehler in der Adressierung, weil der 
im AppNote steckt.
Es wird folgende Zeile falsch beschrieben:
> U0C0_PCRL = 0x0A00; // SLAD[15:9] = 0x0A, 7 bit address
0A im Register entsprechen nicht der Adresse 0A
Im UM Peripherie steht zum PCRL.SLAD
"This bit field contains the programmed slave address. The
corresponding bits in the first received address byte are
compared to the bits SLAD[15:9] to check for address
match. If SLAD[15:11] = 11110B, then the second address
byte is also compared to SLAD[7:0]."

Das ist etwas irre führend, man muss bedenken, dass Bit 0 im 
Adressierungsbyte das W/R Bit ist. Und genau das Bit muss auch im 
PCRL.SLAD freigelassen werden, bzw darf nicht zur Adressierung genommen 
werden. Das wäre dann das Bit 8 im Register. Das heißt aber auch dass 
ein Eintrag im Register mit 0x0A00 gleich 0x0A >> 1 gleich 0x05 als 
Adresse bedeutet. Steht da im Logikanalyzer wirklich 2h nicht 5h ?
Darauf gestoßen bin ich auch erst nach dem ich im DAvE einwenig gespielt 
habe.

Was die Sache mit dem HS (Highspeed) bedeutet, bereit aber auch 
Kopfzerbrechen. Ich habe jetzt nicht nachgerechnet was bei den 
eingestellten Parametern wirklich für eine Baudrate rauskommt. Im 
AppNote wird ja noch nicht mal verraten mit welchem  CPU Takt die Werte 
eingestllt sind. Wenn ich zurückrechne komme ich auf 64MHz. Das ist 
keine Standardeinstellung. Also sollte dies auch überprüft werden.

Zu meinem Anwendungsfall:
Ich muss ja gestehen dass ich keinen XE167 habe sondern nen XC2287. die 
beiden sind aber fast identisch. Ziel ist es eine Kennfeldzündung zu 
realisieren. Wobei nicht die Entwicklung der Zündung an sich im 
Vordergrund steht sondern, dass ganze so Modular wie möglich auszulegen. 
So zu sagen als Training neben der normalen Arbeit die auch in die 
Richtung geht.

von Jens M. (hoku)


Lesenswert?

Hallo Jens,

nochmals danke für Deine Antwort.
Trotz Adressänderung wurden meine Versuche noch nicht von Erfolg 
gekrönt.

Die Schreibanforderung seitens USB-Device wird nach wie vor mit einem N 
(NotAcknowledge)versehen.

Jetzt mache ich mir Gedanken wie man das Problem am besten einkreisen 
kann, um letztlich zu einem guten Ergebnis zu kommen.

Hast Du noch eine Idee?


Gruß

Jens

von TManiac (Gast)


Lesenswert?

Rein Praktisch könnte man nur versuchen mit Hilfe eines dritten Gerätes, 
die Beiden zu testen. Je nach dem, in welcher Kombination es dann nicht 
geht, müsste man den Fehler suchen.

Hast du die Adresse im Slave oder in der Anfrage vom Master geändert?

Mal das einfachste Problem, wäre eine falsche Baudrate. Nur sollte der 
Slave laut App-Note eine Baudratenerkennung haben. Probier es trotzdem 
mal mit einer möglichst kleinen fest definierten.

Gruß

von hoku (Gast)


Lesenswert?

Hallo Jens,

ich habe das Problem gelöst.
Die I2C-Kommunikation über die XE-Adresse 0x0A (0x05)
mit einem externen Gerät kommt bei mir auf biegen und brechen
nicht zustande. Dies könnte aus meiner Sicht daran liegen, dass
die Adresse 0x05 für den HS-MasterCode reserviert ist, weshalb
mein Logic-Analyzer auch das HS anzeigt.

Ich habe deshalb eine andere Adresse gewählt. Jetzt funktioniert es 
tadellos.


Nochmals danke für Deine Mühe.


Gruß

Jens

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.