Partage
  • Partager sur Facebook
  • Partager sur Twitter

Format de message SPI

Enigme/Problème : Pouvoir trouver le bon format de message

    27 mai 2020 à 15:04:11

    Bonjour tout le monde, voici mon énigme/problème :
    J’ai actuellement un projet qui consiste à envoyer un message via SPI sur un SWITCH Ethernet (ZL50408) pour écrire dans sa mémoire. J’ai réussi à faire le système d’envoi des messages mais je me heurte au « format » du message à envoyer. Voici ce que je trouve sur la datasheet (page 29/30 de https://html.alldatasheet.fr/html-pdf/102912/ZARLINK/ZL50408/8994/30/ZL50408.html:
    Ce projet étant la suite d’un autre j’ai récupérer des documents qu’il avait effectué et notamment son fichier « source ».
    Exemple message :

    write504 0 116 ff

    ce que j'ai traduit par :

    la fonction d'écriture sur l'index 0 à l'adresse du Switch ethernet n°116 les données FF

    Quelle est selon vous la forme de ce message pour cet exemple ?
    • Partager sur Facebook
    • Partager sur Twitter
      Staff 28 mai 2020 à 15:12:17

      Ce n'est franchement pas clair ta demande...

      Poster le fichier source dont tu parles pourrait aider à y voir plus clair.

      • Partager sur Facebook
      • Partager sur Twitter
        2 juin 2020 à 16:40:26

        Tout d'abord merci d'avoir pris de ton temps pour me répondre lorrio :)

        Voici ce que le fichier source (.bat) contenait :

        write504  0     0       c8
        write504  0     2       c0
        write504  0     4       c0
        write504  0     6       c0
        write504  0     8       c0
        write504  0     00a     c0
        write504  0     00c     ce
        write504  0     00e     ce
        write504  0    10      c0
        write504  0    12      c0
        write504  0      1     00
        write504  0      3	     00
        write504  0      5     00
        write504  0      7     00
        write504  0     9      00
        write504  0  00b      00
        
        write504  0  00d      00
        write504  0  00f       00
        write504  0    11      00
        write504  0    13      00
        write504  0    80      00
        write504  0    82      00
        write504  0    84      00
        write504  0    86      00
        write504  0    88      00
        write504  0   08a     00
        write504  0   08c     00
        write504  0   08e     00
        write504  0     90    00
        write504  0     92    00
        write504  0     81     8
        write504  0     83     8
        write504  0     85     8
        write504  0     87     8
        write504  0     89     8
        write504  0   08b     8
        write504  0   08d     8
        write504  0   08f      8
        write504  0     91     8
        write504  0     93   18
        write504  0   100   00
        write504  0   101   81
        write504  0   102    ff
        write504  0   106    ff
        write504  0   10a    ff
        write504  0   10e    ff
        write504  0   112    ff
        write504  0   116    ff
        write504  0   11a    ff
        write504  0   11e    ff
        write504  0   122    ff
        write504  0   126    ff
        write504  0   103    ff
        write504  0   107    ff
        write504  0   10b    ff
        write504  0   10f     ff
        write504  0   113    ff
        write504  0   117    ff
        write504  0   11b    ff
        write504  0   11f     ff
        write504  0   123    ff
        write504  0   127    ff
        write504  0   105    00
        write504  0   109    00
        write504  0   10d    00
        write504  0   111    00
        write504  0   115    00
        write504  0   119    00
        write504  0   11d    00
        write504  0   121    00
        write504  0   125    00
        write504  0   129    00
        write504  0   170    00
        write504  0   400     5c
        write504  0   401     00
        write504  0   500     00
        write504  0   800     00
        write504  0   801     00
        write504  0   802     00
        write504  0   803     00
        write504  0   804     00
        write504  0   805     00
        write504  0   806     00
        write504  0   807     00
        write504  0   808     00
        write504  0   809     00
        write504  0   530     00
        write504  0   531     00
        write504  0   532     00
        write504  0   540     00
        write504  0   541     00
        write504  0   542     00
        write504  0   533     00
        write504  0   543     00
        write504  0   820     00
        write504  0   821     00
        write504  0   822     00
        write504  0   823     00
        write504  0   824     00
        write504  0   825     00
        write504  0   826     00
        write504  0   827     00
        write504  0   828     00
        write504  0   829     00
        write504  0   510     06
        write504  0   511     06
        write504  0   840     06
        write504  0   841     06
        write504  0   842     06
        write504  0   843     06
        write504  0   844     06
        write504  0   845     06
        write504  0   846     06
        write504  0   847     06
        write504  0   849     24
        write504  0   848     06
        write504  0   518     00
        write504  0   519     00
        write504  0   51a     00
        write504  0   51b     00
        write504  0   880     00
        write504  0   881     00
        write504  0   882     00
        write504  0   883     00
        write504  0   884     00
        write504  0   885     00
        write504  0   886     00
        write504  0   887     00
        write504  0   888     00
        write504  0   889     00
        write504  0   88a     00
        write504  0   88b     00
        write504  0   88c     00
        write504  0   88d     00
        write504  0   88e     00
        write504  0   88f      00
        write504  0   890     00
        write504  0   891     00
        write504  0   892     00
        write504  0   893     00
        write504  0   894     00
        write504  0   895     00
        write504  0   896     00
        write504  0   897     00
        write504  0   513     00
        write504  0   514     00
        write504  0   570     00
        write504  0   572     00
        write504  0   574     00
        write504  0   576     00
        write504  0   578     00
        write504  0   57a     00
        write504  0   57c     00
        write504  0   57e     00
        write504  0   571     00
        write504  0   573     00
        write504  0   575     00
        write504  0   577     00
        write504  0   579     00
        write504  0   57b     00
        write504  0   57d     00
        write504  0    57f     00
        write504  0   590     00
        write504  0   591     00
        write504  0   592     00
        write504  0   593     00
        write504  0   594     00
        write504  0   595     00
        write504  0   560     00
        write504  0   561     00
        write504  0   562     00
        write504  0   563     00
        write504  0   564     00
        write504  0   565     00
        write504  0   5a0     00
        write504  0   5a1     00
        write504  0   5a2     00
        write504  0   5a3     00
        write504  0   5a4     00
        write504  0   550     00
        write504  0   551     00
        write504  0   552     00
        write504  0   553     00
        write504  0   554     00
        write504  0   555     00
        write504  0   556     00
        write504  0   557     00
        write504  0   558     00
        write504  0   600     00
        write504  0   601     00
        write504  0   602     10
        write504  0   620     00
        write504  0   621     60
        write504  0   622     00
        write504  0   860     03
        write504  0   861     03
        write504  0   862     03
        write504  0   863     03
        write504  0   864     03
        write504  0   865     03
        write504  0   866     03
        write504  0   867     03
        write504  0   869    12
        write504  0   868    03
        write504  0   e10    00
        write504  0   e11    00
        write504  0   e12    00
        write504  0   e13    00
        write504  0   e14    00
        write504  0   60b    30
        write504  0   F00    01
        write504  0   F00    00
        

        Je pourrais te transmettre le code que je développe mais cela n'apporterai rien à cette question.

        Je voulais savoir, pour write504 0 116 ff par rapport à la figure "Write Command" je dois obtenir une représentation comme ceci si je ne me trompe pas :

        000b + 0x0116 + "W" + 0xFF

        Dans cette exemple à quoi correspond le "W" (un octet de "1"/ de "0"/"W" en AsCII ?) pour le transmission SPI ? (je ne connais pas trop cette "techno")

        J'ai chercher mais je ne vois pas le format du message que je dois envoyer via le SPI... 

        Même si une réponse ne répond pas à toute mes interrogations je vous remercie d'avance :D

        -
        Edité par Spyroxas 2 juin 2020 à 16:41:44

        • Partager sur Facebook
        • Partager sur Twitter
          Staff 2 juin 2020 à 23:36:08

          Non, ce n'est toujours pas clair...

          -----

          Dans la doc de ton switch, on peut lire :

          3 ID bits are used to allow up to eight ZL50408 devices to share the same synchronous serial interface.
          
          The ID of each device can be setup by bootstrap. To reduce the number of signals required, the register address, command and data are shifted in serially through the DATAIN pin. 

          En clair, quelque part sur ton switch, il y a un des petits picots sur lesquels on peut placer un jumper de configuration pour définir l'ID (exactement comme sur les vieux disque dure IDE où l'on pouvait placer un jumper pour choisir entre le mode Master ou le mode Slave).

          Ou alors, ce sont de petits interrupteurs.

          Quoi qu'il en soit, il est possible d'affecter un ID de 0 à 7 à ton switch et d'en connecter jusqu'à 8 sur le même bus.

          Chaque switch ayant sa propre ID, il n'y a pas de conflit puisque le switch va vérifier si le message qu'il reçoit le concerne ou non.

          Si tu n'as qu'un seul switch, le mieux serait de lui affecter l'ID 0 et de toujours utiliser ID=000 dans ta trame SPI.

          Maintenant, je ne vois clairement pas pourquoi tu parles de switch n°116 alors qu'il n'est possible d'en avoir que 8 sur le même bus...

          -----

          Après les 3 bits ID viennent 3 bits ADDR qui permettent de choisir à quel adresse tu souhaites écrire.

          Il y a donc 8 adresses possibles : 000 001 010 011 100 101 110 111

          -----

          Vient ensuite un bit de commande : '1' pour faire un WRITE, '0' pour faire un READ.

          -----

          Puis 16 bits de données.

          ----------

          A noter que tu parles de SPI depuis le début mais ce n'est pas vraiment un bus SPI.

          Tout d'abord, il faut envoyer le START :

          1/ Mettre data à '1'

          2/ Mettre clock à '1'

          3/ Mettre data à '0'

          4/ Mettre clock à '0'

          Ensuite, il faut envoyer les 7 bits que que je viens d'évoquer (3 bits ID, 3 bits ADDR, 1 bits CMD)

          A voir la doc, il semblerait que l'échantillonnage se fasse sur front montant de la clock tandis que le changement de valeur de la ligne data se fasse sur front descendant de la clock.

          Puis envoyer les 16 bits de données

          Et enfin, envoyer 2 pulses de clock supplémentaire avec la ligne data à '1'.



          -
          Edité par lorrio 2 juin 2020 à 23:36:25

          • Partager sur Facebook
          • Partager sur Twitter
            4 juin 2020 à 3:17:03

            Non, ce n'est toujours pas clair...

            Ah mince… désolé encore…

            ....

            Si tu n'as qu'un seul switch, le mieux serait de lui affecter l'ID 0 et de toujours utiliser ID=000 dans ta trame SPI.

            Oui j’ai ceci dans mon code par défaut, l’ID est « 000 » pour 0.

            Maintenant, je ne vois clairement pas pourquoi tu parles de switch n°116 alors qu'il n'est possible d'en avoir que 8 sur le même bus...

            Quand je parlais de « switch n°116 » je voulais dire l’adresse n°116 du CPU du SWITCH.

            -----

            Après les 3 bits ID viennent 3 bits ADDR qui permettent de choisir à quel adresse tu souhaites écrire.

            Il y a donc 8 adresses possibles : 000 001 010 011 100 101 110 111

            Par rapport à ce que j’ai dit juste au-dessus, 3bits ID est compliqué pour exprimer 116…. Ce serai plus pour moi de l’hexa sur le coup vu que par exemple certaine adresse sont :

            - 08d

            - 5a3

            - etc…

            -----

            Vient ensuite un bit de commande : '1' pour faire un WRITE, '0' pour faire un READ.

            Ok merci !

            -----

            Puis 16 bits de données.

            ----------

            A noter que tu parles de SPI depuis le début mais ce n'est pas vraiment un bus SPI.

            Tout d'abord, il faut envoyer le START :

            1/ Mettre data à '1'

            2/ Mettre clock à '1'

            3/ Mettre data à '0'

            4/ Mettre clock à '0'

            Ensuite, il faut envoyer les 7 bits que que je viens d'évoquer (3 bits ID, 3 bits ADDR, 1 bits CMD)

            A voir la doc, il semblerait que l'échantillonnage se fasse sur front montant de la clock tandis que le changement de valeur de la ligne data se fasse sur front descendant de la clock.

            Puis envoyer les 16 bits de données

            Et enfin, envoyer 2 pulses de clock supplémentaire avec la ligne data à '1'.

            Merci pour m’avoir confirmé le déroulement de la transmission, c’est bien d’avoir la vue d’une autre personne.

            Donc en résumé pour l’exemple :

            write504  0   602     10

            Le message à envoyer est :

            ADRESSE existe (page 59) :

            3 bits ID + 3 bits ADDR + 1 bits CMD + data : 000 + « 3 bits ADDR » + 1 + 0001000000000000 :

            000 + « ??? » + 10001000000000000

            En tout cas merci d'avance :)

            -
            Edité par Spyroxas 4 juin 2020 à 4:59:19

            • Partager sur Facebook
            • Partager sur Twitter
              Staff 4 juin 2020 à 8:25:19

              Il n'y a que 3 bits ADDR, donc impossible de mettre 116 dedans.

              En revanche, la solution est écrite en page 26 de ta doc :

              In serial mode, the address, command and data are shifted in serially. To access the configuration registers,
              only one “index” register (addresses 000b) needs to be written with the configuration register address. The
              desired data can be written into or read from the “data” register (address 010b).
              • For example, if “XX” is required to be written to register “YY”, a write of “YY” is required to write to
              address “000b” (Index register). Then, a write of “XX” is required to write to address “010b” (Data
              Register). This completes the register write and register “YY” will contain the value of “XX”.

              L'adresse 000 contient l'adresse du registre à lire et/ou écrire

              L'adresse 010 contient la valeur du registre à lire et/ou écrire

              Donc si tu veux écrire 0x123 à l'adresse 0x116, tu as 2 commandes à envoyer :

              En premier : 000 (ID=0) + 000 (Addr=RegAddr) + 0 (Write) + 0x116

              En second : 000 (ID=0) + 010 (Addr=RegValue) + 0 (Write) + 0x123

              Ta fonction write504 0 116 123 doit très certainement gérer l'envoie de ces 2 commandes.

              -
              Edité par lorrio 4 juin 2020 à 8:28:08

              • Partager sur Facebook
              • Partager sur Twitter

              Format de message SPI

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              • Editeur
              • Markdown