Hi guys,
I'm trying to port the code from TivaWare_C_Series-2.0.1.11577/examples/boards/dk-tm4c123g/sd-card/sd_card.c to work on my TM4C123G Launchpad. I'm using functions from /port/mmc-dk-tm4c123g.c (MMC/SDC control module).
I'm using this breakout board https://www.sparkfun.com/products/11403 with the following connections;
D3 (chip select) - PA3 (SSI0Fss)
CMD (MOSI) - PA6 (SSIOTx)
DO (SOMI) - PA4 (SSIORx)
CLK - PA2 (SSI0Clk)
Currently I'm getting an error in the disk_initialize function and as a result I get FR_NOT_READY when I try to create a file on the SD-card. As I'm also using SSI0 on my Tiva I'm not sure what I need to change in the initialization to get this code to work. As far as I can see all the port configurations are the same across both boards? My main function is below,
int
main(void)
{
int nStatus;
FRESULT iFResult;
//
// Enable lazy stacking for interrupt handlers. This allows floating-point
// instructions to be used within interrupt handlers, but at the expense of
// extra stack usage.
//
ROM_FPULazyStackingEnable();
//
// Set the system clock to run at 50MHz from the PLL.
//
ROM_SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHZ);
//
// Configure SysTick for a 100Hz interrupt. The FatFs driver wants a 10 ms
// tick.
//
ROM_SysTickPeriodSet(ROM_SysCtlClockGet() / 100);
ROM_SysTickEnable();
ROM_SysTickIntEnable();
//
// Enable Interrupts
//
ROM_IntMasterEnable();
//
// Initialize the UART as a console for text I/O.
//
ConfigureUART();
UARTprintf("\n\nSD Card Example Program\n");
UARTprintf("Type \'help\' for help.\n");
//
// Mount the file system, using logical disk 0.
//
iFResult = f_mount(0, &g_sFatFs);
if(iFResult != FR_OK)
{
UARTprintf("f_mount error: %s\n", StringFromFResult(iFResult));
return(1);
}
power_on();
BOOL a = wait_ready();
DSTATUS errd;
if(a) {
send_initial_clock_train();
errd = disk_initialize(0);
UARTprintf("\nInitialising disk 0. Status = %i\n", errd);
}
FIL fil;
uint32_t count = 8*512;
iFResult = f_open(&fil, "testfile.txt", FA_CREATE_NEW|FA_WRITE);
SysCtlDelay(SysCtlClockGet()/3);
if(iFResult != FR_OK) {UARTprintf("fresult: %s\n", StringFromFResult(iFResult)); }
else{UARTprintf("\n Opened SD card\n");}
iFResult = f_write(&fil, "Hello world", 11, &count);
if(iFResult != FR_OK) {UARTprintf("Error writing to file: %s\n", StringFromFResult(iFResult));}
iFResult = f_close(&fil);
f_mount(0, NULL);
}
Any help appreciated.
