Probleme mit MSP430 Bluetooth und UART

Texas Instruments bietet Quellcode für einen Bluetooth-Stack (Serial Port Profile) an, der von Mindtree geschrieben wurde. Es läuft auf einem MSP430-Mikroprozessor und ist mit dessen Basisband-Controller-Chip (dh dem HF-Chip) verbunden. Diese nutzt das Betriebssystem FreeRTOS. Diese Software kommt in Form mehrerer Demos; Die, die ich verwendet habe, heißt Beschleunigungsmesser-Demo. Dieser Chipsatz ist Teil der benutzerdefinierten Handheld-Hardware, die ich entwickle. Ich verwende die GA1.0-Version (modifizierte Beschleunigungsmesser-Demo, um auf der benutzerdefinierten Hardware zu funktionieren). Ich versuche einfach, Daten zwischen Bluetooth SPP und einem UART zu übertragen, der mit 78K läuft. Ich habe den SNIFF-Modus deaktiviert und deaktiviere RTS im UART-Interrupt. Im Interrupt wird keine Verarbeitung durchgeführt, außer einem Schreiben in einen Puffer und einer Semaphor-Aufnahme. Ich habe eine Aufgabe mit niedriger Priorität, die das Puffern behandelt.

Alles, was ich brauche, um den Chip zu tun, ist eine Verbindung zwischen dem Bluetooth und einem UART herzustellen, der mit 76K läuft (dieser UART verbindet sich mit unserem DSP-Prozessor). Derzeit ist der DSP das Gehirn der Hardware und kommuniziert über USB mit einer PC-GUI. Ich möchte den DSP-UART nehmen und ihn stattdessen über Bluetooth weiterleiten, ohne dass der DSP weiß oder sich darum kümmert, womit sein UART verbunden ist.

Wie im Moment aufgebaut, verbindet sich die Software korrekt über Bluetooth und ich habe das Senden und Empfangen von Daten überprüft. Bei niedrigen Tarifen funktioniert das hervorragend. Da der DSP immer eine Statusmeldung über seinen UART sendet, kann ich einen PC mit einem Bluetooth-Dongle an die Hardware anschließen und Putty (Serial Port Terminal) verwenden, um zu sehen, wie diese Statusmeldung korrekt rüberkommt. Sobald ich jedoch versuche, eine Verbindung mit unserer PC-GUI herzustellen, ist der resultierende RX-Verkehr auf dem Bluetooth so, dass die Software die DSP-UART-Interrupts nicht mehr rechtzeitig bedienen kann. Ohne Bluetooth RX erhalte ich über 100 UART-Interrupts, bevor meine Aufgabe die Daten verarbeiten kann, selbst wenn die Priorität der Aufgabe auf die höchste eingestellt ist. Ich kann mir vorstellen, dass es eine große Größenordnung mehr ist, sobald RX-Daten eingehen, was uns derzeit zum Absturz bringt. Bedauerlicherweise,

Meine Versuche, dies zu beheben, haben immer zu einem von drei Ergebnissen geführt: mein UART-Interrupt ist übergelaufen, der BT-UART-Interrupt ist übergelaufen oder mein UART-Puffer ist übergelaufen, wenn der Stapel die Daten nicht rechtzeitig senden kann. Der Entwicklerleitfaden sagt, dass bei 18 MHz und 115 K der durchschnittliche Datendurchsatz 84 K beträgt und die durchschnittliche CPU-Auslastung 10,7 % beträgt, aber die Software kann nicht mit einem 78 K UART mithalten.

An diesem Punkt befürchte ich, dass der Bluetooth-UART-Interrupt (Teil des Stacks von Mindtree) zu viel CPU beansprucht, um die Verarbeitung aller anderen Interrupts mit der von uns gewünschten Rate zu ermöglichen.

Hatte jemand Erfolg bei der Integration des TI/MindTree-Bluetooth-Stacks? Wenn ja, sind Sie auf dieselben Probleme gestoßen? Ich suche im Grunde nach allen Vorschlägen, wie man diese Probleme überwinden kann.

Ich musste es zweimal lesen, um zu verstehen, was Ihre eigentliche Frage ist, und selbst dann bin ich mir nicht sicher.
Willst du uns aufklären?
@cbursk: tl;dr;
Entschuldigung, es waren einige späte Nächte damit. Ich habe meine ursprüngliche Einreichung bearbeitet, um eine spezifischere Frage hinzuzufügen. Ich hoffe nur, dass jemand hier auf die gleichen Hindernisse gestoßen ist wie ich und Vorschläge hatte.
Es kann hilfreich sein, wenn Sie uns mitteilen, welchen msp430-Chip Sie verwenden, da es einen Unterschied zwischen USART und USCI gibt.
MSP430BT5190 + CC2560
Ich versuche, besser zu verstehen, was vor sich geht. Soweit ich Ihre Frage verstehen kann, stellt der DSP über UART eine Verbindung zum mps430 her und der MSP430 verbindet sich mit dem Radio (Bluetooth) und vom Radio zum PC . Ist das richtig? Und Sie sagen, dass der msp430 mit den Daten, die Sie passieren möchten, nicht Schritt halten kann? Wenn das der Fall ist, denke ich, dass Sie auf dem richtigen Weg sind, dass etwas überläuft und nicht gut ineinandergreift. Übrigens, warum können Sie DMA nicht verwenden, aus dem Datenblatt sollten Sie es für diesen Zweck zur Verfügung haben.

Antworten (1)

Danke für alle Kommentare. Ich habe von TI die folgende Antwort zu diesem Problem erhalten.

„Aufgrund einer im Mindtree-Stapel angeborenen Eigenschaft können Sie im MSP430 keinen Interrupt generieren, während Daten über BT gesendet/empfangen werden. Daher sehen Sie eine Begrenzung des Ein-/Ausgangsdurchsatzes des Teils. Dies ist etwas, das Mindtree arbeitete daran und es wäre gut, sie durch Ihren Beitrag im E2E-Forum zu fragen, da der Mindtree-Ingenieur „Balaji Jeyaraman“ Ihnen möglicherweise sagen kann, ob sie einen Weg gefunden haben, dies zu umgehen oder den Stack aktualisiert haben /Probleme beim Laden

In ähnlicher Weise hat TI ein Wiki (anders als das Bluetooth-Wiki) veröffentlicht, das sich nur auf diese „BT-Bridge-Anwendung“ konzentriert. Es kann hier gefunden werden: CC256x MT UART BRIDGE Wir haben ähnliche Einschränkungen gesehen und die Datenrate, die Sie erhalten, ist etwas schneller als das, was wir gesehen haben. "

Also nicht die Antwort, nach der ich gesucht habe, aber ich dachte, ich poste sie hier für andere. Danke schön.