Forum: Mikrocontroller und Digitale Elektronik STM32F4-Dis - I2C mit CPAL - DMA-Receive funktioniert nicht


von Gerhard D. (gdrt)


Lesenswert?

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.

von Martin (Gast)


Lesenswert?

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.

von Martin (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.