IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Raspberry Pi Discussion :

Accès au bus SPI


Sujet :

Raspberry Pi

  1. #1
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 289
    Points : 151
    Points
    151
    Par défaut Accès au bus SPI
    bonjour,
    je travaille avec une sonde PT100 coulé à un ampli MAX31865 qui s'interface sur le bus SPI.
    Mon code de test:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #define cs 25
     
    int main()
    {	
    	unsigned char spi_config[] = {0x80, 0xA2};	//reg config
    	unsigned char spi_msb = 0x01, spi_lsb = 0x02;
     
    	wiringPiSetup();
    	wiringPiSPISetup(1, 500000); // Initialisation du bus SPI(0) à 500KHz
     
    	pinMode(cs, OUTPUT);
    	digitalWrite(cs, HIGH);
    	usleep(10000);
     
    	digitalWrite(cs, LOW);	//selection du module
            //
        wiringPiSPIDataRW(1, spi_config, 2);
        digitalWrite(cs, HIGH);
     
        //lecture du résultat de la conversion
        digitalWrite(cs, LOW);	//selection du module
        wiringPiSPIDataRW(1, &spi_msb, 1);
        wiringPiSPIDataRW(1, &spi_lsb, 1);
        digitalWrite(cs, HIGH);
     
        printf("Ox%x Ox%x\n", spi_msb, spi_lsb);
     
    	exit(EXIT_SUCCESS);
    }
    spi_msb et spi_lsb restent toujours à 0.
    A l'oscillo, la broche cs passe bien à 0 puis remonte mais je ne vois jamais rien sur la broche d'horloge.
    Ce code ne me semble pas faux, le SPI est validé sur le Raspberry et j'ai utilisé aussi bien BCM19, BCM20, BCM21 que BCM9, BCM10, BCM11.
    Si quelqu'un a une idée, merci...

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour

    Il y a plusieurs erreurs dans votre code
    Normalement avec la librairie wiringPiSpi il n'y a pas besoin de gérer Chip Select.
    Il suffit d'utiliser la commande wiringPiSPIDataRW (int channel, unsigned char *data, int len)
    channel vaut
    - 0 si on utilise CE0 (broche 24 ou GPIO8)
    - 1 si on utilise CE1 (broche 26 ou GPIO7)
    - dans votre code vous utilisez la broche 25 de wiringPi qui correspond à la broche physique 37 (faites un gpioreadall)
    Ensuite si on veut lire ou écrire plusieurs octet il suffit de transmettre l'adresse d'un pointeur sur char. Dans votre cas spi_msb n'est pas un pointeur

  3. #3
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 289
    Points : 151
    Points
    151
    Par défaut
    Merci Mbobo,
    j'ai corrigé mes erreurs, je n'avais pas compris cette gestion qui n'est pas mentionnée dans la doc.
    spi_msb n'est pas un pointeur mais comme je passe son adresse à la fonction, le compilateur est content.
    Ça ne fonctionne toujours pas et je me suis aperçu avec un scope que je n'avais pas des chronogrammes qui correspondaient à la doc du MAX31865.
    Mon nouveau code:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    int main()
    {	
    	unsigned char spi_config[] = {0x80, 0x81};	//reg config
    	unsigned char spi_oneshot[] = {0x80, 0xA1};	//reg config
    	unsigned char spi_msb = 0x01, spi_lsb = 0x02;
     
    	wiringPiSPISetup(1, 500000); // Initialisation du bus SPI(1) à 500KHz
            wiringPiSPIDataRW(1, spi_config, 2);
    	wiringPiSPIDataRW(1, spi_oneshot, 2);	//déclenche une conversion
     
    	usleep(65000);	//65ms pour attendre la fin de la conversion
            wiringPiSPIDataRW(1, &spi_msb, 1);  //lecture du msb
            wiringPiSPIDataRW(1, &spi_lsb, 1);   //lecture du lsb
            printf("Ox%x Ox%x\n", spi_msb, spi_lsb);
     
           exit(EXIT_SUCCESS);
    }
    Les accès au registre de configuration, après passage à l'état bas du chip select déclenchent bien 8 coups d'horloge pour l'adresse et 8 coups d'horloge pour la donnée ce qui est conforme à la spec du composant.
    Par contre, les lectures du msb et du lsb ne déclenchent que 8 coups d'horloge chacune alors que la spec en indique 2x8 (pour l'adresse du registre à lire et la donnée en retour). Je suppose que mon problème vient de là, j'ai changé de module sans résultat et je ne vois plus du tout ce que peux faire.
    Si vous avez une idée...
    Merci.

Discussions similaires

  1. bus SPI et Linux embarqué
    Par Pythonesque dans le forum Linux
    Réponses: 2
    Dernier message: 27/04/2012, 11h36
  2. accès au bus PCI
    Par cboudy dans le forum Virtualisation
    Réponses: 3
    Dernier message: 02/08/2010, 09h51
  3. communiquer sur bus SPI sur µC LPC2138 en C
    Par Efhache84 dans le forum C
    Réponses: 3
    Dernier message: 03/07/2009, 10h44
  4. Bus SPI + vitesse
    Par KHEOPS1982 dans le forum Automation
    Réponses: 0
    Dernier message: 16/02/2008, 09h47
  5. [16F628] Bus SPI
    Par jmf13 dans le forum Autres architectures
    Réponses: 1
    Dernier message: 17/09/2007, 14h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo