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 --hla-serial");
17 puts("st-info --probe");
20 /* Print normal or OpenOCD hla_serial with newline */
21 static void stlink_print_serial(stlink_t *sl, bool openocd)
32 for (int n = 0; n < sl->serial_size; n++)
33 printf(fmt, sl->serial[n]);
40 static void stlink_print_info(stlink_t *sl)
42 const chip_params_t *params = NULL;
48 stlink_print_serial(sl, false);
50 stlink_print_serial(sl, true);
52 printf(" flash: %zu (pagesize: %zu)\n", sl->flash_size, sl->flash_pgsz);
53 printf(" sram: %zu\n", sl->sram_size);
54 printf(" chipid: 0x%.4x\n", sl->chip_id);
56 for (size_t i = 0; i < sizeof(devices) / sizeof(devices[0]); i++) {
57 if (devices[i].chip_id == sl->chip_id) {
64 printf(" descr: %s\n", params->description);
67 static void stlink_probe(void)
72 size = stlink_probe_usb(&stdevs);
74 printf("Found %zu stlink programmers\n", size);
76 for (size_t n = 0; n < size; n++)
77 stlink_print_info(stdevs[n]);
79 stlink_probe_usb_free(&stdevs, size);
82 static int print_data(stlink_t *sl, char **av)
84 if (strcmp(av[1], "--flash") == 0)
85 printf("0x%zx\n", sl->flash_size);
86 else if (strcmp(av[1], "--sram") == 0)
87 printf("0x%zx\n", sl->sram_size);
88 else if (strcmp(av[1], "--pagesize") == 0)
89 printf("0x%zx\n", sl->flash_pgsz);
90 else if (strcmp(av[1], "--chipid") == 0)
91 printf("0x%.4x\n", sl->chip_id);
92 else if (strcmp(av[1], "--probe") == 0)
94 else if (strcmp(av[1], "--serial") == 0)
95 stlink_print_serial(sl, false);
96 else if (strcmp(av[1], "--hla-serial") == 0)
97 stlink_print_serial(sl, true);
98 else if (strcmp(av[1], "--descr") == 0) {
99 const chip_params_t *params = NULL;
100 for (size_t i = 0; i < sizeof(devices) / sizeof(devices[0]); i++) {
101 if(devices[i].chip_id == sl->chip_id) {
102 params = &devices[i];
106 if (params == NULL) {
109 printf("%s\n", params->description);
116 stlink_t* open_sl(void)
119 sl = stlink_v1_open(0, 1);
121 sl = stlink_open_usb(0, 1, NULL);
126 int main(int ac, char** av)
143 if (stlink_current_mode(sl) == STLINK_DEV_DFU_MODE)
144 stlink_exit_dfu_mode(sl);
146 if (stlink_current_mode(sl) != STLINK_DEV_DEBUG_MODE)
147 stlink_enter_swd_mode(sl);
149 err = print_data(sl, av);
153 stlink_exit_debug_mode(sl);