À propos de MMC en lecture / écriture

C

conkhicon

Guest
Chers tous, Je PIC 18F8720 en développement utilisent projet MMC avec le matériel SPI fonction dans l'interface de MCU, j'avais réussi à faire reset et initialiser la MMC et lisez les OCR, CDD registre OK, et peut être lu-singleBolck (CMD17) OK retour d'état (OK mais ne savent pas de données est vrai), mais quand je veux écrire-bloc (CMD24) à la console MMC, la réponse des données est étrange, il est 0x07 (le bon est 0xE5). quelqu'un peut m'aider, quelle erreur? (KingMax-je utiliser et carte Sandisk). Taille des blocs = 512bytes, l'adresse est la limite de 512 Si j'utilise Nokia, Seimen MMC et je ne Ecrire OK (retour appartiennent à l'état) et de lire l'échec.
 
Je n'ai que des réponses étranges de SD / MMC lorsque j'ai manqué certaines étapes. Pouvez-vous décrire la séquence exacte que vous utilisez pour délivrer un CMD24 et effectuer l'écriture?
 
# Define BLOCK_LEN 512 unsigned char readBlockMMC (unsigned long int DWAddr, unsigned char * EDP) {extern unsigned char tmpkd []; unsigned char localRD; commandResponse unsigned char; unsigned char dataToken; unsigned int localc; SetCSSPI (); WriteSPI (0xff) ; / / Dummy ClearCSSPI (); / / Active writeCMD carte (17, DWAddr, 0xff); / / commande READ (Aucun CRC) commandResponse = MCCResponse (); if (commandResponse! = 0) {SetCSSPI (); / / Carte En-Active WriteSPI (0xff); / / Dummy MMC_Err = 0x30; retour (1);} localc = 0; while (1) {/ / en attente jeton de données ou Erreur de jeton dataToken = ReadSPI (); if (dataToken == 0xFE ) break; / / Succès localc + +; if ((dataToken & 0xe0) == 0) {/ / Erreur Token si (dataToken! = 0) {MMC_Err = 0x31; retour (1);}}} Nop (); pour (localRD = 0; localRD
 
Il ya une très bonne application donnée en # 176 cave circuit. Peut-être que vous pouvez vérifier et voir que de comparer, si vous faites quelque chose de mal.
 
Si je n'ai pas compris votre code, vous attend pour des jetons de données ... Mais, lorsque vous émettez une CMD24 vous devez envoyer des jetons de données, Voici morceau de code de travail: mmc_CS_on; r_value = mmc_cmd (CMD24, adresse, 0); / / attend en interne pour la réponse R1 mmc_putchar (0xFF); mmc_putchar (0xFE) / / envoie symbolique pour les données (i = 0; i <512; + + i) mmc_putchar (buffer ); / / envoie des données mmc_putchar 512B (0x00); / / envoie MANNEQUIN 16bits mmc_putchar CRC (0x00), tandis que (mmc_read_r1 () == 0xFF); (! (U0RXBUF & 0x1F) = 0x05) si error_data_write_count + +, tandis que (mmc_read_r1 () == 0x00); / / attend WRITE à la fin .. mmc_CS_off;
 
Je fixe mon problème une ou l'autre utilisation du matériel Pheripral SPI PIC interface MMC assister: lorsque vous lisez SPI () pour attendre une réponse, l'horloge est en déplacement, les données sont changement de PIC, mais en même temps, les données SSPBUF changement dans les MMC est ramdom, parce que cette carte MMC refuser. Remplacez le code: réponse = ReadSPI (); Avec: WriteSPI (0xff); réponse = SSPBUF;
 
J'ai le même problème avec MMC aussi, je fais un enregistreur de données, Auparavant, j'ai utilisé la carte SD pour le stockage, puis après faire de nombreux tests et le succès, je veux qu'il en mesure d'utiliser la carte MMC, donc je changer la SDCard avec MMC. mais lorsque vous utilisez MMC le système est bloquer pendant Donnez votre fichier .. Je ne sais pas la raison .. lors de l'initialisation de la carte à la fois donner un statut prêt, donc je pense que ça va dans l'initialisation .. s'il vous plaît me montrer mon erreur ..
 

Welcome to EDABoard.com

Sponsor

Back
Top