{"id":742,"date":"2015-09-09T19:20:07","date_gmt":"2015-09-10T02:20:07","guid":{"rendered":"http:\/\/visualgdb.com\/w\/?p=742"},"modified":"2017-05-26T10:30:48","modified_gmt":"2017-05-26T17:30:48","slug":"debugging-esp8266-firmware-with-olimex-arm-usb-ocd-h","status":"publish","type":"post","link":"https:\/\/visualgdb.com\/tutorials\/esp8266\/olimex\/","title":{"rendered":"Debugging ESP8266 firmware with Olimex ARM-USB-OCD-H"},"content":{"rendered":"<p>This tutorial shows how to use the inexpensive Olimex ARM-USB-OCD-H adapter to debug ESP8266 firmware using VisualGDB and Visual Studio. Before you begin, install VisualGDB 5.0 or later.<\/p>\n<p><strong>Update: our latest ESP8266 toolchain includes an improved OpenOCD port for ESP8266 that is more stable than the xt-ocd tool described here. Please follow <a href=\"http:\/\/visualgdb.com\/tutorials\/esp8266\/openocd\/\">this tutorial<\/a> for detailed instructions on using it.<\/strong><\/p>\n<ol>\n<li>Setup your JTAG connection as described in the <a href=\"http:\/\/visualgdb.com\/tutorials\/esp8266\">basic ESP8266 tutorial<\/a>, however leave the reset pin unconnected:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/connection.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-744\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/connection.jpg\" alt=\"connection\" width=\"700\" height=\"689\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/connection.jpg 700w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/connection-300x295.jpg 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/a>If you connect the reset pin, the ESP8266 GDB stub will not be able to recognize the core correctly and the debugging won&#8217;t work. In order to work around this bug, the reset should be left unconnected and the device should be reset manually (e.g. by plugging it out and back in) before each debugging session.<\/li>\n<li>Start Visual Studio and launch the VisualGDB Embedded Project Wizard:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/01-prjname.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-746\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/01-prjname.png\" alt=\"01-prjname\" width=\"786\" height=\"500\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/01-prjname.png 786w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/01-prjname-300x191.png 300w\" sizes=\"(max-width: 786px) 100vw, 786px\" \/><\/a><\/li>\n<li>Uncheck the &#8220;bin&#8221; checkbox to avoid generating an extra .bin file (ESP8266 debugging plugin will generate a set of .bin files automatically):<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/02-elf.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-747\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/02-elf.png\" alt=\"02-elf\" width=\"688\" height=\"565\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/02-elf.png 688w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/02-elf-300x246.png 300w\" sizes=\"(max-width: 688px) 100vw, 688px\" \/><\/a><\/li>\n<li>Select the ESP8266 toolchain and the device from the list:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/03-toolchain.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-748\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/03-toolchain.png\" alt=\"03-toolchain\" width=\"688\" height=\"565\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/03-toolchain.png 688w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/03-toolchain-300x246.png 300w\" sizes=\"(max-width: 688px) 100vw, 688px\" \/><\/a><\/li>\n<li>In order to keep things simple while testing the JTAG functionality we will use the basic LEDBlink sample that does not involve any WiFi functionality: <a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/04-sample.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-749\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/04-sample.png\" alt=\"04-sample\" width=\"688\" height=\"565\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/04-sample.png 688w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/04-sample-300x246.png 300w\" sizes=\"(max-width: 688px) 100vw, 688px\" \/><\/a><\/li>\n<li>On the last page of the wizard select the FT2232-based interface and pick the olimex-tiny-h layout:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/05-olimexdev.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-750\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/05-olimexdev.png\" alt=\"05-olimexdev\" width=\"688\" height=\"565\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/05-olimexdev.png 688w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/05-olimexdev-300x246.png 300w\" sizes=\"(max-width: 688px) 100vw, 688px\" \/><\/a><\/li>\n<li>The Xtensa OCD Daemon does not support the ARM-USB-OCD-H programmer, however it supports a similar olimex-tiny-h programmer, that has identical hardware, but a different ID. We will now show how to change the ID of the\u00a0ARM-USB-OCD-H programmer to make it compatible with the Xtensa OCD Daemon. Download and launch <a href=\"http:\/\/visualgdb.com\/UsbDriverTool\/\">USBDriverTool<\/a>, connect your Olimex programmer and install the FTDI CDM driver for both interfaces:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/06-ftdrv.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-751\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/06-ftdrv.png\" alt=\"06-ftdrv\" width=\"595\" height=\"444\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/06-ftdrv.png 595w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/06-ftdrv-300x224.png 300w\" sizes=\"(max-width: 595px) 100vw, 595px\" \/><\/a><\/li>\n<li>Ensure that the driver is installed successfully for both interface 00 and 01:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/07-alldrv.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-752\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/07-alldrv.png\" alt=\"07-alldrv\" width=\"595\" height=\"444\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/07-alldrv.png 595w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/07-alldrv-300x224.png 300w\" sizes=\"(max-width: 595px) 100vw, 595px\" \/><\/a><\/li>\n<li>Download, install and launch <a href=\"http:\/\/www.ftdichip.com\/Support\/Utilities.htm#FT_PROG\">FT_Prog<\/a>. Then select &#8220;Scan and Parse&#8221; to populate the device list:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/08-ftprog.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-753\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/08-ftprog.png\" alt=\"08-ftprog\" width=\"624\" height=\"729\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/08-ftprog.png 624w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/08-ftprog-257x300.png 257w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/a><\/li>\n<li>We will now use FT_Prog to change the product ID of the Olimex USB-OCD-H device. Ensure that the vendor ID is set to <strong>15BA<\/strong> and set the product ID to <strong>002A<\/strong>:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/09-vidpid.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-754\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/09-vidpid.png\" alt=\"09-vidpid\" width=\"624\" height=\"729\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/09-vidpid.png 624w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/09-vidpid-257x300.png 257w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/a><\/li>\n<li>Click the &#8220;Program Devices&#8221; button:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/10-program.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-755\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/10-program.png\" alt=\"10-program\" width=\"624\" height=\"729\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/10-program.png 624w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/10-program-257x300.png 257w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/a><\/li>\n<li>Finally press the &#8220;Program&#8221; button to apply the changes:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/11-program-done.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-756\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/11-program-done.png\" alt=\"11-program-done\" width=\"562\" height=\"377\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/11-program-done.png 562w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/11-program-done-300x201.png 300w\" sizes=\"(max-width: 562px) 100vw, 562px\" \/><\/a><\/li>\n<li>Once the programming is complete, reconnect the device. As the ID has been changed, the drivers won&#8217;t be installed anymore: <a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/12-driver.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-757\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/12-driver.png\" alt=\"12-driver\" width=\"595\" height=\"444\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/12-driver.png 595w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/12-driver-300x224.png 300w\" sizes=\"(max-width: 595px) 100vw, 595px\" \/><\/a><\/li>\n<li>Install the FTDI CDM driver for both interfaces and use the FT_Prog tool to find the serial number of the device:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/13-serialno.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-758\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/13-serialno.png\" alt=\"13-serialno\" width=\"624\" height=\"729\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/13-serialno.png 624w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/13-serialno-257x300.png 257w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/a><\/li>\n<li>Go back to VisualGDB Embedded Project Wizard and enter the serial number observed in FT_Prog. Also lower the speed to 3MHz:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/14-settings.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-759\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/14-settings.png\" alt=\"14-settings\" width=\"688\" height=\"565\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/14-settings.png 688w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/14-settings-300x246.png 300w\" sizes=\"(max-width: 688px) 100vw, 688px\" \/><\/a><\/li>\n<li>Press &#8220;Finish&#8221; to generate the project. Build it with Ctrl-Shift-B:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/15-build.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-760\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/15-build.png\" alt=\"15-build\" width=\"988\" height=\"667\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/15-build.png 988w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/15-build-300x203.png 300w\" sizes=\"(max-width: 988px) 100vw, 988px\" \/><\/a><\/li>\n<li>Now you can start debugging by pressing F5. Observe how VisualGDB programs the SPI FLASH:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/16-program.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-761\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/16-program.png\" alt=\"16-program\" width=\"990\" height=\"670\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/16-program.png 990w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/16-program-300x203.png 300w\" sizes=\"(max-width: 990px) 100vw, 990px\" \/><\/a><\/li>\n<li>Now you can try setting breakpoints in your code. If the debugging does not work, observe the xt-ocd output for information about the encountered problems. Note that the &#8220;Error opening probe &#8230; trying with &#8216;A&#8217; suffix&#8221; message is normal:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/17-bkpt.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-762\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/17-bkpt.png\" alt=\"17-bkpt\" width=\"988\" height=\"667\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/17-bkpt.png 988w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/17-bkpt-300x203.png 300w\" sizes=\"(max-width: 988px) 100vw, 988px\" \/><\/a><\/li>\n<li>If you have connected the serial port on the ESP8266 device to the serial port of the Olimex ARM-USB-OCD-H like described in <a href=\"http:\/\/visualgdb.com\/tutorials\/esp8266\">this tutorial<\/a>, you need to install the USB serial port driver in order to view the output from the COM port. Locate the serial port in Device Manager:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/18-serport.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-763\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/18-serport.png\" alt=\"18-serport\" width=\"628\" height=\"572\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/18-serport.png 628w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/18-serport-300x273.png 300w\" sizes=\"(max-width: 628px) 100vw, 628px\" \/><\/a><\/li>\n<li>Check device properties to find the serial port corresponding to interface 01 (it will have &amp;MI_01 at the end of the last hardware ID):<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/19-mi01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-764\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/19-mi01.png\" alt=\"19-mi01\" width=\"400\" height=\"455\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/19-mi01.png 400w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/19-mi01-264x300.png 264w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/a><\/li>\n<li>Start updating the drivers for that COM port and select &#8220;Let me pick a list of device drivers&#8221;:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/20-pickdrv.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-765\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/20-pickdrv.png\" alt=\"20-pickdrv\" width=\"614\" height=\"454\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/20-pickdrv.png 614w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/20-pickdrv-300x222.png 300w\" sizes=\"(max-width: 614px) 100vw, 614px\" \/><\/a><\/li>\n<li>Click &#8220;Have disk&#8221; and specify the FTDI CDM driver directory under the directory where you have extracted USBDriverTool:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/21-havedisk.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-766\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/21-havedisk.png\" alt=\"21-havedisk\" width=\"614\" height=\"454\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/21-havedisk.png 614w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/21-havedisk-300x222.png 300w\" sizes=\"(max-width: 614px) 100vw, 614px\" \/><\/a><\/li>\n<li>Select the USB Serial Port driver from the list: <a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/22-serialport.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-767\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/22-serialport.png\" alt=\"22-serialport\" width=\"614\" height=\"454\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/22-serialport.png 614w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/22-serialport-300x222.png 300w\" sizes=\"(max-width: 614px) 100vw, 614px\" \/><\/a><\/li>\n<li>Finally go to VisualGDB Project Properties and enable the Raw Terminal on the newly installed COM port. Ensure you\u00a0 specify the correct baud rate:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/23-terminal.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-768\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/23-terminal.png\" alt=\"23-terminal\" width=\"879\" height=\"592\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/23-terminal.png 879w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2015\/09\/23-terminal-300x202.png 300w\" sizes=\"(max-width: 879px) 100vw, 879px\" \/><\/a><\/li>\n<li>Once the Raw Terminal is enabled, you will see the output from the COM port inside Visual Studio once you start debugging. See <a href=\"http:\/\/visualgdb.com\/tutorials\/esp8266\/http\/\">this tutorial<\/a> for an example of reading the output from the COM port.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This tutorial shows how to use the inexpensive Olimex ARM-USB-OCD-H adapter to debug ESP8266 firmware using VisualGDB and Visual Studio.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[142],"tags":[100],"_links":{"self":[{"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/posts\/742"}],"collection":[{"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/comments?post=742"}],"version-history":[{"count":6,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/posts\/742\/revisions"}],"predecessor-version":[{"id":1176,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/posts\/742\/revisions\/1176"}],"wp:attachment":[{"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/media?parent=742"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/categories?post=742"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/tags?post=742"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}