Ich verwende auf einem STM32F4-Discovery Board die I2C CPAL-Library von ST (Communication peripheral application library UM1029). Das Discovery-Board arbeitet als I2C-Master und kommuniziert auf mehreren Schnittstellen parallel mit einer Reihe von Slaves. In der Interrupt-Betriebsart funktioniert soweit auch alles zufriedenstellend. Bei Verwendung der DMA-Betriebsart funktioniert nur das Senden (allerdings nicht 100% zuverlässig), der Empfang funktioniert gar nicht. Beim Versuch mehrere Bytes von einem Slave zu lesen wird ein Combined-Transfer initiiert, der Master reagiert aber nicht auf das erste vom Slave gesendete Datenbyte d.h. kein ACK und dementsprechend auch kein STOP. Der Transfer wird an dieser Stelle nicht korrekt beendet. Bisher habe ich es noch vermieden in die internen Details der CPAL DMA-Betriebsart hinein zu debuggen. Für Hinweise bzw. Erfahrungen wäre ich dankbar.
Ich hab grad fast das gleiche Problem auf dem stm32f100rb. Im Interrupt Modus kann ich mehrere Bytes hintereinander lesen. Im DMA Modus wird kein ACK gesendet. Somit lasst mein Slave die Datenleitung einfach auf high, aber der Clock geht weiter. Bei mir wird dann aber das Stopsignal gesendet, nachdem es die entsprechende Anzahl an Bytes gelesen hat. Nur sind eben alle außer das erste Byte auf 0xFF. Ich hoffe, damit hat sich schon mal jemand auseinander gesetzt, mich würde nämlich auch interessieren, was man dagegen tun kann.
Ich habe mir gerade die Mühe gemacht und habe mich etwas in die CPAL Bib eingelesen. Ich glaube das Problem gefunden zu haben: In der Bib werden die DMA Kanäle 14-17 verwendet. Allerdings habe ich bei meinem Controller wohl nur 7 Kanäle. Bisher hab ich das noch nicht getestet, aber das klingt schon sehr verdächtig... Hoffe, ich kann damit schon mal jemand helfen.
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.