PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RP6 USB-Kommunikation; Keine Reaktion & alle LED's aus?



challenger92
06.04.2012, 19:14
Hallo,
ich will meinen rp6 über usb steuern. Am PC funktioniert das ganz gut, mit diesem simplen Code:

//Init
var Port = new SerialPort("com5", 38400, Parity.None, 8, StopBits.One);
Port.Open();
Port.Write("start");
Port.DataReceived += new SerialDataReceivedEventHandler(Port_DataReceived);
Allerdings will ich es nicht vom PC, sondern von meine .NET Gadgetgeer aus steuern, vielleicht kennt das jemand hier.
Der Code ist ebenfalls c# und sieht ganz ähnlich aus, nur leider funktioniert es nicht :(

static void DeviceConnectedEvent(USBH_Device device)
{

Debug.Print("Device connected");

//Debug.Print((device.TYPE == USBH_DeviceType.Serial_FTDI).ToString());
usb = new USBH_SerialUSB(device, 38400, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
usb.Open();
WriteMessage("start");
new Thread(new ThreadStart(Listener)).Start();
}




public static void WriteMessage(String message)
{
byte[] bytes = StringToByteArray(message);
usb.Write(bytes, 0, bytes.Length);
}

Und zwar wird der Code zwar ohne Fehlermeldung ausgeführt, aber es kommt keine Antwort vom RP6 und dessen LED's gehen alle aus.
Ich muss dann das USB-Kabel trennen, dann gehen sie wieder an... Weiß jemand woran das liegt, bzw was für Gründe es haben könnte das alle LED's ausgehn?

MfG
challenger92

RolfD
08.04.2012, 14:35
Mal ins Blaue vermutet - das "USB Kabel" ist quasi ein Wandler von USB auf RS232 mit 5 V Pegel. Dazu nötig ist auf der Geräteseite ein Treiber den den Wandler im System als Serial Device einbindet und als COMx im Gadgetgeer bereit stellt. Ist das der Fall? Wenn ja, sollte die Hardware genau so eingestellt sein wie sonst im PC was Baudrate Stopbits, xon/xoff usw. angeht. Schaut man sich nun Schaltpläne vom RP6 und USB Wandler an, sieht man das der Wandler über das DTR Signal ein RESET der M32 erzeugen kann. Folglich vermute ich, das die DTR Leitung vom Gadgetgeer anders gesteuert wird als der PC das macht und somit den rp6 fälschlicher Weise resettet oder gar im dauerreset hält. Eigentlich hat die Leitung eine andere Funktion aber sowas wird gern für solche Fälle zweckentfremdet, da man so Steuerleitungen (wie z.B. Reset) bekommt die sonst eigentlich nicht vorhanden wären. Das Verhalten vom RP6 am Gadgetgeer wäre damit zu erklären, obs auch wirklich daran liegt... keine Ahnung.
Um solche Probleme auszuschließen gehört für mich da (auf das RP6 Board) ein Jumper hin... mit dem man das DTR Signal als Reset hardwareseitig abschalten kann. Ist leider nicht vorgesehen, lässt sich aber durch eine Platinenunterbrechung und bischen Lötarbeit nachrüsten...
Gruß RolfD

shedepe
08.04.2012, 15:25
Die Frage ist auch ob die SerialPort.Write Funktion bei dem String "start" die gleichen Bytes sendet wie deine WriteMessage Funktion. Ansonsten das Beachten was bereits RolfD geschrieben hat

RolfD
09.04.2012, 15:48
Ich hab jetzt endlich diesen Gadgeteer gefunden... ist es das hier? http://www.ghielectronics.com/catalog/product/297
Wäre einfacher gewesen wenn du mehr infos dazu schreibst.
Also dieses Teil dengelt man wohl am besten per serial/UART ohne Spannungswandler für RS232 an - wobei zu berücksichtigen ist, das nicht alle ARM7 boards mit 5V Pegel klar kommen, manche laufen mit nur 3,3V und benötigen einen Pegelwandler. Es macht wenig Sinn, den USB Host zu verwenden da für den FTDI Chip auf der anderen Seite erst ein Treiber her müsste. Ansonsten bleibt die Problematik des DTR Signals (Welches man im RP6 Loader sogar von Hand steuern kann - Target Control/Hold in Reset). Das Modul dürfte sich aber auch erstklassig über SPI/TWI (ggf. mit Wandler) andengeln lassen. Allerdings frage ich mich grade, wozu ein ARM7 Board, wenn einfachste Zusammenhänge schon Probleme bereiten. SBC Devices wie Gatgeteer, Arduino, RP6 usw. sind kein Lego - weder Hardware- noch Softwareseitig.
Gruß RolfD

radbruch
09.04.2012, 16:09
Das Signal für den Reset ist das RTS:
https://www.roboternetz.de/community/threads/51989-RP6-Terminal-%C3%BCber-PC-ansprechen?p=502363&viewfull=1#post502363
https://www.roboternetz.de/community/threads/45506-RP6-USB-Serial-adapter-f%C3%BCr-andere-%C2%B5C-nutzen-%2Agel%C3%B6st%2A?p=436590&viewfull=1#post436590

challenger92
09.04.2012, 16:20
Das Problem ist, der Gadgetgeer hat zwar einen FTDI - Treiber an Bord, aber dieser unterstüzt die Steuerung des RTS-Signal (noch) nicht. Kann man da RP6-Seitig was machen? In deinem Thread radbruch hast du eine Möglichkeit ja schonmal beschrieben, aber danach kann man den RP6 nicht mehr flashen oder?

RolfD
09.04.2012, 17:51
Ach RTS wars .. nicht DTR.. auch gut. Ja das gekreuzte Kabel... *seufz* Lösung ist trotzdem ein Jumper in der MRESET Leitung des RP6, das lässt dir auch die Möglichkeit den USB-Dongle weiterhin am PC mit RP6Loader zu nutzen. Man kann sich aber auch selbst nen Kabel konfektionieren, wo das RTS nicht an den RP6 durchgereicht wird - mit Microschiebeschalter oder so...
Gruß Rolf

challenger92
09.04.2012, 18:33
Wo genau muss ich den Jumper setzen? Habe ihn jetzt zwischen MRESET und VDD gesetzt. Jetzt bleibt der Bot schonmal an, die grüne LED blinkt wenn ich die Verbindung herstelle :)
Aber er ignoriert den Startbefehl, den ich vom Gadgetgeer aus sende. Was habe ich jetzt wieder falsch gemacht?:confused:

Edit: muss am Gadgetgeer liegen, am PC ist sein Verhalten ganz normal, außer dass flashen nicht geht.
Edit2: hat sich erledigt kleiner Fehler im Code, jetzt funktioniert es :) Danke!!!

RolfD
09.04.2012, 22:25
Ich halte nichts davon, Leitungen ohne Vorwiderstand gegen GND oder VDD zu ziehen, ich meinte den Jumper als Brücke um eine unterbrochene Leiterbahn bei Bedarf zu verbinden aber scheinbar drücke ich mich zu ungenau aus...
Gruß Rolf

SlyD
10.04.2012, 20:16
Hallo,


> Habe ihn jetzt zwischen MRESET und VDD gesetzt.

--> BÖSE, nicht machen!
(das erzeugt einen Kurzschluss am RTS Pin wenn du das USB Interface anschließt und der Pin low ist)


Einen passenden Jumper gibts schon auf dem Mainboard - der ist aber standardmäßig nicht bestückt (weil man den normalerweise nicht braucht). Einfach eine Leiterbahn auf der Rückseite durchtrennen, dann den Jumper einlöten. Eigentlich gedacht um zwischen Boot und ISP umzuschalten.
s.a. http://www.rn-wissen.de/index.php/RP6#ISP_.28In_System_Programming.29

Es ist übrigens völlig normal und gängige Praxis die Steuerleitungen für sowas zu verwenden.


Ich frage mich allerdings auch warum Du überhaupt den USB Adapter dazwischen schalten willst? Das ist an einem Mikrocontroller ziemlich nutzloser Overhead - der USB Adapter emuliert ja eine serielle Schnittstelle / UART damit mans einfach am PC nutzen kann. Der Gadgeteer hat aber doch sicher irgendwo einen normalen UART frei?
Da einfach einen 3.3V <-> 5V Levelshifter zwischen und fertig. Da brauchst Du auch keine USB Software Treiber und nix für.




MfG,
SlyD

PS:
Im Schaltplan des USB Interfaces sind die Text Labels DTR und RTS vertauscht (war bis vor kurzem nur niemandem aufgefallen).
Macht für die Hardwarefunktion natürlich nix, ist nur der Text verdreht gewesen.
Also es ist natürlich RTS an der Reset Leitung.

Das PDF muss nur noch auf der Webseite geupdated werden...