Beispiel #1
0
int cmd_fpga(FILE * f, int argc, char ** argv)
{
	uint8_t * rbf = (uint8_t *)0x08060000;
	uint32_t flash_offs = (uint8_t *)rbf - STM32_FLASH_MEM;
	bool erase = false;
	bool load = false;
	bool cfg = false;

	if (argc > 1) {
		int i = 1;
		do {
			if ((strcmp(argv[i], "erase") == 0) || 
				(strcmp(argv[i], "e") == 0)) {
				erase = true;
			} else if ((strcmp(argv[i], "load") == 0) || 
					   (strcmp(argv[i], "l") == 0)) {
				load = true;
			} else if ((strcmp(argv[i], "config") == 0) || 
					   (strcmp(argv[i], "cfg") == 0) || 
					   (strcmp(argv[i], "c") == 0)) {
				cfg = true;
			} else {
				fprintf(f, "Invalid argument: %s\n", argv[i]);
				return -1;
			}
		} while (++i < argc);
	} else {
		fprintf(f, "FPG sector: 0x%08x\n", (uint32_t)rbf);
		show_hex8(f, (uint32_t)rbf, rbf, 1024);
		return 0;
	}

	debugger_except("FPGA update, reboot required!");

	if (erase) {
		fprintf(f, "Erasing sector: 0x%08x...\n", (uint32_t)rbf);
		if (stm32_flash_erase(flash_offs, 0x20000) < 0) {
			fprintf(f, "stm32f_flash_erase() failed!\n");
			return -1;
		}
	};

	if (load) {
		fprintf(f, "Loading FPGA .rbf file at 0x%08x...\n", (uint32_t)rbf);
		if (flash_xmodem_recv(f, flash_offs) < 0) {
			fprintf(f, "fpga_xmodem_recv() failed!\n");
			return -1;
		}
	};

	if (cfg) {
		fprintf(f, "Configuring FPGA...\n");
		if (jtag3ctrl_init(rbf, 38177) < 0) {
			fprintf(f, "jtag3ctrl_init() failed!\n");
			return -1;
		}
	};

	return 0;
}
Beispiel #2
0
int main(int argc, char ** argv)
{
	int ret;

	DCC_LOG_INIT();
	DCC_LOG_CONNECT();

	stdio_init();
	printf("\n---\n");

	cm3_udelay_calibrate();
	thinkos_init(THINKOS_OPT_PRIORITY(0) | THINKOS_OPT_ID(0));
	trace_init();

	tracef("## YARD-ICE " VERSION_NUM " - " VERSION_DATE " ##");

	stm32f_nvram_env_init();

	bsp_io_ini();

	rtc_init();

	supervisor_init();
	__os_sleep(10);

#if ENABLE_NETWORK
	DCC_LOG(LOG_TRACE, "network_config().");
	network_config();
#endif

	DCC_LOG(LOG_TRACE, "modules_init().");
	modules_init();

	tracef("* Starting system module ...");
	DCC_LOG(LOG_TRACE, "sys_start().");
	sys_start();

	tracef("* Initializing YARD-ICE debugger...");
	DCC_LOG(LOG_TRACE, "debugger_init().");
	debugger_init();

	tracef("* Initializing JTAG module ...");
	DCC_LOG(LOG_TRACE, "jtag_start().");
	if ((ret = jtag_start()) < 0) {
		tracef("jtag_start() failed! [ret=%d]", ret);
		debugger_except("JTAG driver fault");
	}

#if (ENABLE_NAND)
	tracef("* Initializing NAND module...");
	if (mod_nand_start() < 0) {
		tracef("mod_nand_start() failed!");
		return 0;
	}
#endif

#if (ENABLE_I2C)
	tracef("* starting I2C module ... ");
	i2c_init();
#endif

	tracef("* configuring initial target ... ");
	init_target();

#if (ENABLE_VCOM)
	tracef("* starting VCOM daemon ... ");
	/* connect the UART to the JTAG auxiliary pins */
	jtag3ctrl_aux_uart(true);
	vcom_start();
#endif

#if (ENABLE_COMM)
	tracef("* starting COMM daemon ... ");
	comm_tcp_start(&debugger.comm);
#endif

#if (ENABLE_TFTP)
	tracef("* starting TFTP server ... ");
	tftpd_start();
#endif

#if (ENABLE_GDB)
	tracef("* starting GDB daemon ... ");
	gdb_rspd_start();
#endif

#if ENABLE_USB
	tracef("* starting USB shell ... ");
	usb_shell();
#endif

#if ENABLE_TELNET
	tracef("* starting TELNET server ... ");
	telnet_shell();
#endif

	return console_shell();
}