Forum: Mikrocontroller und Digitale Elektronik HDMI CEC mit STM32 Signal kommt nicht durch


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Tilo (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Hallo

Ich will meinen HTPC vom Fernseher aus über CEC steuern.
Dafür will ich einen STM32F072 verwenden, den ich dann per USB an den PC 
anschließe.

der STM32 kann CEC in Hardware.
Mein aktueller Aufbau ist:
TV <--> AV-Receiver <--> HTPC
                    <--> BD-Player
Zum Testen habe ich das Kabel geöffnet und I2C (DDC) und CEC verbunden.

Ich habe mich in die Spezifikationen von CEC eingelesen.
Über Cube MX habe ich die CEC Peripherie konfiguriert.

Prinzipiell läuft der Aufbau. Ich kann CEC Nachrichten verschicken und 
empfangen. Die empfangenen Daten entsprechen dem, was ich erwarte.

Leider scheint es mit dem Senden nicht so zu klappen. Wenn ich z.B. eine 
Nachricht "0x36, Standby" verschicke, geht der AV-Receiver aus. Wenn ich 
mit dem Befehl 0x82 das aktive Device ändere, wechselt der AV-Receiver 
auf den entsprechenden Eingang.

Leider reagiert der TV gar nicht. Es wirkt auf mich so, als ob die 
Nachrichten beim TV nicht ankommen. Weder wird auf den entsprechenden 
HDMI-Eingang gewechselt, noch geht der TV aus.

Wenn ich den BD-Player einschalte, empfängt der STM32 prinzipiell die 
selben Befehle, die auch ich mit dem STM32 verschicke. Beim BD-Player 
verhält sich aber der TV wie erwartet: erwechselt den Eingang.

Laut der Dokumentation ist CEC ein durchgehender BUS. Die physikalischen 
HDMI-Adressen entsprechen auch dem, was ich erwarten würde:
TV: 0.0.0.0
AV-Receiver 2.0.0.0 (Angeschlossen an HDMI2)
BD-Player 2.3.0.0 (Angeschlossen an HDMI3 am AV-Receiver)
HTPD: 2.8.0.0 (Angeschlossen an HDMI8 am AV-Receiver)

Der TV fordert sowohl von AV-Receiver als auch vom BD-Player den 
OST-Text an. Das passiert beim HTPC auch nicht.

Daher vermute ich, dass entweder beim TV nichts ankommt oder die Signale 
für den TV nicht verständlich sind.


Hat sich jemand mit CEC schon beschäftigt und eine Idee, wo es klemmen 
könnte?


Ich bin gerade ein wenig ratlos.


Vielen Dank,

Tilo

von Tilo (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Hallo

Ich habe mit einem Logic-Analyzer das Problem gefunden.
Beim STM32 muss man, bevor man das letzte Byte einer Nachricht 
verschickt, ein Register setzen, damit nach dem Byte "End of Message" 
generiert wird.
Ich verwende die fertig HAL. Damit sollte das ganze automatisch 
passieren.

In der stm32f0xx_hal_cec.c ist in der Interrupt-Funktion ein Fehler.
Original:
1
  /* ----------------------------Tx Management----------------------------------*/  
2
  /* CEC TX byte request interrupt ------------------------------------------------*/
3
  if((reg & CEC_FLAG_TXBR) != RESET) 
4
  {
5
    if (hcec->TxXferCount == 0U)
6
    {
7
      /* if this is the last byte transmission, set TX End of Message (TXEOM) bit */
8
      __HAL_CEC_LAST_BYTE_TX_SET(hcec);
9
      hcec->Instance->TXDR = *hcec->pTxBuffPtr++;
10
    }
11
    else
12
    {  
13
      hcec->Instance->TXDR = *hcec->pTxBuffPtr++;
14
      hcec->TxXferCount--;
15
    }  
16
    /* clear Tx-Byte request flag */
17
    __HAL_CEC_CLEAR_FLAG(hcec,CEC_FLAG_TXBR); 
18
  }

Problem:
Statt
1
    if (hcec->TxXferCount == 0U)

gehört dort
1
    if (hcec->TxXferCount == 1U)

rein.
Ansonsten wird falsch gezählt und ein Byte zu viel verschickt.


Jetzt muss ich schauen, wie ich den Bug an STM kommunizert bekomme.

Viele Grüße,

Tilo

von Tilo (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Update

Ind er Zwischenzeit läuft alles.

Leider hat der CEC-Teil einen Hardware Bug:
Man muss den Listen Mode auf "Receive all Messages" stellen.
Im Transmitter ist ein Bug der dafür sorgt, dass die Daten an andere 
Teilnehmer nicht sauber gefiltert werden. DAs löst dann RX Overflow 
Fehler aus.
Hat mich einige Zeit gekostet.

Ich hab ein Errata zum 042, allerdings leider nicht zum 072 gefunden :(

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]
  • [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.