рд╡рд╛рдпрд░рд▓реЗрд╕ рдбрд┐рдмрдЧрд┐рдВрдЧ STM32

рдореИрдВ рдПрд╕рдЯреАрдПрдо 32 рдФрд░ рдУрдкрдирдУрд╕реАрдбреА рдХреЗ рдмреАрдЪ рдПрдХ рдордзреНрдпрд╕реНрде рдХреЗ рд░реВрдк рдореЗрдВ рдИрдПрд╕рдкреА 8266 рдХреЗ рдЕрд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдиреБрдХрд╕рд╛рди рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп (рд╡рд╛рдпрд░реНрдб) рдбреАрдмрдЧрд┐рдВрдЧ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдкреНрд▓рд╕ рд╣реИ, рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реАрдзреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рд▓рд┐рдП рдЬрд╛рдКрдВрдЧрд╛:

  1. OpenOCD рдкреИрдЪ рдЖрд╡рд╢реНрдпрдХ рд╣реИ
  2. ESP8266 рдореЗрдВ рдлрд░реНрдорд╡реЗрдпрд░ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  3. рдХрдо рдЧрддрд┐

рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? OpenOCD SWD рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рдбреНрд░рд╛рдЗрд╡рд░ рд╣реИ рдЬрд┐рд╕реЗ рд░рд┐рдореЛрдЯ_рдмрд┐рдЯрдмреИрдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд╛рдо рд╕реЗ рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рддрд░реНрдХ рд╕реНрддрд░ рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛ 1 рдФрд░ 0 рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред

рд░рд┐рд╕реАрд╡рд░ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ ESP8266) рдХреЛ рдЗрди рдирдВрдмрд░реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрддрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, Remote_bitbang рдореЗрдВ SWD рд╕рдорд░реНрдерди рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╡рд╣рд╛рдБ рдЬреЛрдбрд╝рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ:

рдпрд╣рд╛рдБ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдкреИрдЪ рд╣реИ
--- remote_bitbang.c	2016-10-31 11:06:57.812267924 +0600
+++ remote_bitbang.c	2016-10-31 12:33:57.921692808 +0600
@@ -120,11 +120,25 @@
 	remote_bitbang_putc(c);
 }
 
+static int remote_bitbang_swdio_read (void)
+{
+	remote_swd_putc ('R');
+	return remote_bitbang_rread ();
+}
+
+static void remote_bitbang_swdio_drive (bool is_output)
+{
+	char c = is_output ? 'o' : 'i';
+	remote_bitbang_putc (c);
+}
+
 static struct bitbang_interface remote_bitbang_bitbang = {
 	.read = &remote_bitbang_read,
 	.write = &remote_bitbang_write,
 	.reset = &remote_bitbang_reset,
 	.blink = &remote_bitbang_blink,
+	.swdio_read = &remote_bitbang_swdio_read,
+	.swdio_drive = &remote_bitbang_swdio_drive,	
 };
 
 static int remote_bitbang_init_tcp(void)
@@ -271,10 +285,14 @@
 	COMMAND_REGISTRATION_DONE,
 };
 
+static const char * const remote_bitbang_transport[] = { "jtag", "swd", NULL };
+
 struct jtag_interface remote_bitbang_interface = {
 	.name = "remote_bitbang",
+	.transports = remote_bitbang_transport,
 	.execute_queue = &bitbang_execute_queue,
 	.commands = remote_bitbang_command_handlers,
+	.swd = &bitbang_swd,
 	.init = &remote_bitbang_init,
 	.quit = &remote_bitbang_quit,
 };


рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ ESP8266 рдлрд░реНрдорд╡реЗрдпрд░ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдУрдкрдирдУрд╕реАрдбреА рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХрдорд╛рдВрдбреНрд╕ рдХреЛ рд╕рдордЭ рд╕рдХреЗред рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрд╕реНрдк-рдУрдкрди-рдЖрд░рдЯреАрдУрдПрд╕ рдУрдкрди рдПрд╕рдбреАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ ред рдореИрдВ рд╕рдВрдкреВрд░реНрдг рдлрд╝рд░реНрдорд╡реЗрдпрд░ рдХреЛрдб рдирд╣реАрдВ рджреВрдВрдЧрд╛ - рдпрд╣ рдмрд▓реНрдХрд┐ рдмрдбрд╝рд╛ рд╣реИ, рдореИрдВ рдУрдкрдирдУрд╕реАрдбреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЗрд╡рд▓ рдЗрд╕рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рджреВрдВрдЧрд╛ред

рд╕реНрдкреЙрдЗрд▓рд░
#define SWCLK				0
#define SWDIO				2

IRAM void openocd_handler (void *pvParameters)
{
	struct netconn *nc = (struct netconn *) pvParameters;
	struct netbuf *rbuf = NULL;
	char *rx_buf;
	char d, r;
	err_t err;
	uint16_t len;
	uint16_t i;
	
	gpio_set_pullup (SWCLK, false, false);
	gpio_set_pullup (SWDIO, false, false);
	gpio_enable (SWCLK, GPIO_OUTPUT);
	gpio_enable (SWDIO, GPIO_OUTPUT);
	
	while (1)
	{
		if ((err = netconn_recv (nc, &rbuf)) != ERR_OK) {
			printf ("R ERROR %d\n", err);
			return;
		}
		
		netbuf_data (rbuf, (void **) &rx_buf, &len);	
		
		for (i = 0; i < len; i++)
		{
			switch (rx_buf [i])
			{
			case 'Q':		// Quit
				netconn_disconnect (nc);
				return;
			
			case '0'...'7':
				d = rx_buf [i] - '0';
				gpio_write (SWDIO, (d & 0x1));
				gpio_write (SWCLK, !!(d & 0x4));								
				break;
			
			case 'i':
				gpio_enable (SWDIO, GPIO_INPUT);
				break;
			
			case 'o':
				gpio_enable (SWDIO, GPIO_OUTPUT);
				break;
			
			case 'R':		// Writeback
				r = ((char) gpio_read (SWDIO)) + '0';
				netconn_write (nc, &r, 1, NETCONN_COPY);
				break; 
			}
		}
		
		netbuf_delete (rbuf);
	}
}


рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдИрдПрд╕рдкреА -01 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЙрд╕рдХреЗ рджреЛ рдореБрдХреНрдд рдкреИрд░ рд╣реИрдВ, GPIO-0 рдФрд░ GPIO-2, рдФрд░ рдЬрдм рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рджреВрд╕рд░рд╛ рдЪрд░рдг рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдирд┐рдпрдВрддреНрд░рдХ рдмреВрдЯрд▓реЛрдбрд░ рдореЛрдб рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, 10k рд░реЛрдХрдиреЗрд╡рд╛рд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд┐рдЬрд▓реА рдХреА рдЖрдкреВрд░реНрддрд┐ рдХреЗ рд▓рд┐рдП рдкреИрд░ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИред

рдХрдо рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдХреЗ рд░реВрдк рдореЗрдВред рд╣рд╛рдВ, рд╡рд╣ рджреБрдЦреА рд╣реЛрдХрд░ рдХрджрдо рд╕реЗ рдХрджрдо рдорд┐рд▓рд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ рднрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рд░реБрдХрд╛рд╡рдЯ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдПрдХ рдЪрд░ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдЖрдк ESO8266 рдкрд░ рдУрдкрдирдУрд╕реАрдбреА рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕реЗрдВрдЯ-рд▓рд┐рдВрдХ рдХреЗ рдмрд░рд╛рдмрд░ рдЧрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/hi398781/


All Articles