SPI hardware bitbanging from SD CARD

This commit is contained in:
rob-ng15 2020-03-17 09:50:16 +00:00 committed by GitHub
parent 2c4b89639f
commit 50b6db6a6b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 23 deletions

View File

@ -487,3 +487,29 @@ void romboot(void)
boot(0, 0, 0, ROM_BOOT_ADDRESS); boot(0, 0, 0, ROM_BOOT_ADDRESS);
} }
#endif #endif
// SPI HARDWARE BITBANG
#ifdef CSR_SPI_BASE
#include <spi.h>
void spisdboot(void)
{
printf("SD Card via SPI Initialising\n");
if(spi_sdcard_goidle() == 0) {
printf("SD Card Timeout\n");
return;
}
if(spi_sdcard_readMBR() == 0) {
printf("SD Card MBR Timeout\n");
return;
}
if(spi_sdcard_readFile("IMAGE","",MAIN_RAM_BASE+KERNEL_IMAGE_RAM_OFFSET)==0) return;
if(spi_sdcard_readFile("ROOTFS~1","CPI",MAIN_RAM_BASE+ROOTFS_IMAGE_RAM_OFFSET)==0) return;
if(spi_sdcard_readFile("RV32","DTB",MAIN_RAM_BASE+DEVICE_TREE_IMAGE_RAM_OFFSET)==0) return;
if(spi_sdcard_readFile("EMULATOR","BIN",EMULATOR_RAM_BASE)==0) return;
boot(0,0,0,EMULATOR_RAM_BASE + EMULATOR_IMAGE_RAM_OFFSET);
}
#endif

View File

@ -6,4 +6,8 @@ void netboot(void);
void flashboot(void); void flashboot(void);
void romboot(void); void romboot(void);
#ifdef CSR_SPI_BASE
void spisdboot(void);
#endif
#endif /* __BOOT_H */ #endif /* __BOOT_H */

View File

@ -388,12 +388,8 @@ static void help(void)
puts("sdinit - SDCard initialization"); puts("sdinit - SDCard initialization");
puts("sdtest <loops> - SDCard test"); puts("sdtest <loops> - SDCard test");
#endif #endif
#ifdef USDDRPHY_DEBUG #ifdef CSR_SPI_BASE
puts(""); puts("spisdboot - boot from SDCard via SPI hardware bitbang");
puts("sdram_cdly value - Set SDRAM clk/cmd delay");
puts("sdram_cal - run SDRAM calibration");
puts("sdram_mpr - read SDRAM MPR");
puts("sdram_mrwr reg value - write SDRAM mode registers");
#endif #endif
} }
@ -486,24 +482,10 @@ static void do_command(char *c)
else if(strcmp(token, "sdinit") == 0) sdcard_init(); else if(strcmp(token, "sdinit") == 0) sdcard_init();
else if(strcmp(token, "sdtest") == 0) sdcard_test(atoi(get_token(&c))); else if(strcmp(token, "sdtest") == 0) sdcard_test(atoi(get_token(&c)));
#endif #endif
#ifdef USDDRPHY_DEBUG #ifdef CSR_SPI_BASE
else if(strcmp(token, "sdram_cdly") == 0) else if(strcmp(token, "spisdboot") == 0) spisdboot();
ddrphy_cdly(atoi(get_token(&c)));
else if(strcmp(token, "sdram_cal") == 0)
sdrcal();
else if(strcmp(token, "sdram_mpr") == 0)
sdrmpr();
else if(strcmp(token, "sdram_mrwr") == 0) {
unsigned int reg;
unsigned int value;
reg = atoi(get_token(&c));
value = atoi(get_token(&c));
sdrsw();
printf("Writing 0x%04x to SDRAM mode register %d\n", value, reg);
sdrmrwr(reg, value);
sdrhw();
}
#endif #endif
else if(strcmp(token, "") != 0) else if(strcmp(token, "") != 0)
printf("Command not found\n"); printf("Command not found\n");
} }