also erst mal die beschaltung: ------------------------------ ich beginne mit der 1 bei der abgeschrägten ecke: cs --> SS DI --> MOSI GND 3v3 CLK --> SCK GND DO--> MISO hab ich doppelt gecheckt. objcopy: -------- um sicherzugehen das avr-objcopy aus meinem makefile: OBJCOPY=avr-objcopy ${OBJCOPY} -R .eeprom -O ihex ${OBJDIR}/${PROJNAME}.out ${BINDIR}/${BINNAME} initialisierung: ---------------- #define SPID DDRB #define SPIP PORTB #define SPI_MOSI 5 #define SPI_MISO 6 #define SPI_SCK 7 #define SPI_SS 4 #define SPI_PIN PINB //************ init the spi for mmc SPID |= (1<disabled //SPSR |= (1<<7); // interrupt enable //SPCR |= (1<<7)|(1<<6)|(1<<4)|(1<<0); // interrupt enable, enable SPI, master mode, slow mode SPCR |= (1<<6)|(1<<4)|(1<<0); // enable SPI, master mode, slow mode (f_osc/16 = 1MHz) hab den interrupt enable erst mal rausgeschmissen. f_osc/16 sollte doch nicht zu schnell sein - oder? routinen: --------- uint8_t spi(uint8_t b){ SPDR=b; //write byte while(!(SPSR>>7)); return SPDR; //return read byte } hab ich gecheckt (hab ja 'n display -> ich kann schön debug infos rausschreiben): das SPIF bit (7 in SPSR ist direkt nach SPDR=b; 0 und wird dann 1). uint8_t mmc_com(uint8_t com_a, uint16_t adrh, uint16_t adrl, uint8_t com_b){ uint8_t i; spi(0xFF); spi(com_a); spi(adrh>>8);//spi uses 8bit --> we shift the 16bit 8 places dwn -> high byte spi(adrh); // without shift, only the low byte is interpreted spi(adrl>>8); spi(adrl); spi(com_b); i=spi(0xFF); lcd_writeid(i); i=spi(0xFF); lcd_writeid(i); return i; //response is returned } das mit dem shift und der direkten übergabe für das low byte sollte doch ok sein - oder? (habs natürlich schon mit 0 hardwired ausprobiert - ändert am desaster nix :-( ) mmc init versuch: ----------------- nach dem o.g. init, mache ich (analog zur vorlage) das folgende: //spi_ss high --> disabled state SPIP |= (1<