Serielle Verbindung mit ttyAMA0 erst OK nach minicom

  • Hallo,
    folgendes Scenario:
    ich habe den Rpi über ttyAMA0 mit einem AVR seriell verbunden.


    Auf dem Rpi befindet sich ein html-php file. Dort wird die ttyAMA0 wie folgt definiert:


    require "php_serial_class.php";
    $serial=new phpSerial;
    $serial->deviceSet("/dev/ttyAMA0");
    $serial->confBaudRate(9600);
    $serial->confCharacterLength(8);
    $serial->confParity("none");
    $serial->confStopBits(1);
    $serial->confFlowControl("none");


    dann


    $serial->deviceOpen();


    Das Problem ist folgendes:


    Die Verbindung funktioniert erst, wenn man einmal minicom startet und wieder beendet.
    Vorher hängt sich die Verbindung auf.
    (Mit minicom kann man ohne Probleme Commands senden und Daten empfangen)


    Nach minicom-Start-Stop funktioniert alles einwandfrei.


    Wer hat nen Tip???


    Gruss
    Ulko

  • Moin,


    obwohl das imho das falsche Forum ist (das wäre in "Mikrocontroller" besser aufgehoben), und ich PHP nur rudimentär kenne, liegt Dein Problem darin, dass der serielle Anschluss per default buffert. Mit anderen Worten, Du musst die serielle Schnittstelle auf Einzelzeichen (Raw-Mode) einstellen, sonst wartet der bis zum nächsten <RETURN> oder bis der Buffer voll ist.


    cheers,
    -ds-

  • Hi dreamshader,
    mit sudo stty -F /dev/ttyAMA0 raw
    leider kein erfolg:(


    Mit stty -F /dev/ttyAMA0 -clocal brkint ixany imaxbel iutf8
    leider auch kein Erfolg:(
    Die dort angegebenen Parameter sind die, die nach "Einmal minicom starten" anders sind als nach dem booten.


    Vielleicht ganz andere Ursache???


    In der Funktion



    kreiselt das Programm. Und es werden auf der AMA0 ständig einzelne Zeichen ausgegeben?????????????
    Weiss nicht weiter....
    ulko

  • Wieso möchtest du das denn über PHP machen?


    Also ich hab das bei mir wie folgt gemacht (als root)

    Code
    stty 9600 -F /dev/ttyAMA0
    cat /dev/ttyAMA0

    Wichtig ist das beide Devices mit der selben Geschwindigkeit arbeiten


    Allerdings ist es ganz wichtig das du vorher UART erst verwendbar machst


    Die UART-Schnittstelle wird nämlich bei Raspbian wheezy standardmässig als serielle Konsole genutz. Damit die UART-Schnittstelle anderweitig genutzt werden kann, muss diese Funktion erst deaktiviert werden...


    Dazu in der Datei /boot/cmdline.txt folgende Parameter löschen:

    Code
    console=ttyAMA0,115200 kgdboc=ttyAMA0,115200


    Anschliessend sollte die Zeile wie folgt aussehen:

    Code
    dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait


    Ausserdem muss in der Datei /etc/inittab folgende Zeile durch voranstellen eines # auskommentiert werden:

    Code
    # T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100



    Anschliesend rebooten und dann kannst du UART verwenden


    Mögliches Problem könnte aber auch sein dass der www-data Benutzer vom apache2 kein Zugriff auf UART hat. Das könntest du mit dem Befehl sudo chmod a+rw /dev/ttyAMA0 lösen



    quelle: https://asciich.ch/wordpress/u…f-dem-raspberrypi-nutzen/

  • Hi,
    na klar arbeiten beide Seiten mit 9600Bd.
    na klar hab ich die Änderungen in cmdline und inittab gemacht.


    Es bleibt dabei: Alles ist OK, wenn einmal minicom kurz gestartet und sofort mit ctrl/a Q beendet wird.


    PHP deshalb, weil auf Rpi ein webserver läuft. Mit Client wird dann die html/php-Seite aufgerufen un Befehle an AVR gesendet.

  • Hallo,
    nach längerer Zeit hab ich mich mal wieder an das Problem gemacht.


    Wenn ich den Befehl


    sudo stty 9600 -F /dev/ttyAMA0 -hupcl srtscts ignbrk -icrnl -opost -onlcr -isig -icanon -ech -eche -echoctl -echoke


    gebe, ist ttyAMA0 so gesetzt wie nach minicom Start. Damit ist alles OK.


    Meine Frage jetzt:
    Wie und wo kann ich diesen Befehl beim booten automatisch ausführen?


    Gruss
    ulko