{"id":3891,"date":"2018-04-27T14:16:38","date_gmt":"2018-04-27T21:16:38","guid":{"rendered":"https:\/\/visualgdb.com\/w\/?p=3891"},"modified":"2018-04-27T14:16:38","modified_gmt":"2018-04-27T21:16:38","slug":"troubleshooting-esp8266-flash-connection-issues","status":"publish","type":"post","link":"https:\/\/visualgdb.com\/tutorials\/esp8266\/spiflash\/","title":{"rendered":"Troubleshooting ESP8266 FLASH connection issues"},"content":{"rendered":"<p>This tutorial\u00a0demonstrates how to\u00a0understand\u00a0the interaction between the ESP8266 chip and the on-board SPI FLASH. We will create a basic &#8220;Blinking LED&#8221; application stored in the SPI FLASH and will then use\u00a0the Cypress\u00a0SuperSpeed Explorer kit with\u00a0<a href=\"https:\/\/sysprogs.com\/analyzer2go\/\">Analyzer2Go<\/a>\u00a0to capture a high-speed trace of\u00a0the SPI FLASH signals, will explain how different commands in different modes are sent and how to diagnose\u00a0FLASH-related problems by checking the responses to\u00a0the\u00a0key\u00a0commands.<\/p>\n<ol>\n<li>Start Visual Studio and open the VisualGDB Embedded Project Wizard:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/06-build.png\"><br \/>\n<\/a> <a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/01-prjname.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3893\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/01-prjname.png\" alt=\"01-prjname\" width=\"873\" height=\"609\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/01-prjname.png 873w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/01-prjname-300x209.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/01-prjname-392x272.png 392w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/01-prjname-130x90.png 130w\" sizes=\"(max-width: 873px) 100vw, 873px\" \/><\/a><\/li>\n<li>Proceed with\u00a0the default choice of creating a new project:<br \/>\n<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/01-prjname.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3895\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/02-emb.png\" alt=\"02-emb\" width=\"856\" height=\"693\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/02-emb.png 856w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/02-emb-300x243.png 300w\" sizes=\"(max-width: 856px) 100vw, 856px\" \/><\/a><\/li>\n<li><\/li>\n<li>Select the ESP8266 toolchain and\u00a0proceed with the default ESP8266 device settings:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/03-device.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3894\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/03-device.png\" alt=\"03-device\" width=\"856\" height=\"693\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/03-device.png 856w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/03-device-300x243.png 300w\" sizes=\"(max-width: 856px) 100vw, 856px\" \/><\/a><\/li>\n<li>Pick the default LEDBlink (IoT) sample and press &#8220;next&#8221;:<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3897\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/04-sample1.png\" alt=\"04-sample\" width=\"856\" height=\"693\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/04-sample1.png 856w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/04-sample1-300x243.png 300w\" sizes=\"(max-width: 856px) 100vw, 856px\" \/><\/li>\n<li>Connect your JTAG probe\u00a0via USB and pick in on the Debug Method page:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/02-emb.png\"><br \/>\n<\/a> <a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/05-debug.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3896\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/05-debug.png\" alt=\"05-debug\" width=\"856\" height=\"693\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/05-debug.png 856w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/05-debug-300x243.png 300w\" sizes=\"(max-width: 856px) 100vw, 856px\" \/><\/a><\/li>\n<li>Finally press &#8220;Finish&#8221; to create the project and build it by pressing Ctrl-Shift-B:<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3892\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/06-build.png\" alt=\"06-build\" width=\"1187\" height=\"724\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/06-build.png 1187w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/06-build-300x183.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/06-build-1024x625.png 1024w\" sizes=\"(max-width: 1187px) 100vw, 1187px\" \/>Then press F5 to program the FLASH memory and begin debugging\u00a0your firmware. The rest of the tutorial will show how various FLASH-related signals look like\u00a0when the ESP8266 chip is accessing the FLASH memory in different modes. If your program does not\u00a0run properly,\u00a0compare the commands and responses captured from your board with the ones shown\u00a0in this tutorial in order to pinpoint the cause.<\/li>\n<li>In order to see the interaction between the ESP8266 chip and the SPI FLASH, you will need to\u00a0capture the following signals:<br \/>\n<table>\n<tbody>\n<tr>\n<td>Signal<\/td>\n<td>Name<\/td>\n<td>Pin on the\u00a0<a href=\"https:\/\/github.com\/OLIMEX\/ESP8266\/blob\/master\/HARDWARE\/MOD-WIFI-ESP8266-DEV\/MOD-WIFI-ESP8266-DEV_schematic.pdf\">Olimex\u00a0MOD-WIFI-ESP8266-DEV<\/a> board<\/td>\n<\/tr>\n<tr>\n<td>Clock<\/td>\n<td>SD_CLK<\/td>\n<td>5<\/td>\n<\/tr>\n<tr>\n<td>Chip select<\/td>\n<td>SD_CMD<\/td>\n<td>8<\/td>\n<\/tr>\n<tr>\n<td>QSPI data pin #0 \/ SPI MOSI<\/td>\n<td>SD_DATA_0<\/td>\n<td>9<\/td>\n<\/tr>\n<tr>\n<td>QSPI data pin #1 \/ SPI MISO<\/td>\n<td>SD_DATA1<\/td>\n<td>7<\/td>\n<\/tr>\n<tr>\n<td>QSPI data pin #2<\/td>\n<td>SD_DATA2<\/td>\n<td>6<\/td>\n<\/tr>\n<tr>\n<td>QSPI data pin #3<\/td>\n<td>SD_DATA3<\/td>\n<td>10<\/td>\n<\/tr>\n<tr>\n<td>UART\/LED output<\/td>\n<td>GPIO5<\/td>\n<td>11<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Connect them to the logic analyzer board (don&#8217;t forget\u00a0to connect GND), then start Analyzer2Go and select the SuperSpeed Explorer Kit board:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/03-explorer.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3913\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/03-explorer.png\" alt=\"03-explorer\" width=\"880\" height=\"534\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/03-explorer.png 880w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/03-explorer-300x182.png 300w\" sizes=\"(max-width: 880px) 100vw, 880px\" \/><\/a><strong>Warning! As the SPI FLASH uses\u00a0relatively high frequencies, ensure that the wires connecting your logic analyzer to the ESP8266 board are as short as possible to\u00a0avoid cross-talk.<\/strong><\/li>\n<li>Press OK and\u00a0enable\u00a0capturing of the signals.\u00a0If the firmware is running successfully, you will see short bursts of activity. During active FLASH commands the SD_CMD (nCS) pin will go low, the SD_CLK pin will start transmitting clock and the IO0-IO3 pins will be used to transfer the data:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/07-led.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3898\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/07-led.png\" alt=\"07-led\" width=\"1683\" height=\"1066\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/07-led.png 1683w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/07-led-300x190.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/07-led-1024x649.png 1024w\" sizes=\"(max-width: 1683px) 100vw, 1683px\" \/><\/a><\/li>\n<li>Now we will record the entire startup sequence of the ESP8266 chip and will analyze\u00a0different phases of it.\u00a0Connect the\u00a0Reset pin on your board to\u00a0GND and\u00a0press the &#8220;Record&#8221; button in Analyzer2Go. Then release the reset pin. You will see a large burst of FLASH activity followed by shorter bursts (as the LEDBlink program is very basic, most\u00a0of the code\u00a0will get quickly cached internally and the SPI\u00a0FLASH\u00a0interaction will be minimal):<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/08-record.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3899\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/08-record.png\" alt=\"08-record\" width=\"1378\" height=\"856\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/08-record.png 1378w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/08-record-300x186.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/08-record-1024x636.png 1024w\" sizes=\"(max-width: 1378px) 100vw, 1378px\" \/><\/a><\/li>\n<li>Stop recording and zoom into the first burst of SPI activity:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/09-zoom.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3900\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/09-zoom.png\" alt=\"09-zoom\" width=\"1378\" height=\"856\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/09-zoom.png 1378w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/09-zoom-300x186.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/09-zoom-1024x636.png 1024w\" sizes=\"(max-width: 1378px) 100vw, 1378px\" \/><\/a><\/li>\n<li>If you zoom to the first data burst, you will see that the first\u00a0SPI FLASH commands sent by the ESP8266 are using a lower 13 MHz clock, even if a higher clock rate was configured in the project properties. As the ESP8266 chip doesn&#8217;t know the FLASH type\/speed at this point yet, it uses the most basic setting:<br \/>\n<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/10-mhz.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3901\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/10-mhz.png\" alt=\"10-mhz\" width=\"1692\" height=\"856\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/10-mhz.png 1692w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/10-mhz-300x152.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/10-mhz-1024x518.png 1024w\" sizes=\"(max-width: 1692px) 100vw, 1692px\" \/><\/a><\/li>\n<li>Switch to the Protocol Analyzers tab and add the SPI analyzer. See how the first command consists of the 0xAB command byte followed by 4 zeroes and the reply from the SPI FLASH module is 0x14:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/11-release.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3902\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/11-release.png\" alt=\"11-release\" width=\"1692\" height=\"963\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/11-release.png 1692w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/11-release-300x171.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/11-release-1024x583.png 1024w\" sizes=\"(max-width: 1692px) 100vw, 1692px\" \/><\/a><\/li>\n<li>You can\u00a0find the command bytes for all commands in the <a href=\"http:\/\/www.datasheetspdf.com\/pdf\/721458\/Winbond\/W25Q16V\/1\">QSPI FLASH datasheet<\/a>. The 0xAB command\u00a0releases the device from the power down mode and the device responds with\u00a0its ID byte (0x14):<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/12-datasheet.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3903\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/12-datasheet.png\" alt=\"12-datasheet\" width=\"1311\" height=\"737\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/12-datasheet.png 1311w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/12-datasheet-300x169.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/12-datasheet-1024x576.png 1024w\" sizes=\"(max-width: 1311px) 100vw, 1311px\" \/><\/a>Note that this command is sent using the\u00a0regular SPI protocol that uses just 1 pin per direction.\u00a0Most of the subsequent commands are the ESP8266 querying the status register of the FLASH module to see when it becomes ready.<\/li>\n<li>If you zoom out of the\u00a0first data burst, you will see that the QSPI pins (IO2-IO3) stay inactive during the first group of commands and\u00a0become active later. Zoom in to that part of the capture:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/13-ios.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3904\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/13-ios.png\" alt=\"13-ios\" width=\"1692\" height=\"1062\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/13-ios.png 1692w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/13-ios-300x188.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/13-ios-1024x643.png 1024w\" sizes=\"(max-width: 1692px) 100vw, 1692px\" \/><\/a><\/li>\n<li>The first\u00a0command that utilizes all 4 QSPI pins is 0xEB (read data over QSPI):<br \/>\n<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/14-read.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3905\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/14-read.png\" alt=\"14-read\" width=\"1626\" height=\"1035\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/14-read.png 1626w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/14-read-300x191.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/14-read-1024x652.png 1024w\" sizes=\"(max-width: 1626px) 100vw, 1626px\" \/><\/a><\/li>\n<li>To interpret it, add a QSPI\u00a0protocol analyzer to the Protocol Analyzers pane.\u00a0Note that the\u00a0command byte (0xEB) is transferred via the regular SPI protocol (and hence the QSPI data makes no sense for it), while the rest of the command uses the QSPI pins (hence the regular SPI data makes no sense):<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/15-addr.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3906\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/15-addr.png\" alt=\"15-addr\" width=\"1650\" height=\"1035\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/15-addr.png 1650w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/15-addr-300x188.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/15-addr-1024x642.png 1024w\" sizes=\"(max-width: 1650px) 100vw, 1650px\" \/><\/a><\/li>\n<li>In this example the ESP8266 reads data at address 0x00000010 and the QSPI FLASH returns the following bytes: 01 00 00 00 FF FF FF FF 01 01 01 01 01 00:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/16-data.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3907\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/16-data.png\" alt=\"16-data\" width=\"1650\" height=\"1035\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/16-data.png 1650w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/16-data-300x188.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/16-data-1024x642.png 1024w\" sizes=\"(max-width: 1650px) 100vw, 1650px\" \/><\/a><\/li>\n<li>Compare the bytes returned by the QSPI FLASH with the actual FLASH contents (either the <strong>.bin<\/strong> file of your project, or the\u00a0FLASH snapshot\u00a0created via the ESP8266 bootloader):<br \/>\n<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/17-refdata.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3908\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/17-refdata.png\" alt=\"17-refdata\" width=\"608\" height=\"114\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/17-refdata.png 608w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/17-refdata-300x56.png 300w\" sizes=\"(max-width: 608px) 100vw, 608px\" \/><\/a><\/li>\n<li>You can use the &#8220;Show all output as text&#8221;\u00a0checkbox to display all capture QSPI data in a separate pane in Analyzer2Go and search for specific patterns (e.g. read addresses):<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/18-fastread.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3909\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/18-fastread.png\" alt=\"18-fastread\" width=\"1811\" height=\"907\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/18-fastread.png 1811w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/18-fastread-300x150.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/18-fastread-1024x513.png 1024w\" sizes=\"(max-width: 1811px) 100vw, 1811px\" \/><\/a>If the data received from\u00a0the SPI FLASH doesn&#8217;t match the expected values, check that none of the SPI pins is stuck at a fixed value (0 or 1). If this is the case, double-check the connection between the ESP8266\u00a0and the SPI FLASH.<\/li>\n<li>Now we will show how the FLASH reading commands change if you switch from QSPI to DSPI. Open VisualGDB Project Properties and switch QIO to DIO:<br \/>\n<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/19-dio.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3910\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/19-dio.png\" alt=\"19-dio\" width=\"1013\" height=\"563\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/19-dio.png 1013w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/19-dio-300x167.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/19-dio-800x445.png 800w\" sizes=\"(max-width: 1013px) 100vw, 1013px\" \/><\/a><\/li>\n<li>Start\u00a0recording with Analyzer2Go and\u00a0run the\u00a0firmware again. See how instead of 0xEB command, ESP8266 is now using the 0xBB command (read data via DSPI) and how the IO2 and IO3 pins are now unused:<br \/>\n<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/20-diodata.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3911\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/20-diodata.png\" alt=\"20-diodata\" width=\"1686\" height=\"899\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/20-diodata.png 1686w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/20-diodata-300x160.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/20-diodata-1024x546.png 1024w\" sizes=\"(max-width: 1686px) 100vw, 1686px\" \/><\/a><\/li>\n<li>Using DSPI instead of QSPI reduces the amount of used pins, but increases the time required to read each data chunk. You can see this by comparing the burst times in Analyzer2Go:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/21-dioslower.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3912\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/21-dioslower.png\" alt=\"21-dioslower\" width=\"1746\" height=\"899\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/21-dioslower.png 1746w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/21-dioslower-300x154.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2018\/04\/21-dioslower-1024x527.png 1024w\" sizes=\"(max-width: 1746px) 100vw, 1746px\" \/><\/a>You can also\u00a0try experimenting with different cache settings and see how this affects the SPI FLASH reading patterns, so you can\u00a0choose the right trade-off between performance and extra memory.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>This tutorial\u00a0demonstrates how to\u00a0understand\u00a0the interaction between the ESP8266 chip and the on-board SPI FLASH. We will create a basic &#8220;Blinking<\/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":[161,100,162],"_links":{"self":[{"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/posts\/3891"}],"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=3891"}],"version-history":[{"count":1,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/posts\/3891\/revisions"}],"predecessor-version":[{"id":3914,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/posts\/3891\/revisions\/3914"}],"wp:attachment":[{"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/media?parent=3891"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/categories?post=3891"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/tags?post=3891"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}