/* simple wrapper around the stlink_flash_write function */ // TODO - this should be done as just a simple flag to the st-util command line... #include #include #include #include #include "stlink-common.h" static void usage(void) { puts("st-info --flash"); puts("st-info --sram"); puts("st-info --descr"); puts("st-info --pagesize"); puts("st-info --chipid"); } static int print_data(stlink_t* sl, char** av) { int ret = 0; if (strcmp(av[1], "--flash") == 0) printf("0x%zx\n", sl->flash_size); else if (strcmp(av[1], "--sram") == 0) printf("0x%zx\n", sl->sram_size); else if (strcmp(av[1], "--pagesize") == 0) printf("0x%zx\n", sl->flash_pgsz); else if (strcmp(av[1], "--chipid") == 0) printf("0x%.4x\n", sl->chip_id); else if (strcmp(av[1], "--descr")==0) { const chip_params_t *params = NULL; for (size_t i = 0; i < sizeof(devices) / sizeof(devices[0]); i++) { if(devices[i].chip_id == sl->chip_id) { params = &devices[i]; break; } } if (params == NULL) { return -1; } printf("%s\n", params->description); } return ret; } stlink_t* open_sl(void) { stlink_t* sl; sl = stlink_v1_open(0, 1); if (sl == NULL) sl = stlink_open_usb(0, 1, NULL); return sl; } int main(int ac, char** av) { stlink_t* sl = NULL; int err = -1; if (ac < 2) { usage(); return -1; } sl = open_sl(); if (sl == NULL) { return -1; } sl->verbose=0; if (stlink_current_mode(sl) == STLINK_DEV_DFU_MODE) stlink_exit_dfu_mode(sl); if (stlink_current_mode(sl) != STLINK_DEV_DEBUG_MODE) stlink_enter_swd_mode(sl); err = print_data(sl, av); if (sl != NULL) { stlink_exit_debug_mode(sl); stlink_close(sl); } return err; }