UART und NFClib

  • Hallo,

    ich habe folgendes Problem:

    Ich habe einen Raspberry pi3 und ein NFC Modul (PN532).

    Nun möchte ich das NFC Modul per UArt mit dem Raspberry verbinden und so nfc chips auslesen.

    Angeschlossen habe ich die beiden Platinen wie folgt:

    Raspberry Nfc

    Pin 2 (5v) - 5V

    Pin 6 (Gnd) - Gnd

    Pin 8 (Gpio14) - SSEL/SCL/RX

    Pin 10 (Gpio15) - Mosi/SDA/TX


    Ich bin am Leitfaden dieser Page entlang gegangen.

    (https://webnist.de/pn532-nfc-m…aspberry-pi-anschliessen/)

    Bei der abschließenden Überprüfung, zeigt er mir dieses an:


    pi@raspberrypi:~/libnfc/examples $ sudo ./nfc-poll

    /home/pi/libnfc/examples/.libs/lt-nfc-poll uses libnfc libnfc-1.7.1-191-g216145f

    error libnfc.driver.pn532_uart pn53x_check_communication error

    error libnfc.driver.pn532_uart Unable to transmit data. (TX)

    lt-nfc-poll: ERROR: Unable to open NFC device.


    Hat einer eine Idee, wie ich dieses Problem lösen kann?

  • Moin Mava499,

    erstmal: Herzlich Willkommen im Forum!


    Es wäre interessant zu wissen welches Modul du nun genau hast. Bei diesem Teil hast du mit 5V verloren.

    Geb bitte mal den Typ, genaue bezeichnung, oder den Link der Bestellung an.


    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Ich bin auf bei der Seite

    (https://www.schnatterente.net/…y-pi-pn532-breakout-board)

    auf die entsprechende Verkablung gekommen.

    PN532-Breakout-Board via UART an den Raspberry Pi anschließen

    Das Hardware-Setup für UART ist ähnlich simpel, wie das für SPI. Beide Jumper werden auf "Off" (="GND") gestellt. Mit vier Jumperkabeln verbindet man die beiden Platinen:

    • RPi GPIO Pin 2 (5V) ↔ PN532 5V
    • RPi GPIO Pin 6 (GND) ↔ PN532 GND
    • RPi GPIO Pin 14 (TXD) ↔ PN532 SSEL/SCL/RX
    • RPi GPIO Pin 15 (RXD) ↔ PN532 MOSI/SDA/TX



    und das hier ist die Platine die ich vorliegen habe.

    https://www.amazon.de/SunFounder-Development-Antenna-Raspberry-13-56MHz/dp/B00REDXYI6/ref=sr_1_2?ie=UTF8&qid=1507211777&sr=8-2&keywords=nfc+modul+raspberry (Affiliate-Link)

  • Moin Mava499,

    du hast nun die Pins 14 und 15 genommen?

    Dort ist aber nicht RXD und TXD. Auf Schnatterente steht GPIO14 und 15 entspricht PIN 8 und 10.


    Aber sieh selber....


    Dann denke an den Tip in Beitrag #2!!!


    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • ja ich habe pin 8 und 10 bentzt

    und ich habe grade gemessen es liegen 3,3v an pin 8 zu gnd und 3,3v pin 10 zu gnd an.

  • Moin Mava499,


    kann man das nfc-poll irgendwo nachlesen? Oder ist es so klein, das du es hier reinstellen kannst?.


    So, ich geh nun essen.

    Stunden später mehr.


    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • ich hab mich mal auf die suche danach gemacht und habe eine nfc-poll datei gefunden.

    In der steht folgendes:


    #! /bin/bash


    # nfc-poll - temporary wrapper script for .libs/nfc-poll

    # Generated by libtool (GNU libtool) 2.4.6 Debian-2.4.6-2

    #

    # The nfc-poll program cannot be directly executed until all the libtool

    # libraries that it depends on are installed.

    #

    # This wrapper script should never be moved out of the build directory.

    # If it is, it will not operate correctly.


    # Sed substitution that helps us do robust quoting. It backslashifies

    # metacharacters that are still active within double-quoted strings.

    sed_quote_subst='s|\([`"$\\]\)|\\\1|g'


    # Be Bourne compatible

    if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then

    emulate sh

    NULLCMD=:

    # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which

    # is contrary to our usage. Disable this feature.

    alias -g '${1+"$@"}'='"$@"'

    setopt NO_GLOB_SUBST

    else

    case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac

    fi

    BIN_SH=xpg4; export BIN_SH # for Tru64

    DUALCASE=1; export DUALCASE # for MKS sh


    # The HP-UX ksh and POSIX shell print the target directory to stdout

    # if CDPATH is set.

    (unset CDPATH) >/dev/null 2>&1 && unset CDPATH


    relink_command="(cd /home/pi/libnfc/examples; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z \"\${LD_LIBRARY_PATH+set}\" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export LD_LIBRARY_PATH; }; }; PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin; export PATH; gcc -I../libnfc -I.. -g -O2 -Wall -pedantic -Wextra -std=c99 -Du_int8_t=uint8_t -Du_int16_t=uint16_t -o \$progdir/\$file nfc-poll.o ../libnfc/.libs/libnfc.so ../utils/.libs/libnfcutils.a /usr/lib/libnfc.so -Wl,-rpath -Wl,/home/pi/libnfc/libnfc/.libs)"


    # This environment variable determines our operation mode.

    if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then

    # install mode needs the following variables:

    generated_by_libtool_version='2.4.6'

    notinst_deplibs=' ../libnfc/libnfc.la'

    else

    # When we are sourced in execute mode, $file and $ECHO are already set.

    if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then

    file="$0"


    # A function that is used when there is no print builtin or printf.

    func_fallback_echo ()

    {

    eval 'cat <<_LTECHO_EOF

    $1

    _LTECHO_EOF'

    }

    ECHO="printf %s\\n"

    fi


    # Very basic option parsing. These options are (a) specific to

    # the libtool wrapper, (b) are identical between the wrapper

    # /script/ and the wrapper /executable/ that is used only on

    # windows platforms, and (c) all begin with the string --lt-

    # (application programs are unlikely to have options that match

    # this pattern).

    #

    # There are only two supported options: --lt-debug and

    # --lt-dump-script. There is, deliberately, no --lt-help.

    #

    # The first argument to this parsing function should be the

    # script's ../libtool value, followed by no.

    lt_option_debug=

    func_parse_lt_options ()

    {

    lt_script_arg0=$0

    shift

    for lt_opt

    do

    case "$lt_opt" in

    --lt-debug) lt_option_debug=1 ;;

    --lt-dump-script)

    lt_dump_D=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%/[^/]*$%%'`

    test "X$lt_dump_D" = "X$lt_script_arg0" && lt_dump_D=.

    lt_dump_F=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%^.*/%%'`

    cat "$lt_dump_D/$lt_dump_F"

    exit 0

    ;;

    --lt-*)

    $ECHO "Unrecognized --lt- option: '$lt_opt'" 1>&2

    exit 1

    ;;

    esac

    done


    # Print the debug banner immediately:

    if test -n "$lt_option_debug"; then

    echo "nfc-poll:nfc-poll:$LINENO: libtool wrapper (GNU libtool) 2.4.6 Debian-2.4.6-2" 1>&2

    fi

    }


    # Used when --lt-debug. Prints its arguments to stdout

    # (redirection is the responsibility of the caller)

    func_lt_dump_args ()

    {

    lt_dump_args_N=1;

    for lt_arg

    do

    $ECHO "nfc-poll:nfc-poll:$LINENO: newargv[$lt_dump_args_N]: $lt_arg"

    lt_dump_args_N=`expr $lt_dump_args_N + 1`

    done

    }


    # Core function for launching the target application

    func_exec_program_core ()

    {


    if test -n "$lt_option_debug"; then

    $ECHO "nfc-poll:nfc-poll:$LINENO: newargv[0]: $progdir/$program" 1>&2

    func_lt_dump_args ${1+"$@"} 1>&2

    fi

    exec "$progdir/$program" ${1+"$@"}


    $ECHO "$0: cannot exec $program $*" 1>&2

    exit 1

    }


    # A function to encapsulate launching the target application

    # Strips options in the --lt-* namespace from $@ and

    # launches target application with the remaining arguments.

    func_exec_program ()

    {

    case " $* " in

    *\ --lt-*)

    for lt_wr_arg

    do

    case $lt_wr_arg in

    --lt-*) ;;

    *) set x "$@" "$lt_wr_arg"; shift;;

    esac

    shift

    done ;;

    esac

    func_exec_program_core ${1+"$@"}

    }


    # Parse options

    func_parse_lt_options "$0" ${1+"$@"}


    # Find the directory that this script lives in.

    thisdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'`

    test "x$thisdir" = "x$file" && thisdir=.


    # Follow symbolic links until we get to the real thisdir.

    file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'`

    while test -n "$file"; do

    destdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'`


    # If there was a directory component, then change thisdir.

    if test "x$destdir" != "x$file"; then

    case "$destdir" in

    [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;;

    *) thisdir="$thisdir/$destdir" ;;

    esac

    fi


    file=`$ECHO "$file" | /bin/sed 's%^.*/%%'`

    file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'`

    done


    # Usually 'no', except on cygwin/mingw when embedded into

    # the cwrapper.

    WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no

    if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then

    # special case for '.'

    if test "$thisdir" = "."; then

    thisdir=`pwd`

    fi

    # remove .libs from thisdir

    case "$thisdir" in

    *[\\/].libs ) thisdir=`$ECHO "$thisdir" | /bin/sed 's%[\\/][^\\/]*$%%'` ;;

    .libs ) thisdir=. ;;

    esac

    fi


    # Try to get the absolute directory name.

    absdir=`cd "$thisdir" && pwd`

    test -n "$absdir" && thisdir="$absdir"


    program=lt-'nfc-poll'

    progdir="$thisdir/.libs"


    if test ! -f "$progdir/$program" ||

    { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /bin/sed 1q`; \

    test "X$file" != "X$progdir/$program"; }; then


    file="$$-$program"


    if test ! -d "$progdir"; then

    mkdir "$progdir"

    else

    rm -f "$progdir/$file"

    fi


    # relink executable if necessary

    if test -n "$relink_command"; then

    if relink_command_output=`eval $relink_command 2>&1`; then :

    else

    $ECHO "$relink_command_output" >&2

    rm -f "$progdir/$file"

    exit 1

    fi

    fi


    mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null ||

    { rm -f "$progdir/$program";

    mv -f "$progdir/$file" "$progdir/$program"; }

    rm -f "$progdir/$file"

    fi


    if test -f "$progdir/$program"; then

    if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then

    # Run the actual program with our arguments.

    func_exec_program ${1+"$@"}

    fi

    else

    # The program doesn't exist.

    $ECHO "$0: error: '$progdir/$program' does not exist" 1>&2

    $ECHO "This script is just a wrapper for $program." 1>&2

    $ECHO "See the libtool documentation for more information." 1>&2

    exit 1

    fi

    fi

    Edited once, last by Mava499 ().

  • Moin Mava499,


    Danke!


    Wenn du ein ls -l /dev/ttyAMA0 eingibst, dann kommt keine Fehlermeldung? Es wird dir crw-rw---- 1 root dialout 204, 64 Okt 4 00:17 /dev/ttyAMA0 angezeigt.


    Dann noch ein cat /boot/config.txt. Da sollte irgendwo das enable_uart=1 stehen.


    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Hallo Bernd,

    ich habe die beiden Befehle eingeben.

    Beim ersten bekomme ich die gleiche rückmeldung wie du beschrieben hast.

    Beim zweiten steht der Befehl auch am ende der Zeile, ist somit auf vorhanden.

  • Moin Mava499,

    das war nur eine Kontrolle ob die serielle Schnittstelle auch da ist.


    Aber mir ist was anderes eingefallen

    Code
    Name: pi3-disable-bt
    Info: Disable Pi3 Bluetooth and restore UART0/ttyAMA0 over GPIOs 14 & 15
    N.B. To disable the systemd service that initialises the modem so it
    doesn't use the UART, use 'sudo systemctl disable hciuart'.
    Load: dtoverlay=pi3-disable-bt
    Params: <None>

    das ist ein Auszug aus der Readme in /boot/overlays

    Du solltest mal, testweise, das was hinter Load steht in die Config.txt schreiben. Dann reboot.


    //Edit

    Begründung. Ab RPi3 gibt es Bluetooth onboard. BT nutzt die UART0. Diese UART war bei den anderen RPi der ttyAMA0 zugewiesen.


    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

    Edited once, last by Bernd666 ().

  • Hallo,

    in welche config.txt datei muss das den bzw wo finde ich die?

    Ich habe in der libnfc nur config.h ; config.h.in ; config.log ; config.status ; config.sub

  • Super hat geklappt! Das Modul wurde erkannt und erkennt auch den NFC-Chip. Bekomme jetzt diese Meldung, bei der Eingabe von :sudo ./nfc-poll


    pi@raspberrypi:~/libnfc/examples $ sudo ./nfc-poll

    /home/pi/libnfc/examples/.libs/lt-nfc-poll uses libnfc libnfc-1.7.1-191-g216145f

    NFC reader: PN532 board via UART opened

    NFC device will poll during 30000 ms (20 pollings of 300 ms for 5 modulations)

    ISO/IEC 14443A (106 kbps) target:

    ATQA (SENS_RES): 00 04

    UID (NFCID1): fe fc 71 f1

    SAK (SEL_RES): 08

    Waiting for card removing...nfc_initiator_target_is_present: Target Released

    done.


    Dann kann ich mich ja jetzt weiter austoben.

    Besten Dank an Bernd und die anderen!

  • Moin Mava499,


    das freut uns.

    Denke aber daran, das dein Bluetooth nicht geht. Wer weiss was dir noch an Anwendungen einfällt.


    Dann, bitte, dein Thema als erledigt markieren.


    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.