Hallo Klaus,
ich habe nun einen kleinen Teilerfolg mit dem Code vom 2012-06-12. Er funktioniert nur bei einem sauberen Power Up (Resetknopf reicht nicht aus) leider nur teilweise.
Bei eingelegte Karte und nach einem Power Up bekomme ich folgende Meldung gesendet:
Code: Alles auswählen
manuf: 0x03
oem: SD
prod: SU04G
rev: 80
serial: 0x30ba9742
date: 8/14
size: 3781MB
copy: 1
wr.pr.: 0/0
format: 0
free:
Leider friert der Code nach der Ausgabe von "free:" ein.
Die Ports habe ich wie folgt initialisiert:
Code: Alles auswählen
#if defined(__AVR_ATmega644__)
#define configure_pin_mosi() DDRB |= (1 << DDB5)
#define configure_pin_sck() DDRB |= (1 << DDB7)
#define configure_pin_ss() DDRB |= (1 << DDB1)
#define configure_pin_miso() DDRB &= ~(1 << DDB6)
#define select_card() PORTB &= ~(1 << PORTB1)
#define unselect_card() PORTB |= (1 << PORTB1)
#else
#error "no sd/mmc pin mapping available!"
#endif
#define configure_pin_available() DDRA &= ~(1 << PA6)
#define configure_pin_locked() DDRA &= ~(1 << PA7)
#define get_pin_available() ((PINA & (1<<PA6)))
#define get_pin_locked() ((PINA & (1<<PA7)))
Außerdem hat nun der Port PB5 (MOSI) einen Pull Up von 10k.
Auch einen zweite SD Karte brachte keinen Erfolg. Gleiches Ergebnis.
Ich konnte es schon ein wenig eingrenzen. Folgende Funktion macht Probleme:
Code: Alles auswählen
offset_t fat_get_fs_free(const struct fat_fs_struct* fs)
und zwar irgendwo hier, denn die IF-Anweisung wird nicht mehr verlassen.:
Code: Alles auswählen
if(!fs->partition->device_read_interval(fat_offset,
fat,
sizeof(fat),
length,
#if FAT_FAT32_SUPPORT
(fs->partition->type == PARTITION_TYPE_FAT16) ?
fat_get_fs_free_16_callback :
fat_get_fs_free_32_callback,
#else
fat_get_fs_free_16_callback,
#endif
&count_arg
)
)
Gruß
Elektrischlumpf