6 #include <stlink-common.h>
8 static void usage(void)
10 puts("st-info --flash");
11 puts("st-info --sram");
12 puts("st-info --descr");
13 puts("st-info --pagesize");
14 puts("st-info --chipid");
15 puts("st-info --serial");
16 puts("st-info --probe");
19 static void stlink_print_info(stlink_t *sl)
21 const chip_params_t *params = NULL;
26 for (int n = 0; n < sl->serial_size; n++)
27 printf("%02x", sl->serial[n]);
30 printf("\t flash: %zu (pagesize: %zu)\n", sl->flash_size, sl->flash_pgsz);
31 printf("\t sram: %zu\n", sl->sram_size);
32 printf("\tchipid: 0x%.4x\n", sl->chip_id);
34 for (size_t i = 0; i < sizeof(devices) / sizeof(devices[0]); i++) {
35 if (devices[i].chip_id == sl->chip_id) {
42 printf("\t descr: %s\n", params->description);
45 static void stlink_probe(void)
50 size = stlink_probe_usb(&stdevs);
52 printf("Found %zu stlink programmers\n", size);
54 for (size_t n = 0; n < size; n++)
55 stlink_print_info(stdevs[n]);
57 stlink_probe_usb_free(&stdevs, size);
60 static int print_data(stlink_t *sl, char **av)
63 if (strcmp(av[1], "--flash") == 0)
64 printf("0x%zx\n", sl->flash_size);
65 else if (strcmp(av[1], "--sram") == 0)
66 printf("0x%zx\n", sl->sram_size);
67 else if (strcmp(av[1], "--pagesize") == 0)
68 printf("0x%zx\n", sl->flash_pgsz);
69 else if (strcmp(av[1], "--chipid") == 0)
70 printf("0x%.4x\n", sl->chip_id);
71 else if (strcmp(av[1], "--probe") == 0)
73 else if (strcmp(av[1], "--serial") == 0) {
74 for (int n = 0; n < sl->serial_size; n++)
75 printf("%02x", sl->serial[n]);
77 } else if (strcmp(av[1], "--descr") == 0) {
78 const chip_params_t *params = NULL;
79 for (size_t i = 0; i < sizeof(devices) / sizeof(devices[0]); i++) {
80 if(devices[i].chip_id == sl->chip_id) {
88 printf("%s\n", params->description);
94 stlink_t* open_sl(void)
97 sl = stlink_v1_open(0, 1);
99 sl = stlink_open_usb(0, 1, NULL);
104 int main(int ac, char** av)
119 if (stlink_current_mode(sl) == STLINK_DEV_DFU_MODE)
120 stlink_exit_dfu_mode(sl);
122 if (stlink_current_mode(sl) != STLINK_DEV_DEBUG_MODE)
123 stlink_enter_swd_mode(sl);
125 err = print_data(sl, av);
129 stlink_exit_debug_mode(sl);