{"id":127,"date":"2015-03-24T01:42:52","date_gmt":"2015-03-24T00:42:52","guid":{"rendered":"http:\/\/hobbykeller.spdns.de\/?p=127"},"modified":"2015-08-27T16:49:43","modified_gmt":"2015-08-27T14:49:43","slug":"unbrick-tp-link-tl-wdr4900-with-broken-bootloader","status":"publish","type":"post","link":"https:\/\/hobbykeller.spdns.de\/?p=127","title":{"rendered":"Unbrick TP-Link TL-WDR4900 with broken bootloader"},"content":{"rendered":"<figure id=\"attachment_466\" aria-describedby=\"caption-attachment-466\" style=\"width: 150px\" class=\"wp-caption alignleft\"><a href=\"http:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/flashcat_chip.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-466 size-thumbnail\" src=\"http:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/flashcat_chip-150x150.jpg\" alt=\"Flashcat connected to chip (no external 5V connected yet)\" width=\"150\" height=\"150\" \/><\/a><figcaption id=\"caption-attachment-466\" class=\"wp-caption-text\">Flashcat connected to chip (no external 5V connected yet)<\/figcaption><\/figure>\n<p>In a failed attempt to recover a bricked WDR4900 by serial, the bootloader in the flash memory was erroneously deleted or damaged. This makes things worse as without the device even booting, there is no more option to establish an emergency connection by serial cable.<\/p>\n<p>In this post, a procedure is demonstrated which allows to recover the router by unsoldering the router&#8217;s memory chip and flashing it with an external SPI programming device.<\/p>\n<p><!--more--><\/p>\n<h1>Symptoms<\/h1>\n<p>When powering up the router, the LEDs on the front panel will behave as follows:<\/p>\n<p>[table id=3 \/]<\/p>\n<p>Additionally of course, the router cannot neither be contacted by telnet, nor by ssh or serial cable.<\/p>\n<h1>Remedies<\/h1>\n<p>The only way to blow life back into the router is by one of those two methods.<\/p>\n<ol>\n<li>by JTAG or<\/li>\n<li>by unsoldering the flash chip and reflash it with an external device<\/li>\n<\/ol>\n<p>I first tried to go for the JTAG solution as it would have spared me to desolder the chip from the router. Unfortunately, it was impossible to establish any communication between the FlashcatUSB and the JTAG interface. This might be due to the fact that the router board has a RISCWATCH\/COP layout\u00a0 which probably differs from the EJTAG standard. The following procedure therefore only refers to directly flashing the SPI chip without passing through the JTAG interface.<\/p>\n<h1>Examination of the router<\/h1>\n<p>You can easily open the router as described in the first minutes of <a href=\"https:\/\/www.youtube.com\/watch?v=t35Pei_eb6o\" target=\"_blank\">this video<\/a>. Remove the 3 external antennas, unscrew the 4 screws at the bottom of the case and gently prey the plastic clips open which retain the cover of the plastic case. It is not necessary or advisable to take the board out, as this would require to unsolder the wires of the internal antennas. All work can be done with the router&#8217;s PCB remaining in the bottom part of the case and just the lid being removed.<\/p>\n<h2>The board<\/h2>\n<p>The image below shows the opened router with the flash chip. Note that the 3 DuPont cables in the photo have been added to provide an access to the serial TTL adapter without opening the case (the adapter is of no help though, as it can only be used when U-boot is working correctly).<\/p>\n<figure id=\"attachment_141\" aria-describedby=\"caption-attachment-141\" style=\"width: 648px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/wdr4900_board.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-141\" src=\"http:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/wdr4900_board.jpg\" alt=\"TL-WDR4900 board overview\" width=\"648\" height=\"486\" srcset=\"https:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/wdr4900_board.jpg 648w, https:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/wdr4900_board-300x225.jpg 300w, https:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/wdr4900_board-400x300.jpg 400w\" sizes=\"auto, (max-width: 648px) 100vw, 648px\" \/><\/a><figcaption id=\"caption-attachment-141\" class=\"wp-caption-text\">TL-WDR4900 board overview<\/figcaption><\/figure>\n<h2>Specs of the flash memory chip<\/h2>\n<p>As shown in the overview picture, the memory which holds the damaged bootloader and has to be flashed resides right above the JTAG port on the router board. According to the OpenWRT <a href=\"http:\/\/wiki.openwrt.org\/toh\/tp-link\/tl-wdr4900\" target=\"_blank\">documentation for the WDR4900<\/a> it is a <a href=\"http:\/\/www.spansion.com\/Support\/Datasheets\/S25FL128S_256S_00.pdf\" target=\"_blank\">Spansion FL128SAIF00<\/a> chip (<a href=\"http:\/\/www.spansion.com\/Products\/memory\/Serial-Flash\/Pages\/Spansion%20FL.aspx\" target=\"_blank\">NOR type<\/a>).<\/p>\n<h3>Pin-out<\/h3>\n<p>For starters, a good thing to know would be the pin-out on the Spansion memory chip. I found\u00a0a Macronix document comparing the FL128S Spansion chip with the Macronix MX25L12835F chip which also shows the connection diagramm for our Spansion chip. Nothing surprising here, as the pin-outs for both the current S25FL128S and its P-series predecessor follow the standard layout for SPI chips.<\/p>\n<figure id=\"attachment_154\" aria-describedby=\"caption-attachment-154\" style=\"width: 643px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/spansion_s25fl_s_pinout.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-154 size-full\" src=\"http:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/spansion_s25fl_s_pinout.jpg\" alt=\"Spansion S25FL128 pinout\" width=\"643\" height=\"314\" srcset=\"https:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/spansion_s25fl_s_pinout.jpg 643w, https:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/spansion_s25fl_s_pinout-300x147.jpg 300w, https:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/spansion_s25fl_s_pinout-500x244.jpg 500w\" sizes=\"auto, (max-width: 643px) 100vw, 643px\" \/><\/a><figcaption id=\"caption-attachment-154\" class=\"wp-caption-text\">Pinout for Spansion S25FL128S (left) and its predecessor S25FL128P (right)<\/figcaption><\/figure>\n<h3>Flash memory layout<\/h3>\n<p>Another piece of information we are going to need is the memory flash layout. Inside the u-boot environment of a working router, this can be retrieved with the help of the <a href=\"http:\/\/wiki.openwrt.org\/doc\/techref\/bootloader\/uboot.config\" target=\"_blank\"><code>printenv<\/code><\/a> command.<\/p>\n<p>An alternative way to get the memory mapping is to check on a running router:<\/p>\n<pre class=\"theme:dark-terminal font:droid-sans-mono height-set:true height:250 toolbar:2 striped:false marking:false ranges:false nums:false nums-toggle:false wrap-toggle:false plain:false plain-toggle:false lang:default decode:true\" title=\"Getting the layout of the flash memory\">root@wdr4900:~# cat \/proc\/mtd \r\ndev:    size   erasesize  name\r\nmtd0: 00050000 00010000 \"u-boot\"\r\nmtd1: 00010000 00010000 \"dtb\"\r\nmtd2: 002a0000 00010000 \"kernel\"\r\nmtd3: 00ce0000 00010000 \"rootfs\"\r\nmtd4: 002f0000 00010000 \"rootfs_data\"\r\nmtd5: 00010000 00010000 \"config\"\r\nmtd6: 00010000 00010000 \"caldata\"\r\nmtd7: 00f80000 00010000 \"firmware\"\r\nroot@wdr4900:~# dmesg | grep u-boot\r\n[    0.639973] 0x000000000000-0x000000050000 : \"u-boot\"\r\nroot@wdr4900:~# dmesg | grep dtb\r\n[    0.645617] 0x000000050000-0x000000060000 : \"dtb\"\r\nroot@wdr4900:~# dmesg | grep kernel\r\n[    0.650943] 0x000000060000-0x000000300000 : \"kernel\"\r\nroot@wdr4900:~# dmesg | grep rootfs\r\n[    0.656530] 0x000000300000-0x000000fe0000 : \"rootfs\"\r\nroot@wdr4900:~# dmesg | grep rootfs_data\r\n[    0.676082] 0x000000cf0000-0x000000fe0000 : \"rootfs_data\"\r\nroot@wdr4900:~# dmesg | grep config\r\n[    0.682077] 0x000000fe0000-0x000000ff0000 : \"config\"\r\nroot@wdr4900:~# dmesg | grep caldata\r\n[    0.687660] 0x000000ff0000-0x000001000000 : \"caldata\"\r\nroot@wdr4900:~# dmesg | grep firmware\r\n[    0.693322] 0x000000060000-0x000000fe0000 : \"firmware\"<\/pre>\n<p>Summing up, we can assume that the flash memory layout is as follows:<\/p>\n<p>[table id=6 \/]<\/p>\n<h1>Data to be flashed<\/h1>\n<p>Now is a good moment to think about how to get hold of the data we want to flash. The first thing that comes to mind is to just download the original firmware from TP-Link&#8217;s home page or get hold of an OpenWRT image for that router.<\/p>\n<p>Unfortunately, that won&#8217;t solve your problem because you just get <code>mtd7<\/code> (or even less). What you need, though, is an image of the complete content of the flash memory inside the router. Sometimes, there are folks who upload these images to dev forums (e.g. there is someone who has uploaded the <a href=\"https:\/\/forum.openwrt.org\/viewtopic.php?id=51194\" target=\"_blank\">config partition (<code>mtd5<\/code>) here<\/a>), so google around a bit. At this point I can only issue an urgent <a href=\"http:\/\/blog.michael.kuron-germany.de\/2013\/04\/tp-link-tl-wdr3600\/comment-page-1\/\" target=\"_blank\">public service announcement<\/a> by quoting Michael Kuron&#8217;s blog:<\/p>\n<blockquote><p>Why do people keep on ignoring all recommendations to MAKE A BACKUP OF YOUR ART PARTITION?<\/p><\/blockquote>\n<p>Dear Michael: The problem is probably not that people deliberately ignore your advice but rather that most people (myself unfortunately included) only read that advice when they have already damaged their mtd partitions. But I will do my very best to spread your recommendation.<\/p>\n<p>So <strong>please &#8211; with extra sugar on top &#8211;<\/strong> if anyone reads this post before they have damaged their config and caldata partitions: Back up your mtd partitions before it&#8217;s too late! Even if you find someone who has got the exact same router model and version and who is kind enough to share his mtd partitions, there is a debate on whether the <span style=\"cursor: help;\" title=\"Atheros Radio Testing\">ART<\/span> calibration data is so router specific, that your WLAN functionalities will later be buggy with an mtd5 partition copied from another device.<\/p>\n<p>As I had a working twin router at home, I could dump the mtd images from that device. To dump a partition, just issue the following command on a working router&#8217;s console. As always when working with the <code>dd<\/code> command, be careful not to mix up anything &#8211; there is a reason why <code>dd<\/code> is nicknamed &#8220;disk destroyer&#8221;&#8230;<\/p>\n<pre class=\"theme:dark-terminal toolbar:2 toolbar-overlay:false toolbar-hide:false toolbar-delay:false marking:false ranges:false nums:false wrap-toggle:false plain-toggle:false lang:default decode:true\" title=\"Backing up the mtd partitions of your router\">root@wdr4900:~# dd if=\/dev\/mtd0 of=\/tmp\/dev0_uboot.bin\r\n640+0 records in\r\n640+0 records out\r\nroot@wdr4900:~#<\/pre>\n<p>Proceed the same way for <code>mtd1<\/code>, <code>mtd5<\/code>, <code>mtd6<\/code> and <code>mtd7<\/code>. <code>mtd2<\/code> to <code>mtd4<\/code> do not have to be dumped separately, as the firmware partition <code>mtd7<\/code> includes these 3 partitions already. Once everything is dumped, transfer these files to your computer for further editing.<\/p>\n<h2>Editing the data<\/h2>\n<p>Before writing these dumps back into the memory chip, we should make sure that the MAC addresses coded into the dumps are in line with the MAC address printed on the bottom of our router&#8217;s case. We therefore open the mtd5 backup file with a hex editor and proceed as follows:<\/p>\n<ul>\n<li>With 0x0 being the initial address of the dump of <code>mtd5<\/code>, we find the MAC address printed on the router label at offset 0x144. We will call this MAC address the &#8220;root MAC&#8221;. Set this root address to the values printed on your router&#8217;s label.<\/li>\n<li>After two empty bytes at offsets 0x14a and 0x14b, there is a sequence of eight MAC addresses starting from offset 0x14c and ending at offset 0x17b. Each of these MAC addresses is generated by increasing the previous MAC address by one. If the root MAC address was 00:11:22:33:44:55, the first address in the sequence will be 00:11:22:33:44:56, the next 00:11:22:33:44:55:57 and the final (eighth) one will be 00:11:22:33:44:5d. Edit this sequence so that it matches the root MAC address you just set.<\/li>\n<li>The sequence of the eight MAC addresses derived from the &#8220;root address&#8221; is repeated starting at offset 0x17c and ending at 0x1ab. Make sure you adapt these MAC values, too.<\/li>\n<li>Inside both sequences and between sequences, there are no empty bytes or spaces as separators (unless a MAC address itself contains FF, of course).<\/li>\n<\/ul>\n<h2>Concatenation of the dumps<\/h2>\n<p>All we need to do now is to glue the dumps together to a single binary file to be flashed.\u00a0 Fortunately, with Linux, we can just <code>cat<\/code> them into a single file:<\/p>\n<pre class=\"theme:dark-terminal toolbar:2 toolbar-overlay:false toolbar-hide:false toolbar-delay:false marking:false ranges:false nums:false wrap-toggle:false plain-toggle:false copy:false lang:default decode:true \" title=\"Build a single binary file\">ilek@i7:\/media\/ramdisk$ cat mtd0.bin mtd1.bin mtd7.bin mtd5.bin mtd6.bin &gt; flashfile.bin\r\n<\/pre>\n<h1>Tools needed for the flash procedure<\/h1>\n<p>[table id=13 \/]<\/p>\n<h1>Unsoldering the flash chip<\/h1>\n<p>Although there are some people who try to re-program flash chips &#8220;in situ&#8221; &#8211; i.e. leaving the chip on the board and connecting the FlashcatUSB to the pins soldered to the board, the advice is normally to <strong>first unsolder the chip<\/strong> from the board and then connect it directly to the Flashcat (see <a href=\"https:\/\/tasksofohm.wordpress.com\/hardware\/unbricking-a-tp-link-tl-wa801nd-v2\/\" target=\"_blank\">this post<\/a> for a different TP-Link model from someone who successfully reflashed his chip).<\/p>\n<p>The safest way to unsolder the chip is to use a hot air gun. From my experience, the following settings on the Atten 838D are fine to unsolder the chip:<\/p>\n<ul>\n<li>Air Flow: 2 1\/2 (go for a low air flow to prevent neighbouring parts being unintentionally blown from the board)<\/li>\n<li>Temperature: 350\u00b0C<\/li>\n<li>Nozzle size: medium<\/li>\n<\/ul>\n<h1>Connecting the chip<\/h1>\n<p>The next step is to solder the memory chip on a PCB testing board. Then solder the male ends of 6 DuPont cables to the appropriate points on the testing board and connect the female ends to the FlashcatUSB as shown in the diagram below.<\/p>\n<h2>Basic connection<\/h2>\n<p><a href=\"http:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/spipinout.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-456\" src=\"http:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/spipinout.jpg\" alt=\"Connecting the flash chip\" width=\"534\" height=\"311\" srcset=\"https:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/spipinout.jpg 534w, https:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/spipinout-300x175.jpg 300w, https:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/spipinout-500x291.jpg 500w\" sizes=\"auto, (max-width: 534px) 100vw, 534px\" \/><\/a><\/p>\n<p>VCC and HOLD are both connected to the VCC cable to the FlashcatUSB. The easiest way to achieve this is to short circuit the soldering soldering points 1 and 2 on the testing PCB.<\/p>\n<h2>Power supply<\/h2>\n<p>The majority of failed attempts to flash the chip with the Flashcat are <a href=\"http:\/\/www.blackcatusb.net\/index.php?threads\/s25fl256-and-s25fl128-writing-error.305\/\" target=\"_blank\" class=\"broken_link\">most probably due to insufficient power supply<\/a>. For flashing the chip successfully it is essential to provide sufficient power &#8211; both in terms of tension and current. Symptoms for insufficently powered setups are:<\/p>\n<ul>\n<li>The Flashcat software fails to identify the chip. Or if the chip is correctly identified, one or more of the following problems pop up:<\/li>\n<li>Read operations produce spurious contents, i.e. if you read the contents of the same chip several times, you always get different results for the same content residing in the chip.<\/li>\n<li>Erase operations are finished in less than a second, but after the erase, the chip still contains data.<\/li>\n<li>Write operations fail with thousands of verify errors, and only a tiny fraction of data (if anything at all) is written to the chip. The software becomes unresponsive and after the write op is reported to be completed, the blue LED on the Flashcat keeps blinking for infinite time. The only way to get the Flashcat back into normal operation is to press its reset button.<\/li>\n<\/ul>\n<h3>5V power supply mandatory<\/h3>\n<p>Even though Spansion&#8217;s spec sheets for the memory chip suggest that the chip should be powered with 3.6V, flashing it with the Flashcat requires 5V.<\/p>\n<p>You must therefore ensure that the <strong>power jumper on the Flashcat is set to 5V<\/strong> and not to 3.3V. Once again: The 3.3V setting will <strong>not<\/strong> work, but 5V will &#8211; and there is no reason to be afraid that your chip could be damaged by powering it with 5V.<\/p>\n<h3>External auxiliary power supply needed<\/h3>\n<p>One of the main problems with the power supply is that both the Flashcat and the memory chip get their power from a USB connector, which &#8211; according to the USB specifications &#8211;\u00a0 limits the current provided. This current is not high enough to supply sufficient power to the Flashcat and the chip while read and write operations are carried out.<\/p>\n<p>It is therefore necessary to provide an auxiliary power supply with 5V constant voltage. The additions to the standard wiring according to the Flashcat documentation are shown in orange in the above connection diagram:<\/p>\n<ul>\n<li>The cable leading to pins 1 and 2 of the chip must be connected to <strong>both<\/strong> the Flashcat VCC pin <strong>and<\/strong> the VCC (+) of a 5V external power supply<\/li>\n<li>Likewise, the cable leading to pin 10 of the chip (GND) must be connected to <strong>both<\/strong> to the Flashcat GND pin <strong>and<\/strong> GND (-) of the 5V external power supply.<\/li>\n<\/ul>\n<p>If you have some kind of cable with suitable crocodile clamps or similar, this would be an elegant way to connect the auxiliary power cables to the ends of the cables leading from the Flashcat to the PCB testing board with the chip. Me being an electronics amateur, I went the amateurish (or &#8220;dodgy&#8221;) way and took the two cables from my multimeter with one end plugged into my PSU and the probing ends held against the two pins during the flash procedure.<\/p>\n<figure id=\"attachment_468\" aria-describedby=\"caption-attachment-468\" style=\"width: 520px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/external_power_fcusb.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-468\" src=\"http:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/external_power_fcusb.jpg\" alt=\"There's always a dodgy way to connect an external power supply ;-)\" width=\"520\" height=\"359\" srcset=\"https:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/external_power_fcusb.jpg 520w, https:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/external_power_fcusb-300x207.jpg 300w, https:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/external_power_fcusb-435x300.jpg 435w\" sizes=\"auto, (max-width: 520px) 100vw, 520px\" \/><\/a><figcaption id=\"caption-attachment-468\" class=\"wp-caption-text\">There&#8217;s always a dodgy way to connect an external power supply \ud83d\ude09<\/figcaption><\/figure>\n<h1>Flashing the firmware<\/h1>\n<p>If you have your flashfile ready and your chip connected, power up your FlashcatUSB under Windows, start the Flashcat software and write the file into the chip. I have made a short video of the flashing procedure here.<\/p>\n<p>Note that the current display on the aux PSU jumps between 0 and 0.04A. This shows that the write operation needs about 40 mA more in current than what the computer&#8217;s USB port can deliver.<\/p>\n<div style=\"width: 480px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-127-1\" width=\"480\" height=\"640\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/webm\" src=\"http:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/spi_flashing.webm?_=1\" \/><a href=\"http:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/spi_flashing.webm\">http:\/\/hobbykeller.spdns.de\/wp-content\/uploads\/2015\/01\/spi_flashing.webm<\/a><\/video><\/div>\n<p>After the flash is done, it is advisable to read out the whole flash content once again and to make sure that there are no diffs against the flash file.<\/p>\n<p>After successfully flashing desolder the chip from the testing PCB using the hot air gun. Flux the soldering pads on the router board, clean them a bit with the help of the solder wick, flux again and solder the chip back onto the board using the soldering iron. Make sure all pins are neatly soldered to the SMD pads of the board. Clean any flux remainders with isopropyl alcohol. The router can now be launched in normal operation as before.<\/p>\n<h1>Open Issues<\/h1>\n<p>There is one problem which has not yet been solved. If the twin router from which the mtds have been copied is operated at the same time as the recovered router, their WLANs seem to mix even though the MAC addresses and the SSID differ. It is therefore not possible to operate the WLANs of the donated router and the recovered router at the same time. I am going to investigate this problem and will come up with a solution as soon as I have sufficient information.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In a failed attempt to recover a bricked WDR4900 by serial, the bootloader in the flash memory was erroneously deleted or damaged. This makes things worse as without the device<span class=\"more-button\"><a href=\"https:\/\/hobbykeller.spdns.de\/?p=127\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\">Unbrick TP-Link TL-WDR4900 with broken bootloader<\/span><\/a><\/span><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16],"tags":[65,67,28,27,70,26,68,66,69,25],"class_list":["post-127","post","type-post","status-publish","format-standard","hentry","category-openwrt","tag-blackcat-usb","tag-bootloader-broken","tag-buspirate","tag-flash-memory","tag-flashcatusb","tag-jtag","tag-s25fl128s","tag-spi-flash","tag-unbrick-router","tag-wdr4900"],"_links":{"self":[{"href":"https:\/\/hobbykeller.spdns.de\/index.php?rest_route=\/wp\/v2\/posts\/127","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hobbykeller.spdns.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hobbykeller.spdns.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hobbykeller.spdns.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/hobbykeller.spdns.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=127"}],"version-history":[{"count":69,"href":"https:\/\/hobbykeller.spdns.de\/index.php?rest_route=\/wp\/v2\/posts\/127\/revisions"}],"predecessor-version":[{"id":700,"href":"https:\/\/hobbykeller.spdns.de\/index.php?rest_route=\/wp\/v2\/posts\/127\/revisions\/700"}],"wp:attachment":[{"href":"https:\/\/hobbykeller.spdns.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=127"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hobbykeller.spdns.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=127"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hobbykeller.spdns.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=127"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}