[débutant] Programmation CC1100 SPI
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

[débutant] Programmation CC1100 SPI



  1. #1
    invite304155d6

    [débutant] Programmation CC1100 SPI


    ------



    Bonjour,

    Dans le cadre d'un projet, j'ai été amené à programmer un PIC18F97J60 via MPLAB (jusque la tout va bien).

    A présent, à partir de ce pic, je doit piloter un chip RF CC1100 (de TI) via SPI (pic sera le maître et chip l'esclave).

    Le problème est que je maîtrise très mal le SPI.
    Je connais les pattes reliées physiquement correspondant aux : GD0, CSn, GD2, SO, SI, SCLK.

    Mais je n'ai aucune idée de l'algorithme à utiliser pour programmer et envoyer des données à partir du chip via SPI.

    Si quelqu'un pouvait m'aider, ou m'aiguiller sur de la bonne doc (genre programmation SPI en c via MPLAB), ou juste me donner des algorithmes de fonctionnement SVP.

    Merci

    -----

  2. #2
    invite9ad788f0

    Re : [débutant] Programmation CC1100 SPI

    Salut,

    je suis dans le meme cas que toi en effet.. a tu résolu ton probleme? moi j'ai réussi à trouver quelques exemples de code mais étant donné que j'utilise pas le meme compilateur que les autres personnes, je doit déchiffrer tout sa.. mais avant tout j'aimerais bien comprendre comment fonctionne la liaison SPI pour transferer les données..

    Si tu a besoin d'exemples, je peux t'en envoyer.

    Cordialement.

  3. #3
    inviteda3670f6

    Re : [débutant] Programmation CC1100 SPI

    Pourtant ce n'est pas très compliqué... On trouve des tonnes de liens sur le net qui indiquent comment marche une liaison spi. C'est une liaison synchrone (avec horloge) et half duplex, les 2 chips ne peuvent pas parler simultanément.
    Pour le reste, il est vivement recommandé de lire la doc du CC1100, elle indiquera la liste des registres internes et la façon d'y accéder. En généeral on met une adresse, puis des données dont certaines représentent des mots de controle, indiquant le type d'accès par exemple.
    A plus

  4. #4
    invite9ad788f0

    Re : [débutant] Programmation CC1100 SPI

    Oui bien entendu ce n'est pas compliqué je pense.. avec le temps, les effort et du boulot on y arrive

    enfin la c'est juste que je buche au niveau de la liaison spi... j'ai fait mon code, puis en le compilant tout baigne, mais en le testant sur la carte, il ne vas pas jusqu'au bout.. donc apres m'être arraché les cheveux pour fouiller dans toutes les lignes de code, j'ai vu que le problème venait de ma liaison SPI , lors de la communication entre le MCU(microcontrolleur) et le CC1101.
    En effet, le MCU ayant son Pin SI (ou SDI) connecté au S0 du CC1101, il doit attendre que le CC1101 lui envoi une valeur différente de 1 (c'est à dire 0) pour pouvoir exécuter la suite du prog.. du coup moi j'ai toujours un 1, donc un boucle à l'infinie!! je me suis dit que, soit mon SPI du MCU ne transfert pas, soit le CC1101 ne me renvoit rien (car peut etre mal initialisé?!).

    je poste le code si jamais sa peut mieux aider à me comprendre.. :

    ----------------------------------------------------------------------
    Exemple d'envoi d'une commande strobe :
    --------------------------------------------------------------

    INT8U STROBE_CC1101(INT8U strobe)
    {
    INT8U x;
    delay_us(5);
    output_low(CSn); // Activation de la puce
    delay_us(2);

    while(SO); // Attente de SO -> probleme ICI!?
    x = write_spi_CC1101(strobe); // Envoi d'une commande STROBE


    delay_us(2);
    output_high(CSn); // Désactivation de la puce
    return x;

    -------------------------------------------------------------------------

    power et reset du chip CC1101 (dapres la datasheet)
    --------------------------------------------------------------------

    output_high(CSn); // CSn = 1
    output_high(SCK); // SCK = 1
    output_low(MOSI); // MOSI = 0
    delay_us(2);
    output_low(CSn); // CSn = 0
    delay_us(2);
    output_high(CSn); // CSn = 1 pendant 40us
    delay_us(40);

    // RESET_CC1101();
    output_low(CSn); //
    delay_us(2);

    while(SO); // Attente de SO -> probleme ICI!?

    STROBE_CC1101(CC1101_SRES); // envoi de la commande strobe SRES
    delay_us(2); // Une fois que SO repasse à l'état bas,
    // l'initialisation est terminé.
    output_high(CSn);

    ------------------------------------------------------------------

    Mon problème n'est peut etre pas majeur.. mais j'arrive pas à le voir, telle un poux dans les cheveux..

  5. A voir en vidéo sur Futura
  6. #5
    inviteda3670f6

    Re : [débutant] Programmation CC1100 SPI

    Ton code n'est pas super clair, ni très bien documenté. Mais comme ton CPU est le maitre sur le bus, c'est lui qui doit générer l'horloge lorsque le chipcon écrit ses données. Si tu ne génères pas l'horloge le CC1100 te renvera jamais rien.
    A plus

  7. #6
    invite29971eb1

    Re : [débutant] Programmation CC1100 SPI

    Citation Envoyé par pazcal Voir le message
    Pourtant ce n'est pas très compliqué... On trouve des tonnes de liens sur le net qui indiquent comment marche une liaison spi. C'est une liaison synchrone (avec horloge) et half duplex, les 2 chips ne peuvent pas parler simultanément.
    Pour le reste, il est vivement recommandé de lire la doc du CC1100, elle indiquera la liste des registres internes et la façon d'y accéder. En généeral on met une adresse, puis des données dont certaines représentent des mots de controle, indiquant le type d'accès par exemple.
    A plus
    C'est non sans une certaine fierté que je vais te reprendre

    Puisque le SPI par nature est un échange des registres de données via MISO et MOSI, on peut le considérer plutôt comme un lien full-duplex, non? D4ailleurs, dans un SPI "classique", on est obligé d'écrire des octets de padding pour recevoir les données de l'esclave.

    Bon après , le SPI n'étant pas normalisé, et en trouvant de toutes les formes (MISO MOSI sur une seule ligne par exemple), le doute peut être permis

  8. #7
    invite29971eb1

    Re : [débutant] Programmation CC1100 SPI

    Citation Envoyé par pierokun Voir le message
    Oui bien entendu ce n'est pas compliqué je pense.. avec le temps, les effort et du boulot on y arrive

    enfin la c'est juste que je buche au niveau de la liaison spi... j'ai fait mon code, puis en le compilant tout baigne, mais en le testant sur la carte, il ne vas pas jusqu'au bout.. donc apres m'être arraché les cheveux pour fouiller dans toutes les lignes de code, j'ai vu que le problème venait de ma liaison SPI , lors de la communication entre le MCU(microcontrolleur) et le CC1101.
    En effet, le MCU ayant son Pin SI (ou SDI) connecté au S0 du CC1101, il doit attendre que le CC1101 lui envoi une valeur différente de 1 (c'est à dire 0) pour pouvoir exécuter la suite du prog.. du coup moi j'ai toujours un 1, donc un boucle à l'infinie!! je me suis dit que, soit mon SPI du MCU ne transfert pas, soit le CC1101 ne me renvoit rien (car peut etre mal initialisé?!).

    Mon problème n'est peut etre pas majeur.. mais j'arrive pas à le voir, telle un poux dans les cheveux..
    C'est vrai que le fonctionnement de ce module est légèrement capillo-tracté.

    Si j'étais toi, je commencerais par déconnecter GD0 et GD2, qui ne sont que des broches de debug dans ton cas. Les seuls signaux strictement nécessaires sont MOSI, MISO, SCK et CSn.

    As-tu vérifié à l'oscillo que les signaux (à part ce SO bien sur) étaient bien générés?

    Dans un excès de zèle et d'optimisation, certains compilos mal réglés virent sans prévenir des écritures sur un port, en ne laissant que la dernière.

  9. #8
    invite9ad788f0

    Re : [débutant] Programmation CC1100 SPI

    oui c'est vrai que si je ne génère pas d'horloge le C1101 ne me renverra rien.. mais justement ça doit être dans la configuration des ports SPI?

    pourtant j'ai écrit la ligne :

    setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16);

    et dans mon fichier .h du Pic , il y a :

    ////////////////////////////////////////////////////////////////// SPI
    // SPI Functions: SETUP_SPI, SPI_WRITE, SPI_READ, SPI_DATA_IN
    // Constants used in SETUP_SPI() are:
    #define SPI_MASTER 0x20
    #define SPI_SLAVE 0x24
    #define SPI_L_TO_H 0
    #define SPI_H_TO_L 0x10
    #define SPI_CLK_DIV_4 0
    #define SPI_CLK_DIV_16 1
    #define SPI_CLK_DIV_64 2
    #define SPI_CLK_T2 3
    #define SPI_SS_DISABLED 1

    #define SPI_SAMPLE_AT_END 0x8000
    #define SPI_XMIT_L_TO_H 0x4000

    (qui ont été définit par le logiciel CCS pic c)

    N'est ce pas suffisant?

  10. #9
    invite9ad788f0

    Re : [débutant] Programmation CC1100 SPI

    Citation Envoyé par ftorama Voir le message
    C'est vrai que le fonctionnement de ce module est légèrement capillo-tracté.

    Si j'étais toi, je commencerais par déconnecter GD0 et GD2, qui ne sont que des broches de debug dans ton cas. Les seuls signaux strictement nécessaires sont MOSI, MISO, SCK et CSn.

    As-tu vérifié à l'oscillo que les signaux (à part ce SO bien sur) étaient bien générés?

    Dans un excès de zèle et d'optimisation, certains compilos mal réglés virent sans prévenir des écritures sur un port, en ne laissant que la dernière.
    Oui en effet je suis en train de vérifier mes signaux et apparemment.. je n'ai même pas mon signal SCK!! je comprends maintenant.. donc je vais aller tester tout cela et vous tiens au courant.

    Mercii à tous!!!

  11. #10
    invite29971eb1

    Re : [débutant] Programmation CC1100 SPI

    Tu essaies à la fois d'utiliser le module SPI du PIC et de les piloter à la main?

    Le problème peut aussi venir de là. Normalement, si tu configures tes broches en mode SPI, tu ne peux plus les utiliser en mode GPIO (autrement dit manuel). Là on dirait que tu fais les deux.

  12. #11
    invite9ad788f0

    Re : [débutant] Programmation CC1100 SPI

    Citation Envoyé par ftorama Voir le message
    Tu essaies à la fois d'utiliser le module SPI du PIC et de les piloter à la main?

    Le problème peut aussi venir de là. Normalement, si tu configures tes broches en mode SPI, tu ne peux plus les utiliser en mode GPIO (autrement dit manuel). Là on dirait que tu fais les deux.
    je comprends pas lol . je sais même pas ce que je fait pour tout dire.. ^^! non en fait on peut les piloter à la main? c'est-à-dire? moi je voudrais bien faire qu'ils soient automatiques seulement.. peut tu m'en dire plus?
    Enfin ce que je souhaite c'est configurer mes ports SPI pour que mon Microcontrolleur envoi son signal SCK et CS au Transceiver pour que celui-ci puisse me renvoyer quelques chose au Micro, sinon je serais bloqué dans ma boucle while(MISO)..

    merci!

Discussions similaires

  1. Programmation SPI pour PIC18F97J60
    Par invite304155d6 dans le forum Électronique
    Réponses: 0
    Dernier message: 20/07/2009, 10h57
  2. Information programmation I2C SPI
    Par invite865d2ebc dans le forum Électronique
    Réponses: 5
    Dernier message: 08/07/2009, 21h35
  3. Maple programmation débutant
    Par invitec9f3b5ed dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 08/02/2009, 21h36
  4. débutant programmation/matlab
    Par invite5f91618d dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 29/01/2009, 10h35
  5. [Débutant] Problème programmation PIC10F200
    Par invitea4013b64 dans le forum Électronique
    Réponses: 3
    Dernier message: 23/12/2008, 11h18
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...