Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

carte sd



  1. #1
    bird12358

    carte sd


    ------

    Bonjour,
    je suis actuellement sur un projet pour la gestion d'une carte sd par SPI grace a un microcontroleur.
    Le probleme c'est que la carte ne repond pas correctement. Elle s'initialise bien mais quand je lui envoie des données WRITE_SINGLE_BLOCK elle ne me repond pas ou quand je lui demande un READ_SINGLE_BLOCK au lieu de m'nvoyer un entete de donnée 0xfe elle m'envoie un entete 0xfc.
    Quelqu'un s'aurait pourquoi?
    D'avance merci.

    -----

  2. Publicité
  3. #2
    bird12358

    Re : carte sd

    Personne n'a de suggestion?

  4. #3
    bird12358

    Spi

    Bonjour,
    J'ai poster il y a bien une semaine ou 2 une question concernant la gestion de carte sd en lecture et ecriture via un port SPI mais je n'ai toujours pas eu de reponse.Peutetre que aujourd'hui quelqu'un pourrait m'aider.
    Alors je resume la situation sous forme d'un tableau excel.

    Je suis vraiment en galere si vous pouviez m'aider.
    Fichiers attachés Fichiers attachés

  5. #4
    bird12358

    Re : Spi

    Personne n'a jamais travailler sur l'implementation de carte sd ?

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

    Re : Spi

    Bonsoir,

    Personne ne sait résoudre un problème si celui-ci est mal énoncé ....

    @+

  8. #6
    bird12358

    Re : Spi

    Toujours des gens sympathiques ... Je vois pas en quoi mon probleme est mal posé mais c'est sur que si tu ne connais pas le systeme tu ne dois pas comprendre. J'ai listé tout ce que je fait dans mon programme que veux-tu que je fasse de plus.
    Je peux rajouter d'autres informations si tu as besoin. Je travaille donc sur une architecture de motorola 8bits et la frequence de fonctionnement est de 400KHz . Apres pour les commandes qui sont envoyés sont listés dans le .zip que j'ai envoyé lors de mon premier post.

  9. Publicité
  10. #7
    KHEOPS1982

    Re : Spi

    Bonjour,

    Pourrais-tu nous fournir un schéma de ton application et le code source de ton programme ?

    @+

  11. #8
    bird12358

    Re : Spi

    J'ai mis mon code avec un schema dans un point zip.

    .
    Dernière modification par gienas ; 28/04/2010 à 20h59. Motif: Supprimé le zip remplacé plus loin

  12. #9
    bird12358

    Re : Spi

    Je tiens a preciser que ce code etait un code que j'ai trouv sur le net et que je l'ai adapté pour mon projet.

  13. #10
    gienas
    Modérateur

    Re : carte sd

    Bonsoir à tous

    ceci n'est pas une réponse mais une préparation en vue d'une fusion.

    La charte du forum interdit les doublons. Il convient de rester dans le même sujet, même (surtout) s'il n'a pas reçu de réponse.

    C'est fait, à présent que les deux discussions sont fusionnées.

    La machine sur laquelle je suis ne me permet pas de vérifier le contenu ni l'intégrité du fichier zip, déconseillé dans l'épinglé. Je lis dans ton message qu'il contient un schéma qui doit être en jpg gif ou png, et d'un code, qui est du texte à mettre entre quotes de code.

    Merci de poster à nouveau dans ce sens, pour supprimer le zip.

    .
    Dernière modification par gienas ; 28/04/2010 à 20h38.

  14. #11
    bird12358

    Re : carte sd

    Je reposte donc:

    Code:
    #define SD_CS_ASSERT     PEDD &= ~0x04
    #define SD_CS_DEASSERT   PEDD |= 0x04
    
    
    unsigned char SPI_transmit(unsigned char data)
    {
    SPID = data;
    
    while(!(SPIS & (1<<5)));
      data = SPID;
    
    return(data);
    }
    
    unsigned char SPI_receive(void)
    {
    unsigned char data;
    // Wait for reception complete
    
    SPDR = 0xff;
    while(!(SPIS & (1<<7)));
      data = SPID;
    
    // Return data register
    return data;
    }
    
    ////////////////////////////////////////////////////////////////////////////////////////////
    unsigned char SD_init(void)
    {
    unsigned char i, response, retry=0 ;
    
    SD_CS_ASSERT;
    do
    {
       for(i=0;i<10;i++)
          SPI_transmit(0xff);
       response = SD_sendCommand(GO_IDLE_STATE, 0);//send 'reset & go idle' command
       retry++;
       if(retry>0xfe) {transmitString_F(PSTR("SD init fail..")); return 1; }//time out
    } while(response != 0x01);
    
    SD_CS_DEASSERT;
    
    SPI_transmit (0xff);
    SPI_transmit (0xff);
    
    retry = 0;
    
    do
    {
        response = SD_sendCommand(SEND_OP_COND, 0); //activate card's initialization process
    
        response = SD_sendCommand(SEND_OP_COND, 0); //resend command (for compatibility with some cards)
        retry++;
        if(retry>0xfe) return 1; //time out
    }while(response);
    
    SD_sendCommand(CRC_ON_OFF, OFF); //disable CRC; deafault - CRC disabled in SPI mode
    SD_sendCommand(SET_BLOCK_LEN, 512); //set block size to 512
    
    return 0; //normal return
    }
    
    unsigned char SD_sendCommand(unsigned char cmd, unsigned long arg)
    {
    unsigned char response, retry=0;
    
    SD_CS_ASSERT;
    
    SPI_transmit(cmd | 0x40); //send command, first two bits always '01'
    SPI_transmit(arg>>24);
    SPI_transmit(arg>>16);
    SPI_transmit(arg>>8);
    SPI_transmit(arg);
    SPI_transmit(0x95);
    
    while((response = SPI_receive()) == 0xff) //wait response
       if(retry++ > 0xfe) break; //time out error
    
    SPI_receive(); //extra 8 CLK
    SD_CS_DEASSERT;
    
    return response; //return state
    }
    
    
    
    unsigned char SD_readSingleBlock(unsigned long startBlock)
    {
    unsigned char response;
    unsigned int i, retry=0;
    
    response = SD_sendCommand(READ_SINGLE_BLOCK, startBlock<<9); //read a Block command
    //block address converted to starting address of 512 byte Block
    if(response != 0x00) //check for SD status: 0x00 - OK (No flags set)
      return response;
    
    SD_CS_ASSERT;
    
    while(SPI_receive() != 0xfe) //wait for start block token 0xfe (0x11111110)
      if(retry++ > 0xfffe){SD_CS_DEASSERT; return 1;} //return if time-out
    
    for(i=0; i<512; i++) //read 512 bytes
      buffer[i] = SPI_receive();
    
    SPI_receive(); //receive incoming CRC (16-bit), CRC is ignored here
    SPI_receive();
    
    SPI_receive(); //extra 8 clock pulses
    SD_CS_DEASSERT;
    
    return 0;
    }
    
    unsigned char SD_writeSingleBlock(unsigned long startBlock)
    {
    unsigned char response;
    unsigned int i, retry=0;
    
    response = SD_sendCommand(WRITE_SINGLE_BLOCK, startBlock<<9); //write a Block command
    if(response != 0x00) //check for SD status: 0x00 - OK (No flags set)
    return response;
    
    SD_CS_ASSERT;
    
    SPI_transmit(0xfe);     //Send start block token 0xfe (0x11111110)
    
    for(i=0; i<512; i++)    //send 512 bytes data
      SPI_transmit(buffer[i]);
    
    SPI_transmit(0xff);     //transmit dummy CRC (16-bit), CRC is ignored here
    SPI_transmit(0xff);
    
    response = SPI_receive();
    
    if( (response & 0x1f) != 0x05) //response= 0xXXX0AAA1 ; AAA='010' - data accepted
    {                              //AAA='101'-data rejected due to CRC error
      SD_CS_DEASSERT;              //AAA='110'-data rejected due to write error
      return response;
    }
    
    while(!SPI_receive()) //wait for SD card to complete writing and get idle
    if(retry++ > 0xfffe){SD_CS_DEASSERT; return 1;}
    
    SD_CS_DEASSERT;
    SPI_transmit(0xff);   //just spend 8 clock cycle delay before reasserting the CS line
    SD_CS_ASSERT;         //re-asserting the CS line to verify if card is still busy
    
    while(!SPI_receive()) //wait for SD card to complete writing and get idle
       if(retry++ > 0xfffe){SD_CS_DEASSERT; return 1;}
    SD_CS_DEASSERT;
    
    return 0;
    }
    Images attachées Images attachées  

  15. #12
    bird12358

    Re : carte sd

    personne n'a de solution ou de reponse ?

  16. Publicité
  17. #13
    bird12358

    Re : carte sd

    Bonjour,
    je n'ai toujours pas eu de reponse alors e relance la discution.
    Si quelqu'un a une reponde merci.

Discussions similaires

  1. compatibilité carte mere nouvelle carte graphique
    Par widi70 dans le forum Matériel - Hardware
    Réponses: 8
    Dernier message: 30/11/2007, 21h08
  2. Carte acquision video ou carte fire wire ?
    Par ericrouyer dans le forum Matériel - Hardware
    Réponses: 4
    Dernier message: 07/06/2007, 11h38
  3. comment brancher l'audio de ma carte TV sur carte mère inconnu
    Par syrus_l dans le forum Matériel - Hardware
    Réponses: 2
    Dernier message: 28/02/2007, 08h02
  4. conflit carte tuner et carte radeon 9100 (serie)
    Par tb59 dans le forum Matériel - Hardware
    Réponses: 2
    Dernier message: 11/01/2005, 17h44
  5. Compatibilite entre carte graphique et carte mere
    Par average dans le forum Matériel - Hardware
    Réponses: 2
    Dernier message: 12/09/2003, 19h41
Découvrez nos comparatifs produits sur l'informatique et les technologies.