# Problème avec le st25r95

**URL:** https://forum.6tron.io/t/probleme-avec-le-st25r95/50
**Category:** Support
**Created:** [Mars 24, 2025, 10:37 UTC](https://forum.6tron.io/t/probleme-avec-le-st25r95/50 "2025-03-24T10:37:12Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![Alexiisgrd](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.6tron.io/alexiisgrd/32/32_2.png) [@Alexiisgrd](https://forum.6tron.io/u/Alexiisgrd)
#### Post date: [Mars 24, 2025, 10:37 UTC](https://forum.6tron.io/t/probleme-avec-le-st25r95/50/1 "2025-03-24T10:37:12Z")

</div>

Bonjour,

Nous avons tenté d’utiliser le driver que vous nous avez fourni (st\_st25r59). Cependant, nous rencontrons un problème : l’overlay app ne fonctionne pas correctement avec le fichier samples/main.c et nous obtenons une erreur \_\_device\_dts\_ord\_66.

Pourriez-vous nous aider à réaliser un code permettant de valider le bon fonctionnement du composant ?

Merci d’avance pour votre assistance.

Cordialement,

Alexis Gairaud

---

<div class="post-metadata">

### Author: ![Sokario](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.6tron.io/sokario/32/33_2.png) [@Sokario](https://forum.6tron.io/u/Sokario)
#### Post date: [Mars 24, 2025, 1:13 UTC](https://forum.6tron.io/t/probleme-avec-le-st25r95/50/2 "2025-03-24T13:13:29Z")

</div>

Bonjour Alexis,

Je vais avoir besoin de quelques informations supplémentaires pour pouvoir identifier le problème :

- le contenu du fichier `devicetree_generated.h` situé dans `build/zephyr/include/generated/zephyr`,
- le contenu du fichier `prj.conf`,
- le contenu du ficher `app.overlay` ou tout autre `.overlay` utilisé dans les arguments de compilation,
- le contenu du fichier `CMakeLists.txt` si modifié,
- la ligne de commande employée pour la compilation.

Il est à noter que le driver **st25r95** n’est pas fonctionnel, c’est un «&nbsp;dummy&nbsp;» driver.  
Ceci étant, une première possibilité est que le `prj.conf` ne configure pas **CONFIG\_SENSOR** à la valeur **y** : `CONFIG_SENSOR=y`. Cette configuration active le driver du **st25r95** qui a son tour active le **SPI**. D’où le problème rencontré. Si cela ne règle pas le problème, j’aurais besoin des informations cité précédemment.

Logan Saint-Germain

---

<div class="post-metadata">

### Author: ![Nicolas](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.6tron.io/nicolas/32/34_2.png) [@Nicolas](https://forum.6tron.io/u/Nicolas)
#### Post date: [Mars 24, 2025, 5:38 UTC](https://forum.6tron.io/t/probleme-avec-le-st25r95/50/3 "2025-03-24T17:38:09Z")

</div>

Bonsoir,

Merci pour votre retour. Voici les informations demandées :

> **Fichier devicetree\_generated.h**
>
> ```auto
> /*
> * Generated by gen_defines.py
> *
> * DTS input file:
> * /home/n/nic.schmauch/Téléchargements/6tron-workspace/build/zephyr/zephyr.dts.pre
> *
> * Directories with bindings:
> * /home/n/nic.schmauch/Téléchargements/6tron-workspace/6tron/6tron_connector/dts/bindings, /home/n/nic.schmauch/Téléchargements/6tron-workspace/6tron/drivers/ams_as621x/dts/bindings, /home/n/nic.schmauch/Téléchargements/6tron-workspace/6tron/drivers/bosch_bno055/dts/bindings, /home/n/nic.schmauch/Téléchargements/6tron-workspace/6tron/drivers/honeywell_hpma115/dts/bindings, /home/n/nic.schmauch/Téléchargements/6tron-workspace/6tron/drivers/ilitek_ili9163c/dts/bindings, /home/n/nic.schmauch/Téléchargements/6tron-workspace/6tron/drivers/maxim_max17201/dts/bindings, /home/n/nic.schmauch/Téléchargements/6tron-workspace/6tron/drivers/microchip_mcp3425/dts/bindings, /home/n/nic.schmauch/Téléchargements/6tron-workspace/6tron/drivers/microcrystal_rv8803/dts/bindings, /home/n/nic.schmauch/Téléchargements/6tron-workspace/6tron/drivers/omron_2smpb-02e/dts/bindings, /home/n/nic.schmauch/Téléchargements/6tron-workspace/6tron/drivers/quectel_l86/dts/bindings, /home/n/nic.schmauch/Téléchargements/6tron-workspace/6tron/drivers/sensirion_scd4x/dts/bindings, /home/n/nic.schmauch/Téléchargements/6tron-workspace/6tron/drivers/te-connectivity_htu21d/dts/bindings, /home/n/nic.schmauch/Téléchargements/6tron-workspace/6tron/drivers/ti_tsc2003/dts/bindings, $ZEPHYR_BASE/dts/bindings
> *
> * Node dependency ordering (ordinal and path):
> * 0 /
> * 1 /aliases
> * 2 /chosen
> * 3 /soc
> * 4 /soc/interrupt-controller@e000e100
> * 5 /clocks
> * 6 /clocks/clk-hsi
> * 7 /clocks/pll
> * 8 /soc/rcc@40023800
> * 9 /soc/pin-controller@40020000
> * 10 /soc/pin-controller@40020000/adc_in5_pa5
> * 11 /soc/adc@40012400
> * 12 /dietemp
> * 13 /memory@20000000
> * 14 /sixtron-connector-1
> * 15 /sixtron-connector-1-adc
> * 16 /sixtron-connector-1-pwm
> * 17 /soc/pin-controller@40020000/i2c1_scl_pb8
> * 18 /soc/pin-controller@40020000/i2c1_sda_pb9
> * 19 /soc/i2c@40005400
> * 20 /smbus1
> * 21 /soc/i2c@40005800
> * 22 /smbus2
> * 23 /vref
> * 24 /clocks/clk-hse
> * 25 /clocks/clk-lse
> * 26 /clocks/clk-lsi
> * 27 /clocks/clk-msi
> * 28 /cpus
> * 29 /cpus/cpu@0
> * 30 /soc/pin-controller@40020000/gpio@40020000
> * 31 /gpio_keys
> * 32 /gpio_keys/button
> * 33 /leds
> * 34 /leds/led_0
> * 35 /soc/pin-controller@40020000/dac_out1_pa4
> * 36 /soc/dac@40007400
> * 37 /soc/dma@40026000
> * 38 /soc/eeprom@8080000
> * 39 /soc/interrupt-controller@40010400
> * 40 /soc/pin-controller@40020000/usart2_rx_pa3
> * 41 /soc/pin-controller@40020000/usart2_tx_pa2
> * 42 /soc/rcc@40023800/reset-controller
> * 43 /soc/serial@40004400
> * 44 /soc/serial@40004800
> * 45 /soc/serial@40004c00
> * 46 /soc/serial@40005000
> * 47 /soc/pin-controller@40020000/usart1_rx_pa10
> * 48 /soc/pin-controller@40020000/usart1_tx_pa9
> * 49 /soc/serial@40013800
> * 50 /soc/spi@40013000
> * 51 /soc/timer@e000e010
> * 52 /soc/watchdog@40002c00
> * 53 /soc/watchdog@40003000
> * 54 /soc/adc@40012400/channel@5
> * 55 /soc/flash-controller@40023c00
> * 56 /soc/flash-controller@40023c00/flash@8000000
> * 57 /soc/pin-controller@40020000/gpio@40020c00
> * 58 /soc/pin-controller@40020000/gpio@40021000
> * 59 /soc/pin-controller@40020000/gpio@40021400
> * 60 /soc/rtc@40002800
> * 61 /soc/rtc@40002800/backup_regs
> * 62 /soc/pin-controller@40020000/spi2_miso_pb14
> * 63 /soc/pin-controller@40020000/spi2_mosi_pb15
> * 64 /soc/pin-controller@40020000/spi2_sck_pb13
> * 65 /soc/spi@40003800
> * 66 /soc/spi@40003800/st25r95@1
> * 67 /soc/pin-controller@40020000/spi3_miso_pb4
> * 68 /soc/pin-controller@40020000/spi3_mosi_pb5
> * 69 /soc/pin-controller@40020000/spi3_sck_pb3
> * 70 /soc/spi@40003c00
> * 71 /soc/pin-controller@40020000/gpio@40020400
> * 72 /soc/pin-controller@40020000/gpio@40020800
> * 73 /soc/spi@40003c00/sx1272@0
> * 74 /soc/timers@40000000
> * 75 /soc/timers@40000000/counter
> * 76 /soc/timers@40000000/pwm
> * 77 /soc/timers@40000400
> * 78 /soc/timers@40000400/counter
> * 79 /soc/pin-controller@40020000/tim3_ch3_pb0
> * 80 /soc/timers@40000400/pwm
> * 81 /soc/timers@40000800
> * 82 /soc/timers@40000800/counter
> * 83 /soc/timers@40000800/pwm
> * 84 /soc/timers@40000c00
> * 85 /soc/timers@40000c00/pwm
> * 86 /soc/timers@40010800
> * 87 /soc/timers@40010800/counter
> * 88 /soc/timers@40010800/pwm
> * 89 /soc/timers@40010c00
> * 90 /soc/timers@40010c00/counter
> * 91 /soc/timers@40010c00/pwm
> * 92 /soc/timers@40011000
> * 93 /soc/timers@40011000/counter
> * 94 /soc/timers@40011000/pwm
> *
> * Definitions derived from these nodes in dependency order are next,
> * followed by /chosen nodes.
> */
> 
> ```

> **Fichier prj.conf**
>
> `CONFIG_SENSOR=y`

> **Fichier app.overlay**
>
> ```auto
> #include <zephyr/dt-bindings/gpio/sixtron-header.h>
> #include <zephyr/dt-bindings/display/panel.h>
> 
> &sixtron_spi {
> status = "okay";
> cs-gpios = <&sixtron_connector ADC1 GPIO_ACTIVE_LOW>;
> 
> nfc: st25r95@1 {
> compatible = "st,st25r95";
> spi-max-frequency = <2000000>;
> reg = <1>;
> wkup-gpios = <&sixtron_connector DAC GPIO_ACTIVE_LOW>;
> };
> };
> 
> ```

> **Fichier CMakeLists.txt n'a pas été modifié, mais voici son contenu**
>
> ```auto
> cmake_minimum_required(VERSION 3.20.0)
> find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
> project(st25r95)
> 
> FILE(GLOB app_sources src/main.c)
> target_sources(app PRIVATE ${app_sources})
> 
> ```

> **Ligne de commande utilisée pour la compilation**
>
> `west build -p always -b zest_core_mtxdot`

Nicolas

---

<div class="post-metadata">

### Author: ![Sokario](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.6tron.io/sokario/32/33_2.png) [@Sokario](https://forum.6tron.io/u/Sokario)
#### Post date: [Mars 25, 2025, 9:36 UTC](https://forum.6tron.io/t/probleme-avec-le-st25r95/50/4 "2025-03-25T09:36:18Z")

</div>

Bonjour Nicolas,

Je n’ai pas réussi à reproduire le problème exact, cependant, j’ai pu remarquer quelques erreurs :

- `nfc: st25r95@1` devrait être `nfc: st25r95@0` puisque `cs-gpios` n’a qu’un seul phandle (celui qui vous intéresse).
- par conséquent `reg = <1>;` devrait aussi être `reg = <0>;`

Par ailleurs, peut-être que le `main.c` de votre application ne récupère pas correctement le device en question.  
Est-ce que le device est récupéré avec la ligne suivante ?  
`static const struct device *nfc_dev = DEVICE_DT_GET(DT_NODELABEL(nfc));`

J’espère que cela pourra régler le problème, n’hésité pas à revenir vers nous si cela ne fonctionne toujours pas.

Logan Saint-Germain

---

<div class="post-metadata">

### Author: ![Nicolas](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.6tron.io/nicolas/32/34_2.png) [@Nicolas](https://forum.6tron.io/u/Nicolas)
#### Post date: [Mars 26, 2025, 12:50 UTC](https://forum.6tron.io/t/probleme-avec-le-st25r95/50/5 "2025-03-26T12:50:18Z")

</div>

Bonjour,

J’ai réussi à compiler et flasher, mais je ne comprends pas pourquoi le driver est un « dummy ». S’il s’agit vraiment d’un « dummy », que dois-je faire pour faire fonctionner le NFC ?

Nicolas

---

<div class="post-metadata">

### Author: ![Sokario](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.6tron.io/sokario/32/33_2.png) [@Sokario](https://forum.6tron.io/u/Sokario)
#### Post date: [Mars 26, 2025, 3:04 UTC](https://forum.6tron.io/t/probleme-avec-le-st25r95/50/6 "2025-03-26T15:04:41Z")

</div>

Bonjour,

Le driver actuel, du **st25r95** est bel et bien un `dummy` mais permet de valider la présence du composant sur la carte.

Il vous faut donc, pour faire fonctionner le NFC, écrire le driver zephyr correspondant. Vous pouvez reprendre le dummy driver actuel et y ajouter l’API avec les commandes I2C nécessaire ou repartir de zéro.  
La datasheet du **st25r95** est disponible [ici](https://www.st.com/en/nfc/st25r95.html#documentation).

Je serai disponible si un problème survient lors du développement du driver.

Logan Saint-Germain

---

<div class="post-metadata">

### Author: ![Nicolas](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.6tron.io/nicolas/32/34_2.png) [@Nicolas](https://forum.6tron.io/u/Nicolas)
#### Post date: [Avril 2, 2025, 12:35 UTC](https://forum.6tron.io/t/probleme-avec-le-st25r95/50/7 "2025-04-02T12:35:28Z")

</div>

J’ai réussi à compiler et à flasher le code, mais une erreur 0x83 («&nbsp;Invalid protocol&nbsp;») est apparue. Après quelques modifications du pilote, nous avons réussi à faire fonctionner le NFC et à obtenir l’UID des badges scannés. Cependant, pour poursuivre le développement du pilote, nous aimerions comprendre à quoi correspondent les deux dernières fonctions, qui sont vides : «&nbsp;`st25r95_attr_set`&nbsp;» et «&nbsp;`st25r95_channel_get`&nbsp;». De plus, nous souhaiterions savoir comment ajouter le `irq_out` dans le fichier `app.overlay` afin de pouvoir récupérer l’UID correctement.

[Le driver modifié](https://gitlab.ciel-kastler.fr/nic.schmauch/zephyr_st-st25rg95)

---

<div class="post-metadata">

### Author: ![Sokario](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.6tron.io/sokario/32/33_2.png) [@Sokario](https://forum.6tron.io/u/Sokario)
#### Post date: [Avril 2, 2025, 1:16 UTC](https://forum.6tron.io/t/probleme-avec-le-st25r95/50/8 "2025-04-02T13:16:17Z")

</div>

Bonjour,

- La commande `st25rg95_attr_set` n’est pas nécessaire dans votre développement.
- La seconde commande est lié au fonctionnement de Zephyr pour la récupération de donnée des composants suivant l’API **SENSOR**. Pour comprendre le fonctionnement complet, je vous propose de lire la [documentation](https://docs.zephyrproject.org/4.0.0/hardware/peripherals/sensor/index.html#implementing-sensor-drivers) Zephyr. Pour faire simple les **SENSORS** fonctionnement en deux étapes :
  - Tout d’abord, il faut «&nbsp;échantillonner&nbsp;» et donc utiliser la fonction `sensor_sample_fetch(dev)` qui dans le cas du st25r95 est redirigé vers `st25r95_sample_fetch(dev)`. Cette fonction se charge de communiquer avec le capteur et d’enregistrer les données de la réponse du capteur dans la structure **st25r95\_data**.
  - Une fois l’échantillonnage terminé, il est alors possible de demander au pilote une valeur issue de l’étape précédente : `sensor_channel_get(dev, channel, &value)` =\> `st25r95_channel_get(...)`. Cette fonction permet de retourner dans la variable **value** la valeur qui correspond au channel demandé. Dans votre cas, le channel `SENSOR_CHAN_ALL` pourrait tout à fait convenir. La liste des channels déjà supportée sur Zephyr est disponible [ici](https://docs.zephyrproject.org/4.0.0/doxygen/html/group __sensor__ interface.html#gaaa1b502bc029b10d7b23b0a25ef4e934). Le pilote doit donc retourner la valeur demander seulement dans le cas où le bon channel est demandé.

Pour ce qui est de rajouter des propriétés au pilote, il faut alors modifier le bindings la documentation zephyr se trouve [ici](https://docs.zephyrproject.org/4.0.0/build/dts/bindings-syntax.html#id4). Il faut donc rajouter les lignes suivante au fichier `st,st25r95.yaml`:

```auto
irq-gpios:
    type: phandle-array
    description: Configures ST25R95 interrupt signal.

```

Ce faisant, vous pourrez ensuite ajouter le phandle correspondant à votre signal d’interruption.

```auto
nfc: st25r95@1 {
        compatible = "st,st25r95";
        spi-max-frequency = <2000000>;
        reg = <1>;
        wkup-gpios = <&sixtron_connector DAC GPIO_ACTIVE_LOW>;
        irq-gpios = <&sixtron_connector DIO3 GPIO_ACTIVE_LOW>;
    };

```

Logan Saint-Germain
