Hallo, ich habe in mein Projekt zwecks Datenzugriff auf SD-Karten die Klassen fat32 und sdcard implementiert. Das Projekt programmiere ich mit luna. Dabei habe ich mich über eine etwas geringe Datenübertragungsrate gewundert. Nach einem Blick in die Init-Funktion der sdcard-Klasse entdeckte ich auch wieso und habe das auskommentierte Setzen der SPI-Geschwindigkeit auf Maximum hereingenommen. Soweit so gut, Datenübertragung schnell. Jedoch kann man bei SPI ja mit "SpeedDouble" die Geschwindkeit weiter erhöhen. Kommentiere ich jedoch SpeedDouble ein, werden keine Daten mehr übertragen und das lesen der Verzeichnisse funktioniert auch nicht mehr. Wo kann da der Fehler liegen? Auszug aus der sdcard-Klasse:
1 | class sdcard |
2 | |
3 | dim cmd(5) as byte |
4 | dim buf as memoryblock |
5 | |
6 | function init() as byte |
7 | |
8 | dim i,a as byte |
9 | dim timeout as word |
10 | |
11 | buf.New(512) |
12 | |
13 | define SpiSckPin as portb.7 ' SCK |
14 | define SpiMisoPin as portb.6 ' MISO |
15 | define SpiMosiPin as portb.5 ' MOSI |
16 | define SpiSsPin as portb.4 ' SS |
17 | define SdCsPin as portb.3 ' CS (SD) |
18 | |
19 | SpiSckPin.mode = output ' SCK |
20 | SpiMisoPin.mode = input ' MISO |
21 | SpiMosiPin.mode = output ' MOSI |
22 | SpiSsPin.mode = output ' SS |
23 | SdCsPin.mode = output ' CS (SD) |
24 | |
25 | sdDisable() |
26 | |
27 | spi.master |
28 | spi.clock = 128 |
29 | spi.enable |
30 | |
31 | waitms 10 |
32 | for i=0 to 15 |
33 | spi.master.write &hff |
34 | next |
35 | |
36 | 'CMD0 |
37 | clr cmd() |
38 | cmd(0)=&h40 |
39 | cmd(5)=&h95 |
40 | clr timeout |
41 | while writeCmd()=&hff |
42 | incr timeout |
43 | if timeout>200 then |
44 | sdDisable() |
45 | return 0 |
46 | end if |
47 | wend |
48 | |
49 | 'CMD1 |
50 | cmd(0)=&h41 |
51 | cmd(5)=&hff |
52 | clr timeout |
53 | while writeCmd()<>0 |
54 | incr timeout |
55 | if timeout>400 then |
56 | sdDisable() |
57 | return 0 |
58 | end if |
59 | wend |
60 | 'SPI Bus auf max Geschwindigkeit |
61 | spi.clock=4 |
62 | 'spi.speeddouble ' <<<<<<<<<<< Hier |
63 | sdDisable() |
64 | return 1 |
65 | endfunc |
Gruß, Christian