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
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
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?
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?
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.
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
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ß
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.