Partage
  • Partager sur Facebook
  • Partager sur Twitter

lire lecteur NFC Writer

3 juin 2021 à 11:03:47

Bonjour,

je suis sur linux et pour un projet d'école je doit lire des carte NFC.

a la disposition j'ai une raspberry 3 et un lecteur "nfc writer ER302"

je n'arrive pas a lire une carte , je ne comprend pas comment faire , le code proposer :

#include <stdio.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h> // to get close() define
#include <sys/ioctl.h>

// Make sure you have installed the SiLabs's version of cp210x.c driver
// which has these IOCTLs implemented.
#define IOCTL_GPIOGET		0x8000
#define IOCTL_GPIOSET		0x8001

#define CP2108

int main()
{
	int fd;
	printf( "CP210x Serial Test\n");
	fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
	if (fd == -1)
	{
		printf( "Error opening port /dev/ttyUSB0\n");
		return 1;
	}
	// mask = 3: gpio #1 and #0; value = 2: set #1, clear #0
	// Clearing GPIO turns LED on on SiLabs blue EK boards.
#ifdef CP2108
	unsigned short gpioread = 0x3333;
	unsigned long gpio = 0x00020003;
#else
	unsigned char gpioread = 0x33;
	unsigned short gpio = 0x0203;
#endif
	ioctl(fd, IOCTL_GPIOGET, &gpioread);
	printf( "gpio read = %x\n", gpioread);

	printf( "gpio to write = %lx\n", gpio);
	ioctl(fd, IOCTL_GPIOSET, &gpio);

	ioctl(fd, IOCTL_GPIOGET, &gpioread);
	printf( "gpio read = %x\n", gpioread);

	close(fd);
	return 0;
}

resultat : 

pi@raspberrypi:~/cp210x $ ./cp210x_gpio_example
CP210x Serial Test
gpio read = 3333
gpio to write = 20003
gpio read = 3333

sa arrive a ouvrir le lien avec le lecteur USB (open /dev/ttyUSB0) , mais je ne comprend pas comment récupérai le code de la carte .

Merci d'avance pour votre aide .



modif:

j'ai test un autre code :

    int fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
    unsigned short gpioread = 0x3333;
    if (fd == -1) {
        std::cerr << "Error opening port /dev/ttyUSB0" << std::endl;
        return 1;
    }
    
    if (ioctl(fd, IOCTL_GPIOGET, &gpioread) < 0) {
        
        std::cerr << "error ioctl : "<< explain_ioctl(fd, IOCTL_GPIOGET, &gpioread)<< std::endl;
        exit(EXIT_FAILURE);
    }
    
    return 0;

j'ai une erreur :

error ioctl : ioctl(fildes = 3 "/dev/ttyUSB0", request = _IO(0x80, 0), void *data = 0x7EA949DE) failed, unknown system error (524)

autre info :

pi@raspberrypi:~ $ sudo lsusb
Bus 001 Device 005: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP2102/CP2109 UART Bridge Controller [CP210x family]
pi@raspberrypi:~/CP210x $ lsmod | grep cp210x
cp210x                 24576  0
usbserial              36864  1 cp210x
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 5.10.17-v7+ #1421 SMP Thu May 27 13:59:01 BST 2021 armv7l GNU/Linux
picocom v3.1

port is        : /dev/ttyUSB0
flowcontrol    : none
baudrate is    : 115200
parity is      : none
databits are   : 8
stopbits are   : 1
escape is      : C-a
local echo is  : no
noinit is      : no
noreset is     : no
hangup is      : no
nolock is      : no
send_cmd is    : sz -vv
receive_cmd is : rz -vv -E
imap is        :
omap is        :
emap is        : crcrlf,delbs,
logfile is     : none
initstring     : none
exit_after is  : not set
exit is        : no

Type [C-a] [C-h] to see available commands
Terminal ready



-
Edité par di20 4 juin 2021 à 13:35:17

  • Partager sur Facebook
  • Partager sur Twitter
4 juin 2021 à 12:03:33

Je suis vraiment désespéré je ne comprend pas comment faire 

script d'installation :

sudo apt-get update -y && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y
sudo apt install -y qt5-default gpiod libgpiod-dev libexplain-dev 
sudo apt-get install raspberrypi-kernel-headers

mkdir driver
cd driver
wget http://www.silabs.com/documents/login/software/Linux_3.x.x_4.x.x_VCP_Driver_Source.zip
unzip Linux_3.x.x_4.x.x_VCP_Driver_Source.zip
rm Linux_3.x.x_4.x.x_VCP_Driver_Source.zip
make
sudo cp cp210x.ko /lib/modules/$(uname -r)/kernel/drivers/usb/serial
sudo insmod /lib/modules/$(uname -r)/kernel/drivers/usb/serial/usbserial.ko
sudo insmod cp210x.ko
reboot

pour les test :

pi@raspberrypi:~/driver $ g++ cp210x_gpio_example.c -o cp210x_gpio_example
pi@raspberrypi:~/driver $ ./cp210x_gpio_example
CP210x Serial Test
gpio read = 3333
gpio to write = 20003
gpio read = 3333
pi@raspberrypi:~/driver $ g++ -lgpiod cp210x_gpio_example_gpiolib.c -o cp210x_gpio_example_gpiolib
pi@raspberrypi:~/driver $ ./cp210x_gpio_example_gpiolib /dev/gpiochip0 0
Running: GPIO example using gpiolib!
Request bulk output error

savez vous si j'ai oublier d'installer un truc ou de faire une commande ,merci d'avance pour votre aide ou piste 



  • Partager sur Facebook
  • Partager sur Twitter
4 juin 2021 à 16:42:23

Techniquement si tu peux utiliser picocom tu n'as pas besoin d'installer un driver non libre qui plus est à priori totalement obsolète. C'est vraiment chiant quand les fabricants ne jouent pas le jeu de la portabilité. Il n'y a pas que Linux et Windows dans la vie.

Pour ma part je travaille avec des pcProx (RF ideas) et on peut les piloter entièrement avec des lignes ASCII via le port série (simulé par USB). Aucun driver, 100% langage agnostic. Au top. Pensez y pour vos prochains périphériques.

De ce que je lis dans la documentation il active aussi un port COM (série) donc il doit peut-être y avoir un moyen de communiquer avec lui sans passer par un module noyau. Je n'arrive pas à mettre la main dessus par contre.

  • Partager sur Facebook
  • Partager sur Twitter

git is great because Linus did it, mercurial is better because he didn't.

4 juin 2021 à 19:01:06

Hors de l'Église, point de salut ...
Déjà les gens passent pour hérétiques sur Linux avec des ordi "convventionnels".
Si on va dans des trucs plus tordus ..
  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

4 juin 2021 à 19:38:28

Bonjour/bonsoir Markand,

merci pour ton aide j'ai test sans installer leur version :

install:

sudo apt-get update -y && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y
sudo apt install -y qt5-default gpiod libgpiod-dev libexplain-dev picocom
sudo apt-get install raspberrypi-kernel-headers

mkdir driver
cd driver
wget http://www.silabs.com/documents/login/software/Linux_3.x.x_4.x.x_VCP_Driver_Source.zip
unzip Linux_3.x.x_4.x.x_VCP_Driver_Source.zip

pour picocom:

pi@raspberrypi:~/driver $ picocom /dev/ttyUSB0
picocom v3.1

port is        : /dev/ttyUSB0
flowcontrol    : none
baudrate is    : 9600
parity is      : none
databits are   : 8
stopbits are   : 1
escape is      : C-a
local echo is  : no
noinit is      : no
noreset is     : no
hangup is      : no
nolock is      : no
send_cmd is    : sz -vv
receive_cmd is : rz -vv -E
imap is        :
omap is        :
emap is        : crcrlf,delbs,
logfile is     : none
initstring     : none
exit_after is  : not set
exit is        : no

Type [C-a] [C-h] to see available commands
Terminal ready

j'ai test de relancer les 2 code : (toujours des erreurs)

pi@raspberrypi:~/driver $ ./cp210x_gpio_example_gpiolib /dev/gpiochip0 0
Running: GPIO example using gpiolib!
Request bulk output error

./codeMaison # code dans le sujet dans modif
error ioctl : ioctl(fildes = 3 "/dev/ttyUSB0", request = _IO(0x80, 0), void *data = 0x7E83099E) failed, Inappropriate ioctl for device (25, ENOTTY) because fildes is a usb ttyUSB character special device that does not support the ioctl _IO(0x80, 0) system call

si j'ai bien compris le problème viens du driver "device that does not support the ioctl

je n'est pas la possibilité de changer de capteur je suis obliger  de l'utiliser (école) , j'ai regarde un peut le capteur que tu propose son systeme de fonctionnement est bien mais un  peut chère 

si vous avez une idée de comment lire une carte sur Raspberry avec ce capteur je prend .

merci d'avance.

  • Partager sur Facebook
  • Partager sur Twitter