Bonjour, je viens vers vous car je n'arrive pas à comprendre pourquoi ma liaison SPI ne fonctionne pas
Je vous explique, j'ai une carte électronique avec un connecteur SD et un PIC32MX795F512L. J'utilise les broches du module SPI 2.
Voila le schéma :
Pièce jointe 255836 Pièce jointe 255837
Oui je sais j'ai fait une belle boulette... La broche SDI du PIC sur la broche SDI de la carte SD et pareil pour SDO
Pour la programmation, j'utilise la bibliothèque de Microchip Solution qui gère la carte SD.
Mon problème est que sur la broche CLK, j'ai mon signal mais rien sur la broche SDI et SDO. J'utilise la broche du PIC SDI2 pour envoyer mes données du coup.
Vous pouvez trouver le code sur le site de Microchip je vous passe les modifs que j'ai faite :
Fichier hardwareProfile.h
Main.cCode:#elif defined MDD_USE_SPI_2 // Description: SD-SPI Chip Select Output bit #define SD_CS LATGbits.LATG9 // Description: SD-SPI Chip Select TRIS bit #define SD_CS_TRIS TRISGbits.TRISG9 // Description: SD-SPI Card Detect Input bit #define SD_CD PORTBbits.RB0 // Description: SD-SPI Card Detect TRIS bit #define SD_CD_TRIS TRISBbits.TRISB0 // Description: SD-SPI Write Protect Check Input bit #define SD_WE PORTBbits.RB1 // Description: SD-SPI Write Protect Check TRIS bit #define SD_WE_TRIS TRISBbits.TRISB1 // Description: The main SPI control register #define SPICON1 SPI2CON // Description: The SPI status register #define SPISTAT SPI2STAT // Description: The SPI Buffer #define SPIBUF SPI2BUF // Description: The receive buffer full bit in the SPI status register #define SPISTAT_RBF SPI2STATbits.SPIRBF // Description: The bitwise define for the SPI control register (i.e. _____bits) #define SPICON1bits SPI2CONbits // Description: The bitwise define for the SPI status register (i.e. _____bits) #define SPISTATbits SPI2STATbits // Description: The enable bit for the SPI module #define SPIENABLE SPI2CONbits.ON // Description: The definition for the SPI baud rate generator register (PIC32) #define SPIBRG SPI2BRG // Tris pins for SCK/SDI/SDO lines // Description: The TRIS bit for the SCK pin #define SPICLOCK TRISGbits.TRISG6 // Description: The TRIS bit for the SDI pin #define SPIIN TRISGbits.TRISG8 // Description: The TRIS bit for the SDO pin #define SPIOUT TRISGbits.TRISG7 //SPI library functions #define putcSPI putcSPI2 #define getcSPI getcSPI2 #define OpenSPI(config1, config2) OpenSPI2(config1, config2) #endif
La carte SD ne s'initialise pas. J'ai fait le test de changer l'état de ma broche manuellement et elle fonctionne.Code:int main(int argc, char** argv) { SYSTEMConfig (SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE); AD1PCFG = 0xFFFFFFFF; CNCONbits.ON = 0; U3MODEbits.ON = 0; U6MODEbits.ON = 0; PMCONbits.ON = 0; I2C2CONbits.ON = 0; I2C4CONbits.ON = 0; ETHCON1bits.ON = 0; ETHCON2 = 0; FSFILE * fp; //pointeur sur la structure d?identification du fichier char fileName[] = "file.txt"; char text[20] = "Bonjour!"; if (TRUE) //Si carte détectée ? { if (FSInit())//SD card init { //ouverture en écriture ou création si fichier inexistant fp = FSfopen(fileName,"w"); aff_txt("Initialisation OK"); if (fp != NULL) //Pas de PB à l?ouverture ? { xy_lcd(0,2); aff_txt("Ecriture..."); if (FSfwrite (text, 1,8, fp) == 8) //tout a été écrit ? FSfclose(fp); } else aff_txt("Open Failed"); } else aff_txt("Init Failed"); } else aff_txt("Carte non détectée");
Merci pour votre soutient
-----