{"id":501739,"date":"2026-11-05T12:48:23","date_gmt":"2026-11-05T09:48:23","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=501739"},"modified":"2026-11-05T12:48:23","modified_gmt":"2026-11-05T09:48:23","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=501739","title":{"rendered":"\u0424\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0435 SPI NOR Flash w25q16j"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/86\/50\/3e\/86503e0b442ac1f7a634065432aa5275.png\" width=\"634\" height=\"451\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/86\/50\/3e\/86503e0b442ac1f7a634065432aa5275.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/86\/50\/3e\/86503e0b442ac1f7a634065432aa5275.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><strong>\u041f\u0440\u043e\u043b\u043e\u0433<\/strong><\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u0435 \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u043e\u0439 w25q16j. \u042d\u0442\u043e \u044d\u043d\u0435\u0440\u0433\u043e\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u0430\u044f 133MHz SPI Nor flash \u043f\u0430\u043c\u044f\u0442\u044c \u043e\u0431\u044a\u0435\u043c\u043e\u043c 2 MByte. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 QSPI \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a \u0438\u0437 SPI (XIP).<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0430 \u0441 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439. \u041f\u043b\u044e\u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u041f\u041e.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/6e\/71\/00\/6e7100dcddc4d67c2fbdff09b091d800.png\" width=\"514\" height=\"572\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/6e\/71\/00\/6e7100dcddc4d67c2fbdff09b091d800.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/6e\/71\/00\/6e7100dcddc4d67c2fbdff09b091d800.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><strong>\u0421\u0445\u0435\u043c\u043e\u0442\u0435\u0445\u043d\u0438\u043a\u0430<\/strong><\/p>\n<p>\u0412 \u0448\u0438\u0440\u043e\u043a\u0443\u044e \u043a\u043b\u0435\u0442\u043a\u0443 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 w25q16j \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0442 \u0432 \u0442\u0430\u043a\u043e\u0439 \u043c\u043d\u0435\u043c\u043e\u0441\u0445\u0435\u043c\u043e\u0439. \u041f\u0430\u043c\u044f\u0442\u044c \u0434\u043e\u0440\u043e\u0433\u0430\u044f. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f 45 RUR \u0437\u0430 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/38\/0a\/3a\/380a3afb1b94691a38d291c19ddfa4f2.png\" width=\"722\" height=\"475\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/38\/0a\/3a\/380a3afb1b94691a38d291c19ddfa4f2.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/38\/0a\/3a\/380a3afb1b94691a38d291c19ddfa4f2.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0418\u0437 \u0447\u0438\u043f\u0430 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0440\u043e\u0432\u043d\u043e 8 \u043f\u0438\u043d\u043e\u0432<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/f8\/8b\/26\/f88b26b870dce7cbeab33efe60db3524.png\" width=\"865\" height=\"349\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/f8\/8b\/26\/f88b26b870dce7cbeab33efe60db3524.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/f8\/8b\/26\/f88b26b870dce7cbeab33efe60db3524.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b? \u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043b\u0438\u0431\u043e \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043b\u0438\u0431\u043e \u043d\u0430 \u0441\u0435\u043a\u0442\u043e\u0440\u044b \u0438\u043b\u0438 \u0431\u043b\u043e\u043a\u0438. \u041c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 W25Q16JV \u0432\u044b\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0443\u043c 100 000 (100K) \u0446\u0438\u043a\u043b\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\/\u0441\u0442\u0438\u0440\u0430\u043d\u0438\u044f \u043d\u0430 \u0441\u0435\u043a\u0442\u043e\u0440. \u0421\u0440\u043e\u043a \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 20 \u043b\u0435\u0442.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0431\u0438\u0442 \u0434\u043b\u044f \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0440\u0430\u0437\u043c\u0435\u0440 \u0447\u0430\u0441\u0442\u0438, \u0431\u0430\u0439\u0442<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0415\u043c\u043a\u043e\u0441\u0442\u044c \u0447\u0438\u043f\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">21<\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">2097152<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0431\u0430\u0439\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">13<\/p>\n<\/td>\n<td>\n<p align=\"left\">256<\/p>\n<\/td>\n<td>\n<p align=\"left\">8192<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0442\u0440\u0430\u043d\u0438\u0446<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">9<\/p>\n<\/td>\n<td>\n<p align=\"left\">4096<\/p>\n<\/td>\n<td>\n<p align=\"left\">512<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0435\u043a\u0442\u043e\u0440\u043e\u0432<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">5<\/p>\n<\/td>\n<td>\n<p align=\"left\">65536<\/p>\n<\/td>\n<td>\n<p align=\"left\">32<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0431\u043b\u043e\u043a\u043e\u0432<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438 2MByte \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0441\u0435\u0433\u043e 21 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441 24 \u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 SPI \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 Flash \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0431\u043e\u043b\u0435\u0435 16 MByte, \u0438\u0431\u043e 2 \u0432 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 24 \u0440\u0430\u0432\u043d\u043e 16 777 216 \u0431\u0430\u0439\u0442.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/14\/36\/97\/14369788e1a34b1ca67075afd59de6d5.png\" width=\"1466\" height=\"618\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/14\/36\/97\/14369788e1a34b1ca67075afd59de6d5.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/14\/36\/97\/14369788e1a34b1ca67075afd59de6d5.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><strong>\u041e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432<\/strong><\/p>\n<p>\u0413\u0434\u0435 \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u0441\u043c\u0435\u0445\u0443 w25q16j \u0432 \u043f\u0440\u0438\u0440\u043e\u0434\u0435? \u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u0435\u0435 \u043b\u0435\u043f\u044f\u0442 \u043f\u043e\u0432\u0441\u044e\u0434\u0443. \u0415\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043d\u0430 \u043f\u043b\u0430\u0442\u0435<a href=\"https:\/\/stm32-base.org\/boards\/STM32F407VGT6-STM32F4XX-M\" rel=\"noopener nofollow\"> STM32F4XX M<\/a>. \u0414\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u043a\u0443\u043f\u0438\u0442\u044c \u0443\u0447\u0435\u0431\u043d\u0443\u044e \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0443 JL_32F4XX. \u041d\u0430 \u043d\u0435\u0439 \u043a\u0430\u043a \u0440\u0430\u0437 \u043f\u0440\u0438\u043f\u0430\u044f\u043d\u0430 \u0432\u043e\u0441\u044c\u043c\u0438 \u043f\u0438\u043d\u043e\u0432\u0430\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 w25q16j \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0441\u043b\u043e\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/06\/08\/67\/060867e0aeae4bcd68a95bea7beba927.png\" alt=\"STM32F4XX\" title=\"STM32F4XX\" width=\"1920\" height=\"1280\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/06\/08\/67\/060867e0aeae4bcd68a95bea7beba927.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/06\/08\/67\/060867e0aeae4bcd68a95bea7beba927.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>STM32F4XX<\/figcaption><\/div>\n<\/figure>\n<p>\u041c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043a SPI3<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/25\/0b\/f3\/250bf39a8478500263228b441d88b031.png\" width=\"1213\" height=\"407\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/25\/0b\/f3\/250bf39a8478500263228b441d88b031.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/25\/0b\/f3\/250bf39a8478500263228b441d88b031.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u044f \u0431\u0443\u0434\u0443 \u043d\u0430 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0435 STM32F4XX. \u0422\u0430\u043c \u0447\u0438\u043f W25Q16JV \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0432\u043e\u0442 \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0430\u0432\u0438\u043b\u0443.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>W25Q16JV<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>GPIO<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>JTAG<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>DIR MCU<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>Function<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>PINmux<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>Connect<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">CS<\/p>\n<\/td>\n<td>\n<p align=\"left\">PB14<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">out<\/p>\n<\/td>\n<td>\n<p align=\"left\">GPIO<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">H2.54<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">DI<\/p>\n<\/td>\n<td>\n<p align=\"left\">PB5<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">out<\/p>\n<\/td>\n<td>\n<p align=\"left\">SPI3_MOSI<\/p>\n<\/td>\n<td>\n<p align=\"left\">6<\/p>\n<\/td>\n<td>\n<p align=\"left\">H2.5<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">DO<\/p>\n<\/td>\n<td>\n<p align=\"left\">PB4<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">in<\/p>\n<\/td>\n<td>\n<p align=\"left\">SPI3_MISO<\/p>\n<\/td>\n<td>\n<p align=\"left\">6<\/p>\n<\/td>\n<td>\n<p align=\"left\">H2.6<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">CLK<\/p>\n<\/td>\n<td>\n<p align=\"left\">PB3<\/p>\n<\/td>\n<td>\n<p align=\"left\">JTDO<\/p>\n<\/td>\n<td>\n<p align=\"left\">out<\/p>\n<\/td>\n<td>\n<p align=\"left\">SPI3_SCK<\/p>\n<\/td>\n<td>\n<p align=\"left\">6<\/p>\n<\/td>\n<td>\n<p align=\"left\">H2.7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">HOKD<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">WP<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u044d\u0442\u0438\u043c 4\u043c \u043f\u0438\u043d\u0430\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 SPI3 \u0442\u0440\u0430\u0444\u0444\u0438\u043a\u0430.<br \/> \u041f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b <strong>JL_32F4XX <\/strong>\u043d\u0430\u0434\u043e \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 SWD. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e SPI3 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 JTAG \u043f\u0438\u043d JTDO(PB3). PB3 \u0437\u0430\u043d\u044f\u0442 SPI3_SCK. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c PB3 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f JTDO.<\/p>\n<p><strong>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/strong><\/p>\n<p><strong>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/strong><\/p>\n<p>\u0421\u0432\u044f\u0437\u044c \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u043e\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 SPI. \u041b\u0438\u0431\u043e QSPI. \u0411\u0438\u0442\u044b \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u043f\u0430\u0434\u0443 \u043d\u0430 \u043f\u0440\u043e\u0432\u043e\u0434\u0435 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u043e\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0411\u0438\u0442\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u0448\u0438\u043c \u0432\u043f\u0435\u0440\u0435\u0434 (MSB First). \u0427\u0430\u0441\u0442\u043e\u0442\u0443 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0433\u043d\u0430\u0442\u044c \u0434\u043e 133 MHz.<\/p>\n<p>\u041d\u0430 STM32 \u0441\u0430\u043c\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0435\u0434 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0434\u043b\u044f \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f SPI3 \u044d\u0442\u043e 2.<\/p>\n<pre><code>\/** @defgroup SPI_BaudRate_Prescaler SPI BaudRate Prescaler\u00a0\u00a0* @{\u00a0\u00a0*\/#define SPI_BAUDRATEPRESCALER_2 \u00a0 \u00a0 \u00a0 \u00a0 (0x00000000U)#define SPI_BAUDRATEPRESCALER_4 \u00a0 \u00a0 \u00a0 \u00a0 (SPI_CR1_BR_0)#define SPI_BAUDRATEPRESCALER_8 \u00a0 \u00a0 \u00a0 \u00a0 (SPI_CR1_BR_1)#define SPI_BAUDRATEPRESCALER_16\u00a0 \u00a0 \u00a0 \u00a0 (SPI_CR1_BR_1 | SPI_CR1_BR_0)#define SPI_BAUDRATEPRESCALER_32\u00a0 \u00a0 \u00a0 \u00a0 (SPI_CR1_BR_2)#define SPI_BAUDRATEPRESCALER_64\u00a0 \u00a0 \u00a0 \u00a0 (SPI_CR1_BR_2 | SPI_CR1_BR_0)#define SPI_BAUDRATEPRESCALER_128 \u00a0 \u00a0 \u00a0 (SPI_CR1_BR_2 | SPI_CR1_BR_1)#define SPI_BAUDRATEPRESCALER_256 \u00a0 \u00a0 \u00a0 (SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c SPI3 \u0442\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0442 \u0448\u0438\u043d\u044b APB1 \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e 42MHz.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/71\/45\/e7\/7145e71e6a9ddb6500a4bc9796a1d579.png\" width=\"918\" height=\"217\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/71\/45\/e7\/7145e71e6a9ddb6500a4bc9796a1d579.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/71\/45\/e7\/7145e71e6a9ddb6500a4bc9796a1d579.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 PCB \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c W25 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 21 MHz. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0441\u0445\u0435\u043c\u043e\u0442\u0435\u0445\u043d\u0438\u043a\u0438 JL_32F4XX \u0441\u0442\u043e\u0438\u043b\u043e \u0431\u044b \u0432\u0441\u0451 \u0436\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u043b\u044f W25 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 SPI1, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430 STM32 \u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0442\u044c 42MHz.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/af\/85\/6f\/af856ffc83f1d33a5239c79118c4b506.png\" width=\"407\" height=\"165\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/af\/85\/6f\/af856ffc83f1d33a5239c79118c4b506.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/af\/85\/6f\/af856ffc83f1d33a5239c79118c4b506.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><strong>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043c\u0430\u043d\u0434<\/strong><\/p>\n<p>\u0423 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b. \u041f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443 \u044d\u0442\u043e 42 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u0430. \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043f\u0430\u043a\u0435\u0442\u0430.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/da\/29\/d3\/da29d31852e65dea558257c6612a3186.png\" width=\"545\" height=\"721\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/da\/29\/d3\/da29d31852e65dea558257c6612a3186.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/da\/29\/d3\/da29d31852e65dea558257c6612a3186.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><strong>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b<br \/><\/strong>\u041a\u0430\u043a \u0438 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043d\u0430\u0432\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u043e\u0433\u043e ASIC-\u0430 \u0443 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b w25q16j \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b. \u0418\u0445 \u0432\u0441\u0435\u0433\u043e \u0441\u0435\u043c\u044c \u0448\u0442\u0443\u043a.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0420\u0430\u0437\u043c\u0435\u0440<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>RD Cmd<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>WR Cmd<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Status1<\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">0x05<\/p>\n<\/td>\n<td>\n<p align=\"left\">0x01<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Status2<\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">0x35<\/p>\n<\/td>\n<td>\n<p align=\"left\">0x31<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Status3<\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">0x15<\/p>\n<\/td>\n<td>\n<p align=\"left\">0x11<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">JEDEC ID<\/p>\n<\/td>\n<td>\n<p align=\"left\">3<\/p>\n<\/td>\n<td>\n<p align=\"left\">0x9f<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Mad ID<\/p>\n<\/td>\n<td>\n<p align=\"left\">4<\/p>\n<\/td>\n<td>\n<p align=\"left\">0x92<\/p>\n<\/td>\n<td>\n<p align=\"left\">\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">sfdp<\/p>\n<\/td>\n<td>\n<p align=\"left\">256<\/p>\n<\/td>\n<td>\n<p align=\"left\">0x5A<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">unique_id<\/p>\n<\/td>\n<td>\n<p align=\"left\">8<\/p>\n<\/td>\n<td>\n<p align=\"left\">0x4B<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 w25q16j \u043c\u043e\u0436\u043d\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0448\u0438\u043d\u0435 SPI \u043f\u043e \u0435\u0451 ID.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>SPI \u041a\u043e\u043c\u0430\u043d\u0434\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">manufacturer_id<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>0xef<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">0x9F<\/p>\n<\/td>\n<td>\n<p align=\"left\">JEDEC ID<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">memory type<\/p>\n<\/td>\n<td>\n<p align=\"left\">0x40<\/p>\n<\/td>\n<td>\n<p align=\"left\">0x9F<\/p>\n<\/td>\n<td>\n<p align=\"left\">JEDEC ID<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">capacity id<\/p>\n<\/td>\n<td>\n<p align=\"left\">0x15<\/p>\n<\/td>\n<td>\n<p align=\"left\">0x9F<\/p>\n<\/td>\n<td>\n<p align=\"left\">JEDEC ID<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Device Id<\/p>\n<\/td>\n<td>\n<p align=\"left\">0x14<\/p>\n<\/td>\n<td>\n<p align=\"left\">0x90<\/p>\n<\/td>\n<td>\n<p align=\"left\">Manufacturer \/ Device ID\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">unique_id<\/p>\n<\/td>\n<td>\n<p align=\"left\">0x2a7664cb278863e6<\/p>\n<\/td>\n<td>\n<p align=\"left\">0x4B<\/p>\n<\/td>\n<td>\n<p align=\"left\">Unique ID Number<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041a\u0430\u043a \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043e, \u0443 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b w25q16j \u0432\u043d\u0443\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043c\u0430\u043d\u0434. \u0412\u0441\u0435\u0433\u043e 42 \u043a\u043e\u043c\u0430\u043d\u0434\u044b! \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f 99 % \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u043e \u043a\u0440\u043e\u0445\u043e\u0442\u043d\u043e\u0435 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e SPI \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0442\u0440\u0438 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438: \u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0441\u0442\u0438\u0440\u0430\u043d\u0438\u0435 \u0441\u0435\u043a\u0442\u043e\u0440\u0430, \u0437\u0430\u043f\u0438\u0441\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 &#8212; \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0446\u0438\u0438.<\/p>\n<p><strong>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0438<br \/><\/strong>1) \u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0447\u0442\u0435\u043d\u0438\u044f (0x03) \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e 24-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430.<br \/> \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e SPI \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p><strong>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0442\u0438\u0440\u0430\u043d\u0438\u0435 \u0441\u0435\u043a\u0442\u043e\u0440\u0430<br \/><\/strong>1) \u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u0437\u0430\u043f\u0438\u0441\u0438. \u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 WRITE_ENABLE, \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0431\u0438\u0442 WEL (WRITE ENABLE LATCH) \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 1. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 WEL=1 \u043c\u043e\u0436\u043d\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435.<br \/> 2) \u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0441\u0442\u0435\u0440\u0435\u0442\u044c \u0441\u0435\u043a\u0442\u043e\u0440 (SECTOR_ERASE_4KB) \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0435\u043a\u0442\u043e\u0440\u0430.<br \/>3) \u041e\u0436\u0438\u0434\u0430\u0442\u044c \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0441\u0442\u0438\u0440\u0430\u043d\u0438\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 1 \u0438 \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u0447\u0442\u043e\u0431\u044b \u0432 \u0431\u0438\u0442\u0435 BUSY \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0.<br \/>4) \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0444\u0430\u043a\u0442 \u0441\u0442\u0438\u0440\u0430\u043d\u0438\u044f \u043f\u0443\u0442\u0435\u043c \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0441\u0432\u0435\u0440\u043a\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0441 FF.<\/p>\n<p><strong>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438<br \/><\/strong>1) \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u043d\u044b\u0439 \u043f\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0443 256 \u0430\u0434\u0440\u0435\u0441 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<p>\u0412\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u2014 \u0430\u0434\u0440\u0435\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u043e\u043c \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043d\u0443\u043b\u044f. \u041f\u0435\u0440\u0438\u043e\u0434\u044b \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0435\u043f\u0435\u043d\u0435\u0439 \u0434\u0432\u043e\u0439\u043a\u0438 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 256.<\/p>\n<p>2) \u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u043e\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435. \u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 WRITE_ENABLE, \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0431\u0438\u0442 WEL (WRITE ENABLE LATCH) \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 1. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 WEL=1 \u043c\u043e\u0436\u043d\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435.<br \/> 3) \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 Page program.<br \/>4) \u041e\u0436\u0438\u0434\u0430\u0442\u044c \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 1 \u0438 \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u0447\u0442\u043e\u0431\u044b \u0432 \u0431\u0438\u0442\u0435 BUSY \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0.<br \/>5) \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u043e\u0432\u043f\u0430\u043b \u0441 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u043c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<p><strong>\u0414\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u0430 \u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 w25q16<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u2116<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0414\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0415\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u0441\u0442\u0438\u0440\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u0447\u0438\u043f\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0430\u043b\u043e \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u044d\u0442\u043e 16 MByte<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">2<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442 \u0432\u044b\u0431\u0438\u0442\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u043a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 NAND<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0430\u0434\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0439 \u0438\u0437\u043d\u043e\u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">3<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043e\u0437\u0430\u043f\u0438\u0441\u044c \u044f\u0447\u0435\u0435\u043a \u0444\u043b\u0435\u0448\u2011\u043f\u0430\u043c\u044f\u0442\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0431\u0430\u0439\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0xFE, \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c 0xFC, \u0438 \u0432 \u0444\u0438\u043d\u0430\u043b\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u0436\u0435 0xFC. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 NVRAM \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<\/td>\n<td>\n<p align=\"left\">\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u0438 \u0441\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u0433\u043e\u043b\u043e\u0439 SPI flash \u043a\u0440\u0430\u0439\u043d\u0435 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u043c \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0440\u044f\u043c\u043e \u043f\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438\u043b\u0438, \u0435\u0449\u0435 \u0445\u0443\u0436\u0435, \u0441\u0442\u0435\u0440\u0435\u0442\u044c word \u043f\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u0441\u0435\u043a\u0442\u043e\u0440\u043e\u0432. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 SPI flash \u043c\u043e\u0433\u0443\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u043c, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c\u0441\u044f \u0432 \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u0435. \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b &#8212; \u0437\u0430\u043f\u0443\u0441\u043a \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p><strong>\u041f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Little-FS<\/strong><\/p>\n<p>\u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f third\u2011party open source Little FS. Third\u2011party \u2014 \u043a\u043e\u0434 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0441\u043a\u0430\u0447\u0430\u043b\u0438 \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430.<\/p>\n<p>\u0421\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0433\u043e\u043b\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b w25q16 \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u0438. \u041c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 \u043d\u0435\u0439 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0437 \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u0412\u043e\u0442 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 LittleFS, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432 2018 \u0433\u043e\u0434\u0443.<\/p>\n<p>File &#8212; \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0430\u0439\u0442\u043e\u0432 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c RAM, ROM (Flash), FRAM, EEPROM, SD \u043a\u0430\u0440\u0442\u044b. \u0427\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439? \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a \u044d\u0442\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e. \u041f\u0443\u0441\u0442\u044c \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u043e\u0435 16-\u0431\u0438\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e. \u0422\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432, \u0442\u043e \u0440\u044f\u0434\u043e\u043c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0434\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u0434\u043b\u0438\u043d\u0443 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u0414\u043b\u0438\u043d\u0443 \u0444\u0430\u0439\u043b\u0430 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430.<\/p>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b LittleFS \u043b\u0435\u0436\u0430\u0442 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043d\u0430 GitHub. \u0417\u0430\u0434\u0430\u0447\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433-\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 API \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b w25q16 \u043a \u043a\u043e\u0434\u0443 LittleFS. \u041f\u0435\u0440\u0435\u0434 \u0432\u0430\u043c\u0438 \u043a\u043e\u043d\u0444\u0438\u0433 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 W25q16 \u043a \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 little fs.<\/p>\n<pre><code class=\"cpp\">#include \"little_fs_config.h\"#include \"data_utils.h\"#include \"flash_mcal.h\"#include \"log.h\"#ifdef HAS_W25Q16J#include \"w25q16j_mcal.h\"#endif#include \"little_fs.h\"#ifdef LFS_NO_MALLOC\/\/ Optional statically allocated read buffer.\/\/ Must be cache_size.\/\/ By default lfs_malloc is used to allocate this buffer.static uint8_t StaticFileBuffer[LITTLE_FS_CACHE_SIZE] = {0};static uint8_t readBuffer[LITTLE_FS_CACHE_SIZE] = {0};static uint8_t progBuffer[LITTLE_FS_CACHE_SIZE] = {0};static uint8_t lookaheadBuffer[LITTLE_FS_PAGE_SIZE] = {0};#endifstatic int FlashToLittleFsRet(bool res) {    int ret = LFS_ERR_OK;    if (false == res) {        ret = LFS_ERR_CORRUPT;    }    return ret;}static int flash_device_prog(const struct lfs_config* c,                             lfs_block_t block,                             lfs_off_t off,                             const void* buffer,                             lfs_size_t size) {    int ret = LFS_ERR_CORRUPT;    LOG_NOTICE(LITTLE_FS, \"Write,Block:%u,OffSet:%u,Size:%u\", block, off, size);    LittleFsHandle_t* Node = LittleFsGetNode(1);    if(Node) {#ifdef HAS_W25Q16J        uint32_t phy_address = 0;        phy_address = Node-&gt;base_address  + block * LITTLE_FS_BLOCK_SIZE + off;        bool res = false;        res = w25q16j_page_program(1, phy_address, (uint8_t*) buffer, size);        ret = FlashToLittleFsRet(res);#endif    }    return ret;}static int flash_block_device_read(const struct lfs_config* c,                                   lfs_block_t block,                                   lfs_off_t off,                                   void* buffer,                                   lfs_size_t size) {    int ret = 0;    LittleFsHandle_t* Node = LittleFsGetNode(1);    if(Node) {#ifdef HAS_W25Q16J        LOG_PARN(LITTLE_FS, \"Read,Block:%u,OffSet:%u,Size:%u\", block, off, size);        uint32_t phy_address = 0;        phy_address =  Node-&gt;base_address + block * LITTLE_FS_BLOCK_SIZE + off;        bool res = false;        res = w25q16j_read(1, phy_address, (uint8_t*) buffer, size);        ret = FlashToLittleFsRet(res);#endif    }    return ret;}static int flash_block_device_erase(const struct lfs_config* c,                                            lfs_block_t block) {    int ret = LFS_ERR_CORRUPT;    LOG_WARNING(LITTLE_FS, \"EraseBlock:%u\", block);    LittleFsHandle_t* Node = LittleFsGetNode(1);    if(Node) {#ifdef HAS_W25Q16J        uint32_t phy_address = Node-&gt;base_address + block * LITTLE_FS_BLOCK_SIZE;        bool res = w25q16j_erase_sector(1,  phy_address);        ret = FlashToLittleFsRet(res);#endif    }    return ret;}static int flash_block_device_sync(const struct lfs_config* c) {    int ret = LFS_ERR_OK;    LOG_DEBUG(LITTLE_FS, \"Sync\");    return ret;}static struct lfs_attr attrs={        \/\/ 8-bit type of attribute, provided by user and used to        \/\/ identify the attribute        .type = 0,        \/\/ Pointer to buffer containing the attribute        .buffer = NULL,        \/\/ Size of attribute in bytes, limited to LFS_ATTR_MAX        .size = 0,};const LittleFsConfig_t SECTION_CFG_DATA LittleFsConfig[] = {        {          .num = 1,          .base_address = 0,          .valid = true,          .name = \"LittleFsForNVRAM\",          \/\/ Optional configuration provided during lfs_file_opencfg          .file_config = {                \/\/ Optional statically allocated file buffer. Must be cache_size.                \/\/ By default lfs_malloc is used to allocate this buffer.               .buffer= StaticFileBuffer,                \/\/ Optional list of custom attributes related to the file. If the file                \/\/ is opened with read access, these attributes will be read from disk                \/\/ during the open call. If the file is opened with write access, the                \/\/ attributes will be written to disk every file sync or close. This                \/\/ write occurs atomically with update to the file's contents.                \/\/                \/\/ Custom attributes are uniquely identified by an 8-bit type and limited                \/\/ to LFS_ATTR_MAX bytes. When read, if the stored attribute is smaller                \/\/ than the buffer, it will be padded with zeros. If the stored attribute                \/\/ is larger, then it will be silently truncated. If the attribute is not                \/\/ found, it will be created implicitly.                \/\/ Custom attribute structure, used to describe custom attributes                \/\/ committed atomically during file writes.               .attrs = &amp;attrs,                \/\/ Number of custom attributes in the list               .attr_count=0,          },          .cfg = {                 \/\/ block device operations              .read = flash_block_device_read,              .prog = flash_device_prog,              .erase = flash_block_device_erase,              .sync = flash_block_device_sync,        #ifdef LFS_NO_MALLOC              .read_buffer = readBuffer,              .prog_buffer = progBuffer,              .lookahead_buffer = lookaheadBuffer,        #endif              \/\/ block device configuration              .read_size = LITTLE_FS_PAGE_SIZE,              .prog_size = LITTLE_FS_PAGE_SIZE,              .cache_size = LITTLE_FS_CACHE_SIZE,              .lookahead_size = LITTLE_FS_PAGE_SIZE,              .block_cycles = 100000,              .block_size = LITTLE_FS_BLOCK_SIZE,              .block_count = LITTLE_FS_FLASH_SIZE\/LITTLE_FS_BLOCK_SIZE,        },    },};LittleFsHandle_t LittleFsInstance[] = { { .num = 1, .valid = true, }, };COMPONENT_GET_CNT(LittleFs, little_fs)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0421 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 LittleFS \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c, \u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043d\u0435 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u044f\u0441\u044c \u043f\u0440\u043e \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0439 \u0438\u0437\u043d\u043e\u0441 \u043f\u043e\u043b\u0435\u0439 NOR Flash. \u041a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u0432\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u0442\u0435 \u043d\u0430 PC. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b dynamic wear leveling \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u044b \u043f\u0440\u044f\u043c\u043e \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e LittleFS. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0430\u0439\u043b\u043e\u043c.<\/p>\n<pre><code>int lfs_format(lfs_t lfs, const struct lfs_config config);int lfs_mount(lfs_t lfs, const struct lfs_config config);int lfs_unmount(lfs_t *lfs);int lfs_remove(lfs_t lfs, const char path);int lfs_rename(lfs_t lfs, const char oldpath, const char *newpath);int lfs_stat(lfs_t lfs, const char path, struct lfs_info *info);lfs_ssize_t lfs_getattr(lfs_t lfs, const char path, uint8_t type, void *buffer, lfs_size_t size);int lfs_setattr(lfs_t lfs, const char path, uint8_t type, const void *buffer, lfs_size_t size);int lfs_removeattr(lfs_t lfs, const char path, uint8_t type);int lfs_file_open(lfs_t lfs, lfs_file_t file,\u00a0 const char *path, int flags);int lfs_file_opencfg(lfs_t lfs, lfs_file_t file,\u00a0 const char *path, int flags,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const struct lfs_file_config *config);int lfs_file_close(lfs_t lfs, lfs_file_t file);int lfs_file_sync(lfs_t lfs, lfs_file_t file);lfs_ssize_t lfs_file_read(lfs_t lfs, lfs_file_t file,\u00a0 \u00a0 \u00a0 \u00a0 void *buffer, lfs_size_t size);lfs_ssize_t lfs_file_write(lfs_t lfs, lfs_file_t file,\u00a0 \u00a0 \u00a0 \u00a0 const void *buffer, lfs_size_t size);lfs_soff_t lfs_file_seek(lfs_t lfs, lfs_file_t file, \u00a0 \u00a0 \u00a0 \u00a0 lfs_soff_t off, int whence);int lfs_file_truncate(lfs_t lfs, lfs_file_t file, lfs_off_t size);lfs_soff_t lfs_file_tell(lfs_t lfs, lfs_file_t file);int lfs_file_rewind(lfs_t lfs, lfs_file_t file);lfs_soff_t lfs_file_size(lfs_t lfs, lfs_file_t file);int lfs_mkdir(lfs_t lfs, const char path);int lfs_dir_open(lfs_t lfs, lfs_dir_t dir, const char *path);int lfs_dir_close(lfs_t lfs, lfs_dir_t dir);int lfs_dir_read(lfs_t lfs, lfs_dir_t dir, struct lfs_info *info);int lfs_dir_seek(lfs_t lfs, lfs_dir_t dir, lfs_off_t off);lfs_soff_t lfs_dir_tell(lfs_t lfs, lfs_dir_t dir);int lfs_dir_rewind(lfs_t lfs, lfs_dir_t dir);int lfs_fs_stat(lfs_t lfs, struct lfs_fsinfo fsinfo);lfs_ssize_t lfs_fs_size(lfs_t *lfs);int lfs_fs_traverse(lfs_t lfs, int (cb)(void*, lfs_block_t), void *data);int lfs_fs_mkconsistent(lfs_t *lfs);int lfs_fs_gc(lfs_t *lfs);int lfs_fs_grow(lfs_t *lfs, lfs_size_t block_count);int lfs_migrate(lfs_t lfs, const struct lfs_config cfg);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 printf \u043d\u0430\u0434\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0434\u0430 LittleFS. \u0427\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 LittleFS \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0434\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 <strong>-DLFS_NO_DEBUG, -DLFS_NO_WARN, -DLFS_NO_ASSERT, -DLFS_NO_ERROR.<\/strong>\u0412 Embedded \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e printf \u0438\u0437 LibC.<\/p>\n<p><strong>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f LitteFS<\/strong><\/p>\n<p>1&#8212;\u041c\u043e\u0436\u043d\u043e \u0432 LittleFS \u0444\u0430\u0439\u043b\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0446\u0435\u043b\u0443\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0435\u0435 \u0432 bootloader-\u0430\u0445.<br \/>2&#8212;\u0412 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043a\u043b\u0430\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043b\u043e\u0433\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0432\u0441\u0435\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. \u041c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0439 \u0447\u0435\u0440\u043d\u044b\u0439 \u044f\u0449\u0438\u043a. \u0411\u043b\u0430\u0433\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e: 8 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442.<br \/>3&#8212;\u041c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0434\u043b\u044f \u044d\u043a\u0440\u0430\u043d\u043e\u0432, \u0437\u0430\u043f\u0438\u0441\u0438 \u0441 ADC \u0438 \u043f\u0440\u043e\u0447\u0435\u0435.<br \/>4&#8212;\u041c\u043e\u0436\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c NVRAM \u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u0430\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b PLL, \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440, \u043a\u043b\u044e\u0447\u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0435\u0440\u0438\u043e\u0434\u044b \u0441\u0442\u043e\u0440\u043e\u0436\u0435\u0432\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430, \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 \u043e\u0442\u043a\u0430\u0437 \u0438 \u043f\u0440. \u0418\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0438 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f NVRAM \u0432\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c\u0438. \u0412\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u0442\u0435 \u043e\u0434\u043d\u0443 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0441 NVRAM \u0438 \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0442\u0443\u0434\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041d\u0430\u043b\u0438\u0447\u0438\u0435 NVRAM \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 UDS.<\/p>\n<p><strong>\u041f\u0443\u0441\u043a NVRAM<\/strong><\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u044d\u0442\u043e \u0435\u0449\u0435 \u043d\u0435 \u043a\u043e\u043d\u0435\u0446 \u0440\u0430\u0431\u043e\u0442\u044b. \u041b\u044e\u0431\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0435 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441 <strong>\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438<\/strong>. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212; \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0444\u0430\u0439\u043b. \u042d\u0442\u043e \u0444\u0430\u0439\u043b \u0441 <strong>\u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/strong>: \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f, \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u044b\u0435 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0438, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u043e\u0447\u0435\u0435. \u0410 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u044d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0437\u0430\u0434\u0430\u0447\u0430 NVRAM.<\/p>\n<p><strong>NVRAM <\/strong>&#8212; \u044d\u043d\u0435\u0440\u0433\u043e\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c (NV) \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c (RAM). \u041f\u043e \u0441\u0443\u0442\u0438 Key Val-Map(\u043a\u0430). \u0412 \u043d\u0435\u0439 \u043c\u043e\u0433\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u043b\u044e\u0431\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u043e \u0441\u0432\u043e\u0438\u043c ID \u0447\u0438\u0441\u043b\u043e\u043c.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/04\/18\/42\/041842efb7be199c1c2903300cf21687.png\" width=\"1087\" height=\"282\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/04\/18\/42\/041842efb7be199c1c2903300cf21687.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/04\/18\/42\/041842efb7be199c1c2903300cf21687.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u043e\u0432\u0435\u0440\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c NVRAM. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0441\u0430\u043c\u043e \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430. \u041c\u043e\u0436\u043d\u043e \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b 32-\u0431\u0438\u0442\u043d\u044b\u043c\u0438 hex \u0447\u0438\u0441\u043b\u0430\u043c\u0438. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u043e, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0430\u0439\u043b\u0430. \u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0435 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0440\u044f\u043c\u043e \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 text. \u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 NVRAM \u043c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0434\u0443\u043c\u0430\u0442\u044c \u043e \u0438\u0437\u043d\u043e\u0441\u0435 \u044f\u0447\u0435\u0435\u043a Flash \u043f\u0430\u043c\u044f\u0442\u0438. \u042d\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 Little FS.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/f6\/ed\/d1\/f6edd10f44159ea426e4d027c4a7bb5e.png\" width=\"930\" height=\"537\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/f6\/ed\/d1\/f6edd10f44159ea426e4d027c4a7bb5e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/f6\/ed\/d1\/f6edd10f44159ea426e4d027c4a7bb5e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><strong>\u041e\u0442\u043b\u0430\u0434\u043a\u0430<\/strong><\/p>\n<p>\u041e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c SPI \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 <strong>DS-Logic<\/strong>.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/bf\/38\/f0\/bf38f01253c4a24cd7c8e271f1a5f3df.png\" alt=\"\u0427\u0442\u0435\u043d\u0438\u0435 Man ID Dev ID\" title=\"\u0427\u0442\u0435\u043d\u0438\u0435 Man ID Dev ID\" width=\"1369\" height=\"444\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/bf\/38\/f0\/bf38f01253c4a24cd7c8e271f1a5f3df.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/bf\/38\/f0\/bf38f01253c4a24cd7c8e271f1a5f3df.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0427\u0442\u0435\u043d\u0438\u0435 Man ID Dev ID<\/figcaption><\/div>\n<\/figure>\n<p> \u0427\u0442\u0435\u043d\u0438\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e 64-\u0431\u0438\u0442\u043d\u043e\u0433\u043e ID<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/eb\/9c\/c3\/eb9cc38ad990c73a0c9b896a286db503.png\" alt=\"\u0427\u0442\u0435\u043d\u0438\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e 64-\u0431\u0438\u0442\u043d\u043e\u0433\u043e ID\" title=\"\u0427\u0442\u0435\u043d\u0438\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e 64-\u0431\u0438\u0442\u043d\u043e\u0433\u043e ID\" width=\"1271\" height=\"453\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/eb\/9c\/c3\/eb9cc38ad990c73a0c9b896a286db503.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/eb\/9c\/c3\/eb9cc38ad990c73a0c9b896a286db503.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0427\u0442\u0435\u043d\u0438\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e 64-\u0431\u0438\u0442\u043d\u043e\u0433\u043e ID<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 ASIC\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0433\u043e ID \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0432 \u0433\u043b\u0430\u0432\u043d\u0443\u044e \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/dd\/5b\/71\/dd5b7176e16a0e19895a4d08c93c360c.png\" width=\"1304\" height=\"382\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/dd\/5b\/71\/dd5b7176e16a0e19895a4d08c93c360c.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/dd\/5b\/71\/dd5b7176e16a0e19895a4d08c93c360c.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0434\u043b\u044f w25q \u043c\u043e\u0436\u043d\u043e \u0442\u0443\u0442 \u0436\u0435 \u0432 UART \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 tr w25q+.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/1c\/1d\/12\/1c1d124ca835396135afac584b1ba9c3.png\" width=\"1115\" height=\"717\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/1c\/1d\/12\/1c1d124ca835396135afac584b1ba9c3.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/1c\/1d\/12\/1c1d124ca835396135afac584b1ba9c3.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041b\u043e\u0433 \u0442\u0435\u0441\u0442\u0430<\/p>\n<pre><code>tr w25*cmd_unit_test_run() argc 1255.622,+5703,273,I,[TEST],key [w25*]255.623,+1,274,I,[TEST],test_w25q16j_types()********* test,OkTest,58\/117,[Name:[w25q16j_types],Fun:0x803d7c1],FailCnt:0255.925,+302,275,I,[TEST],test_w25q16j_read_jedec()255.925,+0,276,I,[w25q16j],manufacturer_id:0xef255.926,+1,277,I,[w25q16j],memory_type:0x40255.926,+0,278,I,[w25q16j],capacity_id:0x15********* test,OkTest,59\/117,[Name:[w25q16j_read_jedec],Fun:0x803e1c5],FailCnt:0256.228,+302,279,I,[TEST],test_w25q16j_read_unique_id()256.228,+0,280,I,[TEST],unique_id1:0x2a7664cb278863e6256.229,+1,281,I,[TEST],unique_id2:0x2a7664cb278863e6********* test,OkTest,60\/117,[Name:[w25q16j_read_unique_id],Fun:0x803e289],FailCnt:0256.531,+302,282,I,[TEST],test_w25q16j_read_sfdp()53464450050100FF00050110800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE520F9FFFFFFFF0044EB086B083B42BBFEFFFFFFFFFF0000FFFF40EB0C200F5210D800003602A60082EA14B3E96376337A757A75F7A2D55C19F74DFFE930F880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF********* test,OkTest,61\/117,[Name:[w25q16j_read_sfdp],Fun:0x803e135],FailCnt:0256.844,+313,283,I,[TEST],test_w25q16j_chip_select()256.844,+0,284,W,[TEST],Gpio PB14=W25Q16J_CS...256.845,+1,285,I,[TEST],test_gpio_pin_lev()256.946,+101,286,I,[TEST],Set Pad:PB14 W25Q16J_CS to 0 OK!256.946,+0,287,I,[TEST],test_gpio_pin_lev()257.048,+102,288,I,[TEST],Set Pad:PB14 W25Q16J_CS to 1 OK!257.048,+0,289,I,[TEST],Wire,Pad:PB14,W25Q16J_CS,Ok!********* test,OkTest,62\/117,[Name:[w25q16j_chip_select],Fun:0x803e0b5],FailCnt:0257.351,+303,290,I,[TEST],test_w25q16j_write_enable()********* test,OkTest,63\/117,[Name:[w25q16j_write_enable],Fun:0x803e009],FailCnt:0257.653,+302,291,I,[TEST],test_w25q16j_is_connected()257.653,+0,292,W,[w25q16j],WORD:0x14ef257.654,+1,293,I,[w25q16j],ManufId:0xef257.654,+0,294,I,[w25q16j],DevId:0x14257.655,+1,295,I,[w25q16j],RegID Ok********* test,OkTest,64\/117,[Name:[w25q16j_is_connected],Fun:0x803e061],FailCnt:0257.957,+302,296,I,[TEST],test_w25q16j_form_addr()********* test,OkTest,65\/117,[Name:[w25q16j_form_addr],Fun:0x803d9ed],FailCnt:0258.259,+302,297,I,[TEST],test_w25q16j_read()5555555555555555555555555555555555555555555555555555555555555555********* test,OkTest,66\/117,[Name:[w25q16j_read],Fun:0x803db75],FailCnt:0258.562,+303,298,I,[TEST],test_w25q16j_write_activate()********* test,OkTest,67\/117,[Name:[w25q16j_write_activate],Fun:0x803dfb1],FailCnt:0258.864,+302,299,I,[TEST],test_w25q16j_erase_sector()********* test,OkTest,68\/117,[Name:[w25q16j_erase_sector],Fun:0x803df25],FailCnt:0260.105,+1241,300,I,[TEST],test_w25q16j_write()260.105,+0,301,I,[TEST],test_w25q16j_write_one() Addr: 0x1fb000 Pattern:0xaa261.104,+999,302,I,[TEST],WriteOk!261.106,+2,303,I,[TEST],DataMatch!261.106,+0,304,I,[TEST],test_w25q16j_write_one() Addr: 0x1fb000 Pattern:0x55262.105,+999,305,I,[TEST],WriteOk!262.107,+2,306,I,[TEST],DataMatch!262.107,+0,307,I,[TEST],test_w25q16j_write_one() Addr: 0x1fc000 Pattern:0xaa263.105,+998,308,I,[TEST],WriteOk!263.107,+2,309,I,[TEST],DataMatch!263.108,+1,310,I,[TEST],test_w25q16j_write_one() Addr: 0x1fc000 Pattern:0x55264.105,+997,311,I,[TEST],WriteOk!264.107,+2,312,I,[TEST],DataMatch!********* test,OkTest,69\/117,[Name:[w25q16j_write],Fun:0x803de31],FailCnt:0264.410,+303,313,I,[TEST],TestDuration:8788 ms=8.7880001 s=0.14646667 min264.410,+0,314,I,[TEST],Report264.411,+1,315,I,[TEST],ok:12\/117264.411,+0,316,I,[TEST],failed:0264.412,+1,317,I,[TEST],All 12 tests passed!<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0415\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0434\u043b\u044f LittleFS<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/58\/2e\/57\/582e57ad290d650610574dfdd8f9dbe9.png\" width=\"578\" height=\"394\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/58\/2e\/57\/582e57ad290d650610574dfdd8f9dbe9.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/58\/2e\/57\/582e57ad290d650610574dfdd8f9dbe9.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0422\u0435\u0441\u0442\u044b little_fs \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438<\/p>\n<p>\u041b\u043e\u0433 \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 LittleFS<\/p>\n<pre><code>8:5--&gt;tr litt+cmd_unit_test_run() argc 1488.675,+57355,325,I,[TEST],key [litt+]488.675,+0,326,W,[TEST],unit_test_run_key() key litt488.676,+1,327,I,[TEST],test_little_fs_delete():488.676,+0,328,I,[TEST],test_little_fs_write_one():File:[FileToDel.txt]488.871,+195,329,W,[LittleFs],1,ReMoveFile:[FileToDel.txt]488.982,+111,330,E,[LittleFs],Ret:-2=NoDirEntry488.982,+0,331,E,[LittleFs],LITTLE_FS_1,OpenError,File:[FileToDel.txt],Flag:1********* test,OkTest, 1\/117,[Name:[little_fs_delete],Fun:0x8038b59],FailCnt:0489.284,+302,332,I,[TEST],test_little_fs_mount():********* test,OkTest, 2\/117,[Name:[little_fs_mount],Fun:0x8038689],FailCnt:0489.665,+381,333,I,[TEST],test_little_fs_open():********* test,OkTest, 3\/117,[Name:[little_fs_open],Fun:0x80388fd],FailCnt:0490.012,+347,334,I,[TEST],test_little_fs_max_size():********* test,OkTest, 4\/117,[Name:[little_fs_max_size],Fun:0x803898d],FailCnt:0490.314,+302,335,I,[TEST],test_little_fs_write()490.314,+0,336,I,[TEST],test_little_fs_write_one():File:[TestWrFile1.txt]490.469,+155,337,I,[TEST],test_little_fs_write_one():File:[TestWrFile1.txt]490.594,+125,338,I,[TEST],test_little_fs_write_one():File:[TstWrF3.txt]********* test,OkTest, 5\/117,[Name:[little_fs_write],Fun:0x80389a9],FailCnt:0491.068,+474,339,I,[TEST],test_little_fs_write_lazy():491.671,+603,340,W,[LittleFs],EraseBlock:176493.079,+1408,341,W,[LittleFs],EraseBlock:177494.491,+1412,342,W,[LittleFs],EraseBlock:178********* test,OkTest, 6\/117,[Name:[little_fs_write_lazy],Fun:0x8038a71],FailCnt:0496.165,+1674,343,I,[TEST],test_little_fs_write_line():497.516,+1351,344,W,[LittleFs],EraseBlock:175********* test,OkTest, 7\/117,[Name:[little_fs_write_line],Fun:0x803876d],FailCnt:0500.453,+2937,345,I,[TEST],test_little_fs_cat():500.473,+20,346,I,[LittleFs],File:test_log.txt,Size:90 Byte********* test,OkTest, 8\/117,[Name:[little_fs_cat],Fun:0x8038895],FailCnt:0500.778,+305,347,I,[TEST],test_little_fs_write_4k():500.811,+33,348,W,[LittleFs],EraseBlock:180502.708,+1897,349,W,[LittleFs],EraseBlock:182********* test,OkTest, 9\/117,[Name:[little_fs_write_4k],Fun:0x8038c45],FailCnt:0504.070,+1362,350,I,[TEST],test_little_fs_write_bandwidth():537.909,+2518,372,I,[TEST],write_bandwidth:1210.739 bytes\/s=1.1823623 kBytes\/s=0.0011546507 MBytes\/s********* test,OkTest,10\/117,[Name:[little_fs_write_bandwidth],Fun:0x8038d01],FailCnt:0538.213,+304,373,I,[TEST],TestDuration:49538 ms=49.537998 s=0.82563335 min538.214,+1,374,I,[TEST],Report538.215,+1,375,I,[TEST],ok:10\/117538.215,+0,376,I,[TEST],failed:0538.216,+1,377,I,[TEST],All 10 tests passed!8:58--&gt;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c NVRAM (store_fs) \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u043c \u0442\u0435\u0441\u0442\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0438\u0448\u0435\u0442 \u0438 \u0447\u0438\u0442\u0430\u0435\u0442 \u043e\u0434\u043d\u043e\u0431\u0430\u0439\u0442\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c 98. \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u0441\u0442 store_fs_set_get \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/fc\/1b\/82\/fc1b82936ab9c69bd8967fc589839786.png\" width=\"649\" height=\"499\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/fc\/1b\/82\/fc1b82936ab9c69bd8967fc589839786.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/fc\/1b\/82\/fc1b82936ab9c69bd8967fc589839786.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><strong>\u0418\u0442\u043e\u0433\u0438<br \/><\/strong>\u0423\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0443\u0447\u0438\u0442\u044cc\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 w25q16j. \u0423\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 w25q16j \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 LittleFS. \u0423\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c NVRAM \u043d\u0430 w25q16.<\/p>\n<p><strong>\u0421\u043b\u043e\u0432\u0430\u0440\u044c<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0410\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0442\u0443\u0440\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">SPI<\/p>\n<\/td>\n<td>\n<p align=\"left\">Serial Peripheral Interface<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">MSB<\/p>\n<\/td>\n<td>\n<p align=\"left\">most significant bit<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">VCC<\/p>\n<\/td>\n<td>\n<p align=\"left\">Voltage on Collector-Collector<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">OTP<\/p>\n<\/td>\n<td>\n<p align=\"left\">One-Time Program<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">WSON<\/p>\n<\/td>\n<td>\n<p align=\"left\">Very Very thin <em>Small Outline No-Lead<\/em><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">JEDEC<\/p>\n<\/td>\n<td>\n<p align=\"left\">Joint Electron Device Engineering Council<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">CMOS<\/p>\n<\/td>\n<td>\n<p align=\"left\">Complementary Metal-Oxide-Semiconductor<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ASIC<\/p>\n<\/td>\n<td>\n<p align=\"left\">Application-specific integrated circuit<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u0421\u0441\u044b\u043b\u043a\u0438<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>URL<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">STM32F4XX<\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"https:\/\/stm32-base.org\/boards\/STM32F407ZGT6-STM32F4XX.html#W25Q16JV\" rel=\"noopener nofollow\">https:\/\/stm32-base.org\/boards\/STM32F407ZGT6-STM32F4XX.html#W25Q16JV<\/a><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0431\u0437\u043e\u0440 SPI Flash \u043f\u0430\u043c\u044f\u0442\u0438 MX25L6433F<\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"https:\/\/habr.com\/ru\/articles\/1041732\/\" rel=\"noopener nofollow\">https:\/\/habr.com\/ru\/articles\/1041732\/<\/a><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0443\u0441\u043a LittleFS (NVRAM \u0441 \u0437\u0430\u043f\u0440\u0435\u0442\u043e\u043c \u0434\u043e-\u0437\u0430\u043f\u0438\u0441\u0438 flash)<\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"https:\/\/habr.com\/ru\/articles\/925372\/\" rel=\"noopener nofollow\">https:\/\/habr.com\/ru\/articles\/925372\/<\/a><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0417\u0430\u043f\u0443\u0441\u043a \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b LittleFS \u043d\u0430 SPI\u2011NAND Flash \u043e\u0442 GigaDevice<\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"https:\/\/habr.com\/ru\/companies\/yadro\/articles\/1061562\/\" rel=\"noopener nofollow\">https:\/\/habr.com\/ru\/companies\/yadro\/articles\/1061562\/<\/a><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1103844\/\">https:\/\/habr.com\/ru\/articles\/1103844\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u0440\u043e\u043b\u043e\u0433\u0412 \u044d\u0442\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u0435 \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u043e\u0439 w25q16j. \u042d\u0442\u043e \u044d\u043d\u0435\u0440\u0433\u043e\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u0430\u044f 133MHz SPI Nor flash \u043f\u0430\u043c\u044f\u0442\u044c \u043e\u0431\u044a\u0435\u043c\u043e\u043c 2 MByte. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 QSPI \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a \u0438\u0437 SPI (XIP).\u0414\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0430 \u0441 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439. \u041f\u043b\u044e\u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u041f\u041e.\u0421\u0445\u0435\u043c\u043e\u0442\u0435\u0445\u043d\u0438\u043a\u0430\u0412 \u0448\u0438\u0440\u043e\u043a\u0443\u044e \u043a\u043b\u0435\u0442\u043a\u0443 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 w25q16j \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0442 \u0432 \u0442\u0430\u043a\u043e\u0439 \u043c\u043d\u0435\u043c\u043e\u0441\u0445\u0435\u043c\u043e\u0439. \u041f\u0430\u043c\u044f\u0442\u044c \u0434\u043e\u0440\u043e\u0433\u0430\u044f. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f 45 RUR \u0437\u0430 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442.\u0418\u0437 \u0447\u0438\u043f\u0430 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0440\u043e\u0432\u043d\u043e 8 \u043f\u0438\u043d\u043e\u0432\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b? \u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043b\u0438\u0431\u043e \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043b\u0438\u0431\u043e \u043d\u0430 \u0441\u0435\u043a\u0442\u043e\u0440\u044b \u0438\u043b\u0438 \u0431\u043b\u043e\u043a\u0438. \u041c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 W25Q16JV \u0432\u044b\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0443\u043c 100 000 (100K) \u0446\u0438\u043a\u043b\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\/\u0441\u0442\u0438\u0440\u0430\u043d\u0438\u044f \u043d\u0430 \u0441\u0435\u043a\u0442\u043e\u0440. \u0421\u0440\u043e\u043a \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 20 \u043b\u0435\u0442.\u0431\u0438\u0442 \u0434\u043b\u044f \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438\u0440\u0430\u0437\u043c\u0435\u0440 \u0447\u0430\u0441\u0442\u0438, \u0431\u0430\u0439\u0442\u0415\u043c\u043a\u043e\u0441\u0442\u044c \u0447\u0438\u043f\u0430\u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f2112097152\u0431\u0430\u0439\u0442132568192\u0441\u0442\u0440\u0430\u043d\u0438\u044694096512\u0441\u0435\u043a\u0442\u043e\u0440\u043e\u043256553632\u0431\u043b\u043e\u043a\u043e\u0432\u0422\u043e \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438 2MByte \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0441\u0435\u0433\u043e 21 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441 24 \u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 SPI \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 Flash \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0431\u043e\u043b\u0435\u0435 16 MByte, \u0438\u0431\u043e 2 \u0432 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 24 \u0440\u0430\u0432\u043d\u043e 16 777 216 \u0431\u0430\u0439\u0442.\u041e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432\u0413\u0434\u0435 \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u0441\u043c\u0435\u0445\u0443 w25q16j \u0432 \u043f\u0440\u0438\u0440\u043e\u0434\u0435? \u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u0435\u0435 \u043b\u0435\u043f\u044f\u0442 \u043f\u043e\u0432\u0441\u044e\u0434\u0443. \u0415\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 STM32F4XX M. \u0414\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u043a\u0443\u043f\u0438\u0442\u044c \u0443\u0447\u0435\u0431\u043d\u0443\u044e \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0443 JL_32F4XX. \u041d\u0430 \u043d\u0435\u0439 \u043a\u0430\u043a \u0440\u0430\u0437 \u043f\u0440\u0438\u043f\u0430\u044f\u043d\u0430 \u0432\u043e\u0441\u044c\u043c\u0438 \u043f\u0438\u043d\u043e\u0432\u0430\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 w25q16j \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0441\u043b\u043e\u0435.STM32F4XX\u041c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043a SPI3\u041e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u044f \u0431\u0443\u0434\u0443 \u043d\u0430 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0435 STM32F4XX. \u0422\u0430\u043c \u0447\u0438\u043f W25Q16JV \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0432\u043e\u0442 \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0430\u0432\u0438\u043b\u0443.W25Q16JVGPIOJTAGDIR MCUFunctionPINmuxConnectCSPB14&#8212;outGPIO0H2.54DIPB5&#8212;outSPI3_MOSI6H2.5DOPB4&#8212;inSPI3_MISO6H2.6CLKPB3JTDOoutSPI3_SCK6H2.7HOKD&#8212;&#8212;&#8212;-WP&#8212;&#8212;&#8212;-\u041c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u044d\u0442\u0438\u043c 4\u043c \u043f\u0438\u043d\u0430\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 SPI3 \u0442\u0440\u0430\u0444\u0444\u0438\u043a\u0430. \u041f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b JL_32F4XX \u043d\u0430\u0434\u043e \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 SWD. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e SPI3 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 JTAG \u043f\u0438\u043d JTDO(PB3). PB3 \u0437\u0430\u043d\u044f\u0442 SPI3_SCK. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c PB3 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f JTDO.\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0421\u0432\u044f\u0437\u044c \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u043e\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 SPI. \u041b\u0438\u0431\u043e QSPI. \u0411\u0438\u0442\u044b \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u043f\u0430\u0434\u0443 \u043d\u0430 \u043f\u0440\u043e\u0432\u043e\u0434\u0435 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u043e\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0411\u0438\u0442\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u0448\u0438\u043c \u0432\u043f\u0435\u0440\u0435\u0434 (MSB First). \u0427\u0430\u0441\u0442\u043e\u0442\u0443 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0433\u043d\u0430\u0442\u044c \u0434\u043e 133 MHz.\u041d\u0430 STM32 \u0441\u0430\u043c\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0435\u0434 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0434\u043b\u044f \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f SPI3 \u044d\u0442\u043e 2.\/** @defgroup SPI_BaudRate_Prescaler SPI BaudRate Prescaler\u00a0\u00a0* @{\u00a0\u00a0*\/#define SPI_BAUDRATEPRESCALER_2 \u00a0 \u00a0 \u00a0 \u00a0 (0x00000000U)#define SPI_BAUDRATEPRESCALER_4 \u00a0 \u00a0 \u00a0 \u00a0 (SPI_CR1_BR_0)#define SPI_BAUDRATEPRESCALER_8 \u00a0 \u00a0 \u00a0 \u00a0 (SPI_CR1_BR_1)#define SPI_BAUDRATEPRESCALER_16\u00a0 \u00a0 \u00a0 \u00a0 (SPI_CR1_BR_1 | SPI_CR1_BR_0)#define SPI_BAUDRATEPRESCALER_32\u00a0 \u00a0 \u00a0 \u00a0 (SPI_CR1_BR_2)#define SPI_BAUDRATEPRESCALER_64\u00a0 \u00a0 \u00a0 \u00a0 (SPI_CR1_BR_2 | SPI_CR1_BR_0)#define SPI_BAUDRATEPRESCALER_128 \u00a0 \u00a0 \u00a0 (SPI_CR1_BR_2 | SPI_CR1_BR_1)#define SPI_BAUDRATEPRESCALER_256 \u00a0 \u00a0 \u00a0 (SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0)\u041f\u0440\u0438 \u044d\u0442\u043e\u043c SPI3 \u0442\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0442 \u0448\u0438\u043d\u044b APB1 \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e 42MHz.\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 PCB \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c W25 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 21 MHz. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0441\u0445\u0435\u043c\u043e\u0442\u0435\u0445\u043d\u0438\u043a\u0438 JL_32F4XX \u0441\u0442\u043e\u0438\u043b\u043e \u0431\u044b \u0432\u0441\u0451 \u0436\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u043b\u044f W25 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 SPI1, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430 STM32 \u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0442\u044c 42MHz.\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0423 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b. \u041f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443 \u044d\u0442\u043e 42 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u0430. \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043f\u0430\u043a\u0435\u0442\u0430.\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b\u041a\u0430\u043a \u0438 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043d\u0430\u0432\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u043e\u0433\u043e ASIC-\u0430 \u0443 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b w25q16j \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b. \u0418\u0445 \u0432\u0441\u0435\u0433\u043e \u0441\u0435\u043c\u044c \u0448\u0442\u0443\u043a.\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u0420\u0430\u0437\u043c\u0435\u0440RD CmdWR CmdStatus110x050x01Status210x350x31Status310x150x11JEDEC ID30x9f&#8212;Mad ID40x92sfdp2560x5A&#8212;unique_id80x4B&#8212;\u041c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 w25q16j \u043c\u043e\u0436\u043d\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0448\u0438\u043d\u0435 SPI \u043f\u043e \u0435\u0451 ID.\u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435SPI \u041a\u043e\u043c\u0430\u043d\u0434\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430manufacturer_id0xef0x9FJEDEC IDmemory type0x400x9FJEDEC IDcapacity id0x150x9FJEDEC IDDevice Id0x140x90Manufacturer \/ Device ID\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0unique_id0x2a7664cb278863e60x4BUnique ID Number\u041a\u0430\u043a \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043e, \u0443 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b w25q16j \u0432\u043d\u0443\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043c\u0430\u043d\u0434. \u0412\u0441\u0435\u0433\u043e 42 \u043a\u043e\u043c\u0430\u043d\u0434\u044b! \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f 99 % \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u043e \u043a\u0440\u043e\u0445\u043e\u0442\u043d\u043e\u0435 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e SPI \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0442\u0440\u0438 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438: \u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0441\u0442\u0438\u0440\u0430\u043d\u0438\u0435 \u0441\u0435\u043a\u0442\u043e\u0440\u0430, \u0437\u0430\u043f\u0438\u0441\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 &#8212; \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0446\u0438\u0438.\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u04381) \u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0447\u0442\u0435\u043d\u0438\u044f (0x03) \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e 24-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430. \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e SPI \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0430\u043d\u043d\u044b\u0445.\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0442\u0438\u0440\u0430\u043d\u0438\u0435 \u0441\u0435\u043a\u0442\u043e\u0440\u04301) \u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u0437\u0430\u043f\u0438\u0441\u0438. \u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 WRITE_ENABLE, \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0431\u0438\u0442 WEL (WRITE ENABLE LATCH) \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 1. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 WEL=1 \u043c\u043e\u0436\u043d\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435. 2) \u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0441\u0442\u0435\u0440\u0435\u0442\u044c \u0441\u0435\u043a\u0442\u043e\u0440 (SECTOR_ERASE_4KB) \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0435\u043a\u0442\u043e\u0440\u0430.3) \u041e\u0436\u0438\u0434\u0430\u0442\u044c \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0441\u0442\u0438\u0440\u0430\u043d\u0438\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 1 \u0438 \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u0447\u0442\u043e\u0431\u044b \u0432 \u0431\u0438\u0442\u0435 BUSY \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0.4) \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0444\u0430\u043a\u0442 \u0441\u0442\u0438\u0440\u0430\u043d\u0438\u044f \u043f\u0443\u0442\u0435\u043c \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0441\u0432\u0435\u0440\u043a\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0441 FF.\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u04381) \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u043d\u044b\u0439 \u043f\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0443 256 \u0430\u0434\u0440\u0435\u0441 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438.\u0412\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u2014 \u0430\u0434\u0440\u0435\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u043e\u043c \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043d\u0443\u043b\u044f. \u041f\u0435\u0440\u0438\u043e\u0434\u044b \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0435\u043f\u0435\u043d\u0435\u0439 \u0434\u0432\u043e\u0439\u043a\u0438 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 256.2) \u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u043e\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435. \u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 WRITE_ENABLE, \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0431\u0438\u0442 WEL (WRITE ENABLE LATCH) \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 1. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 WEL=1 \u043c\u043e\u0436\u043d\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435. 3) \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 Page program.4) \u041e\u0436\u0438\u0434\u0430\u0442\u044c \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 1 \u0438 \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u0447\u0442\u043e\u0431\u044b \u0432 \u0431\u0438\u0442\u0435 BUSY \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0.5) \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u043e\u0432\u043f\u0430\u043b \u0441 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u043c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.\u0414\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u0430 \u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 w25q16\u2116\u0414\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u0430\u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u04381\u0415\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u0441\u0442\u0438\u0440\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u0447\u0438\u043f\u0430\u0421\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0430\u043b\u043e \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u044d\u0442\u043e 16 MByte2\u043d\u0435\u0442 \u0432\u044b\u0431\u0438\u0442\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u043a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 NAND\u043d\u0430\u0434\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0439 \u0438\u0437\u043d\u043e\u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e3\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043e\u0437\u0430\u043f\u0438\u0441\u044c \u044f\u0447\u0435\u0435\u043a \u0444\u043b\u0435\u0448\u2011\u043f\u0430\u043c\u044f\u0442\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0431\u0430\u0439\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0xFE, \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c 0xFC, \u0438 \u0432 \u0444\u0438\u043d\u0430\u043b\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u0436\u0435 0xFC. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 NVRAM \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.\u041e\u0434\u043d\u0430\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u0438 \u0441\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u0433\u043e\u043b\u043e\u0439 SPI flash \u043a\u0440\u0430\u0439\u043d\u0435 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u043c \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0440\u044f\u043c\u043e \u043f\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438\u043b\u0438, \u0435\u0449\u0435 \u0445\u0443\u0436\u0435, \u0441\u0442\u0435\u0440\u0435\u0442\u044c word \u043f\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u0441\u0435\u043a\u0442\u043e\u0440\u043e\u0432. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 SPI flash \u043c\u043e\u0433\u0443\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u043c, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c\u0441\u044f \u0432 \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u0435. \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b &#8212; \u0437\u0430\u043f\u0443\u0441\u043a \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.\u041f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Little-FS\u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f third\u2011party open source Little FS. Third\u2011party \u2014 \u043a\u043e\u0434 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0441\u043a\u0430\u0447\u0430\u043b\u0438 \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430.\u0421\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0433\u043e\u043b\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b w25q16 \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u0438. \u041c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 \u043d\u0435\u0439 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0437 \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u0412\u043e\u0442 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 LittleFS, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432 2018 \u0433\u043e\u0434\u0443.File &#8212; \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0430\u0439\u0442\u043e\u0432 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c RAM, ROM (Flash), FRAM, EEPROM, SD \u043a\u0430\u0440\u0442\u044b. \u0427\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439? \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a \u044d\u0442\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e. \u041f\u0443\u0441\u0442\u044c \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u043e\u0435 16-\u0431\u0438\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e. \u0422\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432, \u0442\u043e \u0440\u044f\u0434\u043e\u043c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0434\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u0434\u043b\u0438\u043d\u0443 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u0414\u043b\u0438\u043d\u0443 \u0444\u0430\u0439\u043b\u0430 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430.\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b LittleFS \u043b\u0435\u0436\u0430\u0442 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043d\u0430 GitHub. \u0417\u0430\u0434\u0430\u0447\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433-\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 API \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b w25q16 \u043a \u043a\u043e\u0434\u0443 LittleFS. \u041f\u0435\u0440\u0435\u0434 \u0432\u0430\u043c\u0438 \u043a\u043e\u043d\u0444\u0438\u0433 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 W25q16 \u043a \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 little fs.#include &#171;little_fs_config.h&#187;#include &#171;data_utils.h&#187;#include &#171;flash_mcal.h&#187;#include &#171;log.h&#187;#ifdef HAS_W25Q16J#include &#171;w25q16j_mcal.h&#187;#endif#include &#171;little_fs.h&#187;#ifdef LFS_NO_MALLOC\/\/ Optional statically allocated read buffer.\/\/ Must be cache_size.\/\/ By default lfs_malloc is used to allocate this buffer.static uint8_t StaticFileBuffer[LITTLE_FS_CACHE_SIZE] = {0};static uint8_t readBuffer[LITTLE_FS_CACHE_SIZE] = {0};static uint8_t progBuffer[LITTLE_FS_CACHE_SIZE] = {0};static uint8_t lookaheadBuffer[LITTLE_FS_PAGE_SIZE] = {0};#endifstatic int FlashToLittleFsRet(bool res) {    int ret = LFS_ERR_OK;    if (false == res) {        ret = LFS_ERR_CORRUPT;    }    return ret;}static int flash_device_prog(const struct lfs_config* c,                             lfs_block_t block,                             lfs_off_t off,                             const void* buffer,                             lfs_size_t size) {    int ret = LFS_ERR_CORRUPT;    LOG_NOTICE(LITTLE_FS, &#171;Write,Block:%u,OffSet:%u,Size:%u&#187;, block, off, size);    LittleFsHandle_t* Node = LittleFsGetNode(1);    if(Node) {#ifdef HAS_W25Q16J        uint32_t phy_address = 0;        phy_address = Node-&gt;base_address  + block * LITTLE_FS_BLOCK_SIZE + off;        bool res = false;        res = w25q16j_page_program(1, phy_address, (uint8_t*) buffer, size);        ret = FlashToLittleFsRet(res);#endif    }    return ret;}static int flash_block_device_read(const struct lfs_config* c,                                   lfs_block_t block,                                   lfs_off_t off,                                   void* buffer,                                   lfs_size_t size) {    int ret = 0;    LittleFsHandle_t* Node = LittleFsGetNode(1);    if(Node) {#ifdef HAS_W25Q16J        LOG_PARN(LITTLE_FS, &#171;Read,Block:%u,OffSet:%u,Size:%u&#187;, block, off, size);        uint32_t phy_address = 0;        phy_address =  Node-&gt;base_address + block * LITTLE_FS_BLOCK_SIZE + off;        bool res = false;        res = w25q16j_read(1, phy_address, (uint8_t*) buffer, size);        ret = FlashToLittleFsRet(res);#endif    }    return ret;}static int flash_block_device_erase(const struct lfs_config* c,                                            lfs_block_t block) {    int ret = LFS_ERR_CORRUPT;    LOG_WARNING(LITTLE_FS, &#171;EraseBlock:%u&#187;, block);    LittleFsHandle_t* Node = LittleFsGetNode(1);    if(Node) {#ifdef HAS_W25Q16J        uint32_t phy_address =&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-501739","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/501739","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=501739"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/501739\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=501739"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=501739"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=501739"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}