Forum: Mikrocontroller und Digitale Elektronik PIC24 MMC init


von Sascha P. (poggie)


Angehängte Dateien:

Lesenswert?

Hi Jungs,
ich muss eine SD Karte mit nem PIC24FJ64Gb004 ansprechen und nen paar 
Daten darauf spreichern..also quasi als Datenlogger.
Ich verwende den C30 Compiler und habe mir eclipse so eingerichtet das 
er mir das hex file erzeugt.
Da die Hardware noch nicht da ist, simmuliere ich zur Zeit noch in 
Proteus.
Dazu habe ich das MMC Model genommen und da es dort den GB004 nicht gibt 
den GA004. Sollte aber von der Funktion mit der Karte das gleiche sein.


Soweit so gut.
Problem ist nur Ich habe keine Ahnung ;)

Vielleicht könnt ihr mir ja weiter helfen.
Mit dem Oszilloskop sehe ich jetzt die änderungen der Tacktleitung und 
DO
Habe eine leere datei als mmc file gespeichert darin würde ich nun gerne 
meine Daten sehen.
Wie würdet ihr vorgehen? Macht das alles Sinn so oder bin ich da aufm 
Holzweg?

Grüße
Sascha
1
/*
2
 * my_spi.c
3
 *
4
 *  Created on: 13.05.2010
5
 *      Author: Sascha
6
 */
7
#include "my_spi.h"
8
#include "PIC24F_periph_features.h"
9
10
char SPIsend(char d) // Über SPI-Schnittstelle senden
11
{ 
12
  SPI1BUF = d;
13
  while (!SPI1STATbits.SPIRBF)
14
    ;
15
  return SPI1BUF;
16
17
}
18
19
20
void init_spi(void) {
21
22
  int i =  0 ;
23
24
  //from Datasheet pic24fj
25
  /*  To set up the SPI module for the Standard Master mode
26
   of operation:
27
   1. If using interrupts:
28
   a) Clear the SPIxIF bit in the respective IFSx
29
   register.
30
   b) Set the SPIxIE bit in the respective IECx
31
   register.
32
   c) Write the SPIxIP bits in the respective IPCx
33
   register to set the interrupt priority.
34
   2. Write the desired settings to the SPIxCON
35
   register with MSTEN (SPIxCON1<5>) = 1.
36
   3. Clear the SPIROV bit (SPIxSTAT<6>).
37
   4. Enable SPI operation by setting the SPIEN bit
38
   (SPIxSTAT<15>).
39
   5. Write the data to be transmitted to the SPIxBUF
40
   register. Transmission (and reception) will start
41
   as soon as data is written to the SPIxBUF
42
   register.
43
44
45
   */
46
  //Set Data Direction in TrisC
47
48
  TRISCbits.TRISC7 = 0;
49
  TRISCbits.TRISC8 = 1;
50
  TRISCbits.TRISC9 = 0;
51
52
  //Initialize the SPI
53
  RPINR20bits.SDI1R = 24; //SDI at RP24  Input RC8
54
55
  RPOR11bits.RP23R = 7;//SDO  at RP23 output RC7
56
  RPOR12bits.RP25R = 8; //SCK at RP25  output RC9
57
58
59
//Init SPI 
60
  SPI1CON1bits.CKE = 1;
61
  SPI1CON1bits.MSTEN = 1; // Master
62
  SPI1CON1bits.SPRE = 0; // Divide by 8
63
  SPI1CON1bits.PPRE = 0; // Divide by 64
64
  SPI1CON2 = 0x0000;
65
  SPI1STATbits.SPIEN = 1;//enable SPI
66
67
  //warten
68
  spiDelay(10000);
69
  //74+ Takte an Karte
70
  for (i = 0; i <= 74; i++) {
71
72
    SPIsend(0xFF);
73
  }
74
  SPIsend(0x40);
75
  SPIsend(0x00);
76
  SPIsend(0x00);
77
  SPIsend(0x00);
78
  SPIsend(0x95);
79
80
  //nochmal nen paar Takte senden
81
  for (i = 0; i <= 74; i++) {
82
83
      SPIsend(0xFF);
84
    }
85
}
86
87
void spiDelay(int wait) {
88
  int i = 0;
89
  for (i = 0; i < wait; ++i) {
90
91
  }
92
93
}

von Sascha P. (poggie)


Lesenswert?

push

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.