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 stlink_t *stlink_open_first(void)
85 sl = stlink_v1_open(0, 1);
87 sl = stlink_open_usb(0, 1, NULL);
92 static int print_data(char **av)
96 // Probe needs all devices unclaimed
97 if (strcmp(av[1], "--probe") == 0) {
102 sl = stlink_open_first();
110 if (stlink_current_mode(sl) == STLINK_DEV_DFU_MODE)
111 stlink_exit_dfu_mode(sl);
113 if (stlink_current_mode(sl) != STLINK_DEV_DEBUG_MODE)
114 stlink_enter_swd_mode(sl);
116 if (strcmp(av[1], "--flash") == 0)
117 printf("0x%zx\n", sl->flash_size);
118 else if (strcmp(av[1], "--sram") == 0)
119 printf("0x%zx\n", sl->sram_size);
120 else if (strcmp(av[1], "--pagesize") == 0)
121 printf("0x%zx\n", sl->flash_pgsz);
122 else if (strcmp(av[1], "--chipid") == 0)
123 printf("0x%.4x\n", sl->chip_id);
124 else if (strcmp(av[1], "--serial") == 0)
125 stlink_print_serial(sl, false);
126 else if (strcmp(av[1], "--hla-serial") == 0)
127 stlink_print_serial(sl, true);
128 else if (strcmp(av[1], "--descr") == 0) {
129 const chip_params_t *params = NULL;
130 for (size_t i = 0; i < sizeof(devices) / sizeof(devices[0]); i++) {
131 if(devices[i].chip_id == sl->chip_id) {
132 params = &devices[i];
136 if (params == NULL) {
139 printf("%s\n", params->description);
144 stlink_exit_debug_mode(sl);
151 int main(int ac, char** av)
159 err = print_data(av);