Hi,
http://focus.ti.com/mcu/docs/mcusupporttechdocsc.tsp?sectionId=96&tabId=1502&abstractName=slaa281b
in der Appnote slaa281 Rev. b ist der MOSI/MISO-Fehler scheinbar
behoben, dafür andere nicht:
- die Funktionen mit Rückgabewerten vom Typ char müssen entweder als
unsigned char umgeschrieben werden, oder der compiler muss das als
unsigned interpretieren.
- die "Funktion" CS_HIGH in Datei hal_MMC_hardware_board.h ist
falsch:
1 | #define halSPITXDONE (UCB0STAT&UCBUSY) /* Wait for TX to finish */
|
2 | ...
|
3 | #define CS_HIGH() while(!halSPITXDONE); MMC_CS_PxOUT |= MMC_CS // Card Deselect
|
denn sie wartet (zumindest bei den USCI-Modulen) solange die USCI
nicht busy ist!
richtig wäre:
1 | #define halSPITXDONE (UCB0STAT&UCBUSY) /* Wait for TX to finish */
|
2 | ...
|
3 | #define CS_HIGH() while(halSPITXDONE); MMC_CS_PxOUT |= MMC_CS // Card Deselect
|
oder logischer:
1 | #define halSPITXDONE (!(UCB0STAT&UCBUSY)) /* Wait for TX to finish */
|
2 | ...
|
3 | #define CS_HIGH() while(!halSPITXDONE); MMC_CS_PxOUT |= MMC_CS // Card Deselect
|
- in der main.c macht die Schleife eine Umdrehung zu viel:
1 | unsigned char buffer[512];
|
2 | ...
|
3 | for (i = 0; i <= 512; i++)
|
4 | buffer[i] = 0;
|
Mehr ist mir bisher nicht aufgefallen und jetzt scheint es auch zu
funktionieren :)